当前位置: 首页>>代码示例>>C++>>正文


C++ AABSPTree::balance方法代码示例

本文整理汇总了C++中AABSPTree::balance方法的典型用法代码示例。如果您正苦于以下问题:C++ AABSPTree::balance方法的具体用法?C++ AABSPTree::balance怎么用?C++ AABSPTree::balance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AABSPTree的用法示例。


在下文中一共展示了AABSPTree::balance方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: convertWorld


//.........这里部分代码省略.........
										pMC.append(modelContainer);
									}
									else
									{
										result = false;
									}
								}
							}
							// process the large singe files
							int pos = 0;
							while(result && (pos < nameCollection.iSingeFiles.size()))
							{
								std::string destFileName = iDestDir;
								destFileName.append("/");
								std::string dirEntryName = getDirEntryNameFromModName(pMapId,nameCollection.iSingeFiles[pos]);
								std::string checkDoubleStr = std::string(dirfilename);
								checkDoubleStr.append("##");
								checkDoubleStr.append(nameCollection.iSingeFiles[pos]);
								// Check, if same file already is in the same dir file
								if(!iCoordModelMapping->isAlreadyProcessedSingleFile(checkDoubleStr))
								{
									iCoordModelMapping->addAlreadyProcessedSingleFile(checkDoubleStr);
									fprintf(dirfile, "%s\n",dirEntryName.c_str());
									destFileName.append(dirEntryName);

									Array<std::string> positionarray;
									positionarray.append(nameCollection.iSingeFiles[pos]);

									if(!iCoordModelMapping->isAlreadyProcessedSingleFile(nameCollection.iSingeFiles[pos]))
									{
										modelContainer = processNames(positionarray, destFileName.c_str());
										iCoordModelMapping->addAlreadyProcessedSingleFile(nameCollection.iSingeFiles[pos]);
										if(modelContainer)
										{
											pMC.append(modelContainer);
										}
										else
										{
											result = false;
										}
									}
								}
								++pos;
							}
							fclose(dirfile);
						}
					}
					return(result);
				}

				//=================================================================

				void removeEntriesFromTree(AABSPTree<SubModel *>* pTree)
				{
					Array<SubModel *> submodelArray;
					pTree->getMembers(submodelArray);
					int no = submodelArray.size();
					while(no > 0)
					{
						--no;
						delete submodelArray[no];
					}
				}

				//=================================================================

				ModelContainer* TileAssembler::processNames(const Array<std::string>& pPositions, const char* pDestFileName)
				{
					ModelContainer *modelContainer = 0;

					Vector3 basepos = Vector3(0,0,0);
					AABSPTree<SubModel *>* mainTree = new AABSPTree<SubModel *>();

					int pos = 0;

					bool result = true;
					while(result && (pos < pPositions.size()))
					{
						std::string modelPosString = pPositions[pos];
						std::string modelFileName = getModNameFromModPosName(modelPosString);

						if(!fillModelIntoTree(mainTree, basepos, modelPosString, modelFileName))
						{
							result = false;
							break;
						}
						++pos;
					}
					if(result && mainTree->size() > 0)
					{
						mainTree->balance();
						modelContainer = new ModelContainer(mainTree);
						modelContainer->writeFile(pDestFileName);
					}
					removeEntriesFromTree(mainTree);

					delete mainTree;

					return(modelContainer);
				}
开发者ID:wow4all,项目名称:wowtbc,代码行数:101,代码来源:TileAssembler.cpp

示例2: readRawFile


//.........这里部分代码省略.........
							}

							// ---- indexes
							if(fread(&blockId, 4, 1, rf) != 1) { fclose(rf); return(false); }
							if(strcmp(blockId, "INDX") != 0) { fclose(rf); return(false); }
							if(fread(&blocksize, sizeof(int), 1, rf) != 1) { fclose(rf); return(false); }
							unsigned int nindexes;
							if(fread(&nindexes, sizeof(uint32), 1, rf) != 1) { fclose(rf); return(false); }
							if(nindexes >0)
							{
								unsigned short *indexarray = new unsigned short[nindexes*sizeof(unsigned short)];
								if(fread(indexarray, sizeof(unsigned short), nindexes, rf) != nindexes) { fclose(rf); return(false); }
								for(int i=0;i<(int)nindexes; i++)
								{
									unsigned short val = indexarray[i];
									tempIndexArray.append(val);
								}
								delete indexarray;
							}

							// ---- vectors
							if(fread(&blockId, 4, 1, rf) != 1) {fclose(rf); return(false); }
							if(strcmp(blockId, "VERT") != 0) { fclose(rf); return(false); }
							if(fread(&blocksize, sizeof(int), 1, rf) != 1) { fclose(rf); return(false); }
							unsigned int nvectors;
							if(fread(&nvectors, sizeof(int), 1, rf) != 1) { fclose(rf); return(false); }
							float *vectorarray = 0;
							if(nvectors >0)
							{
								vectorarray = new float[nvectors*sizeof(float)*3];
								if(fread(vectorarray, sizeof(float)*3, nvectors, rf) != nvectors) { fclose(rf); return(false); }
							}
							// ----- liquit
							if(flags & 0x00001000)
							{
								// we have liquit -> not handled yet ... skip
								if(fread(&blockId, 4, 1, rf) != 1) { fclose(rf); return(false); }
								if(strcmp(blockId, "LIQU") != 0) { fclose(rf); return(false); }
								if(fread(&blocksize, sizeof(int), 1, rf) != 1) { fclose(rf); return(false); }
								fseek(rf, blocksize, SEEK_CUR);
							}

							for(unsigned int i=0, indexNo=0; indexNo<nvectors; indexNo++)
							{
								Vector3 v = Vector3(vectorarray[i+2], vectorarray[i+1], vectorarray[i+0]);
								i+=3;
								v = pModelPosition.transform(v);

								float swapy = v.y;
								v.y = v.x;
								v.x = swapy;

								tempVertexArray.append(v);
							}

							// ---- calculate triangles
							int rest = nindexes%3;
							if(rest != 0)
							{
								nindexes -= rest;
							}

							for(unsigned int i=0;i<(nindexes);)
							{
								Triangle t = Triangle(tempVertexArray[tempIndexArray[i+2]], tempVertexArray[tempIndexArray[i+1]], tempVertexArray[tempIndexArray[i+0]] );
								i+=3;
								++trianglecount;
								if(g>= startgroup && g <= endgroup)
								{
									gtree->insert(t);
								}
							}

							if(vectorarray != 0)
							{
								delete vectorarray;
							}

							if(gtree->size() >0)
							{
								gtree->balance();
								SubModel *sm = new SubModel(gtree);
								sm->setIndoorFlag( isindoor );
								#ifdef _ASSEMBLER_DEBUG
								if(::g_df) fprintf(::g_df,"group trianglies: %d, Tris: %d, Nodes: %d, gtree.triangles: %d\n", g, sm->getNTriangles(), sm->getNNodes(), gtree->memberTable.size());
								if(sm->getNTriangles() !=  gtree->memberTable.size())
								{
									if(::g_df) fprintf(::g_df,"ERROR !!!! group trianglies: %d, Tris: %d, Nodes: %d, gtree.triangles: %d\n", g, sm->getNTriangles(), sm->getNNodes(), gtree->memberTable.size());
								}
								#endif
								sm->setBasePosition(pModelPosition.iPos);
								pMainTree->insert(sm);
							}
							delete gtree;
						}
						fclose(rf);
						result = true;
					}
					return(result);
				}
