KqGis二次开发入门zsl_第1页
KqGis二次开发入门zsl_第2页
KqGis二次开发入门zsl_第3页
KqGis二次开发入门zsl_第4页
KqGis二次开发入门zsl_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

KqGis二次开发入门张胜兰1.kqGis结构模型管理器CPlatManagerCdataManager数据包图块属性点坐标叠置操作管理器平台管理器CPlatManager

数据管理器CdataManager

平台管理器——CPlatManager平台绘图接口:CdataIO_draw平台实体变更:增加图块、移动等获取、设置数据包的信息:获得当前数据包CvectorPackageData*Nonce_GetData();设置当前数据包CvectorPackageData*Nonce_SetData(CvectorPackageData*pData);获得数据包intGetDataNo(CvectorPackageData*pData);intaddCurrPackage(BOOLcheckFlag=TRUE,BOOLsetCurrFlag=TRUE); //增加当前包数据管理器——CdataManager

对数据包里面的数据进行处理:voidpackage_CopyAll(CvectorPackageData*pData0,CvectorPackageData*pData1,intisSelect);对层进行操作:intLayerNameGetLayerNo(intpackageNo,CStringlayerName); //由层名取层号对实体的操作:doubleentity_CalcEllipseAcreage(intpackageNo,intentityNo); //计算一个实体椭球面积对标准属性的操作:CStringentity_GetAttribValueByName(intpackageNo,intentityNo,CStringfldName);

//获得一个标准属性值,通过字段名称数据包——CvectorPackageData*数据管理器对象指针:

CdataManager*m_pDataManager实体容器:CvectorEntityArray*m_pVectorEntityArray层管理器:CGtLayersm_layers数据连接管理器:

CGtDataLinksm_dataLinks矢量实体数据:CvectorEntityArraym_vectorEntityArray图块——CvectorEntityData*

属性层指针:CGtLayer*m_pRelLayer实体ID:longm_vectorEntityID数据库对象ID:longm_gisObjectID选中标志:BOOLm_selectFlag点容器:CvectorPointArraym_vectorPointArray线段容器:CvectorSegmentArraym_vectorSegmentArray;属性标准属性voidentity_InitAttribValue(); //实体标准属性值的初始化voidentity_AttribValueArrayRemoveAll();//清空标准属性值容器,进入未初始化状态intentity_GetAttribValueSize(); //取标准属性定义的域个数intentity_GetAttribValueCount();//取标准属性实际的域个数BOOLentity_UnllAttribValue(intattribNo);//置空一个标准属性值BOOLentity_AddAttribValue(intattribNo,CStringvalue);//追加一个标准属性值BOOLentity_SetAttribValue(intattribNo,CStringvalue);//设置一个标准属性值CStringentity_GetAttribValue(intattribNo);//获得一个标准属性值CStringentity_GetAttribName(intattribNo);//获得一个标准属性字段名CStringentity_GetAttribValueByName(CStringfldName); //获得一个标准属性值,通过字段名称BOOLentity_SetAttribValueByName(CStringfldName,CStringvalue); //设置一个标准属性值,通过字段名称用户属性s_sMap m_mapUserDataSetUserData(CvectorEntityData*pChunk,CStringsfield,CStringsValue);GetUserData(CvectorEntityData*pChunk,CStringsfield);点容器:CvectorPointArray图块的边界坐标:longentityBoundX0;longentityBoundY0;longentityBoundZ0;longentityBoundX1;longentityBoundY1;longentityBoundZ1;叠置操作叠置操作//从层加载数据CGtLayer*pSrcLayer=layerBoolDlg.m_pSrcLayer;CGtLayer*pOperLayer=layerBoolDlg.m_pOperLayer;//将两层数据复制到两数据包//源数据m_pPlatManager->addCurrPackage(0,1);//新增一个图块数据包CvectorPackageData*s_interiorData=m_pPlatManager->m_pDataManager->getInteriorData(m_pPlatManager->m_pDataManager->getInteriorDataTotal()-1);s_interiorData->CloneDataFromLayer(pSrcLayer);//操作数据m_pPlatManager->addCurrPackage(0,1);//新增一个图块数据包CvectorPackageData*o_interiorData=m_pPlatManager->m_pDataManager->getInteriorData(m_pPlatManager->m_pDataManager->getInteriorDataTotal()-1);o_interiorData->CloneDataFromLayer(pOperLayer);doubleboolLimit;m_pPlatManager->m_pDataManager->get_dBoolLimit(boolLimit);m_pPlatManager->m_pDataManager->set_dBoolLimit(dPointLimit);m_pPlatManager->m_pDataManager->twoLayer_bool_att(operateType); //用户调用双层BOOL操作m_pPlatManager->m_pDataManager->set_dBoolLimit(boolLimit);//结果在新数据包intpackageNo1;m_pPlatManager->m_pDataManager->package_GetUpperBound(packageNo1);CvectorPackageData*pData=NULL;m_pPlatManager->m_pDataManager->package_GetAt(packageNo1,(int&)pData);m_pPlatManager->setCurrPackageNo(packageNo0);//综合数据包intdataType=m_pPlatManager->operateTypeGetDataType(SOURCE_OBJECT,operateType);intlayerSize=m_pPlatManager->layer_FieldGetLayerSize(packageNo1); //取属性层个数CStringnewName=pSrcLayer->m_sLayerName+operate[layerBoolDlg.m_boolType]+pOperLayer->m_sLayerName;m_pInteriorData->CloneDataFromPackage(pData,layerSize-1,newName,(GtLayerType)dataType);DataChunkTool::deleteData(pData,m_pPlatManager);m_pPlatManager->Nonce_SetData(m_pInteriorData);

m_pInteriorData->SetDefaultDataLink();

GetOsGlob()->RefreshTocView();2kqGis的交互方法菜单响应方式:CGtCommandBase屏幕消息响应方式:CGtToolBase菜单响应方式:CGtCommandBase在“处理功能的菜单下增加”图形常规处理“项:GetOsGlobEx()->CreateUniversalCommand("图形常规处理","图形常规处理","处理功能",0,"图形常规处理","图形常规处理",IDMENU_CHECK_CHUNKDEBUG);菜单响应方式:CGtCommandBaseboolSetCommandInfo(CStringstrName,CStringstrCaption,CStringstrCategory,HBITMAPhBitmap,CStringstrTooltip,CStringstrMessage);virtuallongSetMenuID(longnId);屏幕消息响应方式:CGtToolBaseCGtToolBase:publicCGtCommandBasevirtualBOOLIsTool();SetToolInfo(strName,strCaption,strCategory,hBitmap,hCursor,strTooltip,strMessage);SetMenuID(nMenuID);virtualOLE_HANDLEGetCursor();virtualvoidOnMouseDown(longbutton,longshift,longx,longy);virtualvoidOnMouseMove(longbutton,longshift,longx,longy);virtualvoidOnMouseUp(longbutton,longshift,longx,longy);virtualvoidOnDblClick(longbutton,longx,longy);virtualvoidOnKeyDown(longkeyCode,longshift);virtualvoidOnKeyUp(longkeyCode,longshift);virtualBOOLOnContextMenu(longx,longy);virtualvoidRefresh(OLE_HANDLEhdc);virtualvoidDeactivate(BOOL*complete);数据编辑的实现图块定位CGtLayer*spLayer=NULL;spLayer=spMap->FindLayerByID(m_comb_layer.GetItemData(m_comb_layer.GetCurSel()));CvectorEntityData*pChunk=spLayer->FirstChunk();while(pChunk!=NULL) { CStringsValue=DataChunkTool::GetChunkAttrib(pChunk,sFieldName); if(sValue==m_edit_sProp) { i++; pChunk->m_selectFlag=TRUE;if(i==1) { IGtEntityPtrspChunk(__uuidof(GtEntity)); GeoHelper::ChunkDataToGtEntity(pChunk,spChunk); GetOsGlob()->GetFocusMap()->TwinkleChunk(spChunk); pOneChunk=pChunk; } } pChunk=spLayer->NextChunk(); }spMap->GetPlatManager()->EntityToCenter(pOneChunk,1);图块的选中选中标志:BOOLm_selectFlag=TRUE创立图层CGtLayer*CGtMap::CreateEbpLayer(CStringsLayerName,CGtDataLink*pDataLink)GtLayerType层类型enumGtLayerType{ GtLayerUnknown =0,//未知 GtLayerPoint =1,//单点 GtLayerMultiPoint =2,//多点 GtLayerPolyline =3,//线状 GtLayerPolygon =4,//面状 GtLayerMix =5,//混合 GtLayerAnnotation =8,// GtLayerImage =9,// GtLayerTable =10//属性层,无图形};CGtLayer*pLayer=m_pInteriorData->CreateEbpLayer(sLayerName,pDataLink);LayerSetInfo*layset=GetOsGlob()->m_layersetting.FindLayerByName(sLayerName); if(pLayer&&layset) { pLayer->m_spFieldDef.CopyFrom(&layset->m_spFieldDef); pLayer->m_sTableName=layset->m_sTableName; pLayer->m_nLayerType=layset->m_nLayerType; pLayer->m_nTopoLayerType=layset->m_nTopoLayerType; pLayer->m_sDefYsdm=layset->m_sDefYsdm; pLayer->m_nRenderMode=layset->m_nRenderMode; pLayer->m_sYsdmField=layset->m_sYsdmField; pLayer->m_sMbbsmField=layset->m_sMbbsmField; pLayer->m_sPointLayerName=layset->m_sPointLayerName; pLayer->m_sLineLayerName=layset->m_sLineLayerName;}新建点要素并赋属性intnChunkPos=pData->m_vectorEntityArray.add();CvectorEntityData*chunkJZD=pData->m_vectorEntityArray.GetAt(nChunkPos);CStringsPtrVal;sPtrVal.Format("%d",(long)(void*)jzd);intnPtNo=-1;chunkJZD->point_Add(nPtNo);CvectorPointData*pPoint=chunkJZD->m_vectorPointArray.GetAt(nPtNo);pPoint->x=jzd->x;pPoint->y=jzd->y;pPoint->z=0;chunkJZD->m_pRelLayer=pJZDLayer;pJZDLayer->StandEbField(chunkJZD);chunkJZD->m_mapUserData["__JZDPTR"]=sPtrVal;DataChunkTool::SetChunkAttrib(chunkJZD,"PID",Convert::NumToStr(jzd->m_nKeyID));DataChunkTool::SetChunkAttrib(chunkJZD,"JZDH",jzd->JZDH);DataChunkTool::SetChunkAttrib(chunkJZD,"JZDLX",jzd->JZDLX);DataChunkTool::SetChunkAttrib(chunkJZD,"JBLX",jzd->JBLX);DataChunkTool::SetChunkAttrib(chunkJZD,"LOCALID",Convert::NumToStr(jzd->localid));面合并NormallyUnitePolygon2(CvectorPackageData*a_interiorData,CArray<CvectorEntityData*,CvectorEntityData*>&chunkArr,CArray<CvectorEntityData*,CvectorEntityData*>&newchunkArr)//一般的面合并最大面积的图块:CvectorEntityData*pMaxAreaChunkdoublefPcmjSum=SumPCMJ(chunkArr);图块来源ID、BH//选中的要素考贝进入新数据包m_pPlatManager->addCurrPackage(0,1);//新增一个图块数据包//将新增的图块数据包作为操作数据CvectorPackageData*o_interiorData=m_pPlatManager->SetUpperBoundDataNonce();o_interiorData->m_vectorEntityArray.Append(chunkArr);GetOsGlob()->SetMessage("正在进行布尔操作...");m_pPlatManager->Nonce_SetData(o_interiorData);intpackageNo=m_pPlatManager->getCurrPackageNo();//m_pPlatManager->package_UnitePolygon(packageNo,TRUE,TRUE);//02.23m_pPlatManager->currDataTopoOperate(2,0,0.0001,TRUE,1);CvectorPackageData*n_interiorData=m_pPlatManager->SetUpperBoundDataNonce(); //结果数据//设置属性〔新生成的图块属性与最大面积的图块属性一致〕:SetBgSrcID:SetBgSrcBianHao//考贝新数据包中所有数据到源数据包 newchunkArr.Append(n_interiorData->m_vectorEntityArray);面分割面分割

面分割面BlockCutBlock(CvectorPackageData*interiorData)//所选的图块//判断是否有图块选中,求出选中图块所在层s_interiorData->m_vectorEntityArray[i]chunk->m_selectFlag;chunk->m_pRelLayer;//选中的要素考贝进入新数据包m_pPlatManager->addCurrPackage(0,1);CvectorPackageData*o_interiorData=m_pPlatManager->SetUpperBoundDataNonce();m_pPlatManager->m_pDataManager->package_CopyAll(s_interiorData,o_interiorData,TRUE);m_pPlatManager->m_pDataManager->package_CopyAll(s_interiorData,o_interiorData,TRUE);//对所有的图块进行面积排序qsort((void*)o_interiorData->m_vectorEntityArray.GetData(), (size_t)o_interiorData->m_vectorEntityArray.GetSize(), sizeof(CvectorEntityData*),DataChunkTool::compareChunkArea);m_pPlatManager->m_pDataManager->oneBoolOperate(o_interiorData,POLYGON_ONE_POLYGON);//取第一层多边形内的多边形intn_packageNo;m_pPlatManager->m_pDataManager->package_GetUpperBound(n_packageNo);CvectorPackageData*n_interiorData=m_pPlatManager->SetUpperBoundDataNonce();//结果数据

OldNameToNewName(o_interiorData,n_interiorData);//点名匹配m_pPlatManager->entity_cut_entity(n_packageNo);//所有实体求交线打断线打断CvectorPackageData*s_interiorData=NULL;//源数据包--线数据包m_pPlatManager->addCurrPackage(0,1);//新增一个图块数据包s_interiorData=m_pPlatManager->SetUpperBoundDataNonce();ASSERT(s_interiorData); DataChunkTool::CopyChunks(s_interiorData,s_polylineArr);//选中所有s_interiorData->editSeleall();CvectorPackageData*o_interiorData=NULL;//源数据包--线数据包m_pPlatManager->addCurrPackage(0,1);//新增一个图块数据包//s_interiorData=GetEditNonceData();o_interiorData=m_pPlatManager->SetUpperBoundDataNonce();ASSERT(o_interiorData);DataChunkTo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论