开发者ID:wow4all,项目名称:wowtbc,代码行数:101,代码来源:TileAssembler.cpp

示例3: readRawFile


//.........这里部分代码省略.........
                for (int i=0;i<(int)nindexes; i++)
                {
                    unsigned short val = indexarray[i];
                    tempIndexArray.append(val);
                }
                delete[] indexarray;
            }

            // ---- vectors
            READ_OR_RETURN(&blockId, 4);
            CMP_OR_RETURN(blockId, "VERT");
            READ_OR_RETURN(&blocksize, sizeof(int));
            unsigned int nvectors;
            READ_OR_RETURN(&nvectors, sizeof(int));

            float *vectorarray = 0;

            // add vectorarray free
            #undef READ_OR_RETURN
            #undef CMP_OR_RETURN
            #define READ_OR_RETURN(V,S) if (fread((V), (S), 1, rf) != 1) { \
                                            fclose(rf); delete gtree; delete[] vectorarray; return(false); }
            #define CMP_OR_RETURN(V,S)  if (strcmp((V),(S)) != 0)        { \
                                            fclose(rf); delete gtree; delete[] vectorarray; return(false); }

            if (nvectors >0)
            {
                vectorarray = new float[nvectors*sizeof(float)*3];
                READ_OR_RETURN(vectorarray, nvectors*sizeof(float)*3);
            }
            // ----- liquit
            if (flags & 1)
            {
                // we have liquit -> not handled yet ... skip
                READ_OR_RETURN(&blockId, 4);
                CMP_OR_RETURN(blockId, "LIQU");
                READ_OR_RETURN(&blocksize, sizeof(int));
                fseek(rf, blocksize, SEEK_CUR);
            }


            for (unsigned int i=0, indexNo=0; indexNo<nvectors; indexNo++)
            {
                Vector3 v = Vector3(vectorarray[i+2], vectorarray[i+1], vectorarray[i+0]);
                i+=3;
                v = pModelPosition.transform(v);

                float swapy = v.y;
                v.y = v.x;
                v.x = swapy;

                tempVertexArray.append(v);
            }

            // ---- calculate triangles
            int rest = nindexes%3;
            if (rest != 0)
            {
                nindexes -= rest;
            }

            for (unsigned int i=0;i<(nindexes);)
            {
                Triangle t = Triangle(tempVertexArray[tempIndexArray[i+2]], tempVertexArray[tempIndexArray[i+1]], tempVertexArray[tempIndexArray[i+0]] );
                i+=3;
                ++trianglecount;
                if (g>= startgroup && g <= endgroup)
                {
                    gtree->insert(t);
                }
            }

            // drop of temporary use defines
            #undef READ_OR_RETURN
            #undef CMP_OR_RETURN

            if (vectorarray != 0)
            {
                delete vectorarray;
            }

            if (gtree->size() >0)
            {
                gtree->balance();
                SubModel *sm = new SubModel(gtree);
                #ifdef _ASSEMBLER_DEBUG
                if (::g_df) fprintf(::g_df,"group trianglies: %d, Tris: %d, Nodes: %d, gtree.triangles: %d\n", g, sm->getNTriangles(), sm->getNNodes(), gtree->memberTable.size());
                if (sm->getNTriangles() !=  gtree->memberTable.size())
                {
                    if (::g_df) fprintf(::g_df,"ERROR !!!! group trianglies: %d, Tris: %d, Nodes: %d, gtree.triangles: %d\n", g, sm->getNTriangles(), sm->getNNodes(), gtree->memberTable.size());
                }
                #endif
                sm->setBasePosition(pModelPosition.iPos);
                pMainTree->insert(sm);
            }
            delete gtree;
        }
        fclose(rf);
        return true;
    }
开发者ID:Sanzzes,项目名称:wopc-core,代码行数:101,代码来源:TileAssembler.cpp


注:本文中的AABSPTree::balance方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。