void CMyV8Handler::gChangeLanguage( CString strContent ) { string content=slnhelper::wchar2utf8(wstring(strContent)); int type=0; cJSON *root; root = cJSON_Parse(content.c_str()); if(root!=NULL) { cJSON *j = root->child; while (j != NULL) { string key= string(j->string); if (key=="type") { type=j->valueint; } else { } j=j->next; } cJSON_Delete(root); } if (GetUserDb()) { GetUserDb()->SetLanguage(type); CString xmlpath; GetStaroneControl()->m_nLanguage=type; switch(GetStaroneControl()->m_nLanguage) { case 1: xmlpath=GetStaroneControl()->m_strExeDirPath+_T("\\language\\default-chs.xml"); break; case 2: xmlpath=GetStaroneControl()->m_strExeDirPath+_T("\\language\\default-en.xml"); break; case 3: xmlpath=GetStaroneControl()->m_strExeDirPath+_T("\\language\\default-tw.xml"); break; } GetSkinInfo()->ExitLanguage(); GetSkinInfo()->InitLanguage(xmlpath); } }
BOOL CSkinDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); if (GetSkinInfo()->m_bSkinOk) { m_clrBkg=GetSkinInfo()->GetColor(_T("skindlg"),_T("bkg")); m_clrText=GetSkinInfo()->GetColor(_T("skindlg"),_T("text")); m_clrLineUp=GetSkinInfo()->GetColor(_T("skindlg"),_T("lineup")); m_clrLineDown=GetSkinInfo()->GetColor(_T("skindlg"),_T("linedown")); m_clrBottom=GetSkinInfo()->GetColor(_T("skindlg"),_T("bottom")); m_clrLink=GetSkinInfo()->GetColor(_T("skindlg"),_T("link")); m_rcBottom=GetSkinInfo()->GetRect(_T("skindlg"),_T("bottom")); m_rcOK=GetSkinInfo()->GetRect(_T("skindlg"),_T("ok")); m_rcCancel=GetSkinInfo()->GetRect(_T("skindlg"),_T("cancel")); m_brBkg.CreateSolidBrush(m_clrBkg); m_brButtom.CreateSolidBrush(m_clrBottom); } return TRUE; }
// Here we process mesh geometry for given node. // Vertices for the geometry from the all meshes of the scene are allocated in // one big vertex pool. One vertex can occur several times in this pool, because // we add 3 new vertices for every face. // After all meshes in the scene are processed, this pool is collapsed to remove // duplicate vertices. void RBExport::ProcessMesh( INode* node ) { if (!node->Renderable() || node->IsNodeHidden()) { return; } ObjectState os = node->EvalWorldState( m_CurTime ); Object* pObject = os.obj; if (!pObject) { Warn( "Could not evaluate object state in node <%s>. Mesh was skipped.", node->GetName() ); return; } Matrix3 nodeTM = node->GetNodeTM( m_CurTime ); Matrix3 nodeTMAfterWSM = node->GetObjTMAfterWSM( m_CurTime ); Matrix3 mOffs = nodeTMAfterWSM*Inverse( nodeTM ); // triangulate TriObject* pTriObj = 0; if (pObject->CanConvertToType( Class_ID( TRIOBJ_CLASS_ID, 0 ) )) { pTriObj = (TriObject*)pObject->ConvertToType( m_CurTime, Class_ID( TRIOBJ_CLASS_ID, 0 ) ); } bool bReleaseTriObj = (pTriObj != pObject); if (!pTriObj) { Warn( "Could not triangulate mesh in node <%s>. Node was skipped", node->GetName() ); return; } if (!MeshModStackIsValid( node )) { Warn( "Modifier stack for node %s should be collapsed or contain only Skin modifier.", node->GetName() ); } // ensure, that vertex winding direction in polygon is CCW Matrix3 objTM = node->GetObjTMAfterWSM( m_CurTime ); bool bNegScale = (DotProd( CrossProd( objTM.GetRow(0), objTM.GetRow(1) ), objTM.GetRow(2) ) >= 0.0); int vx[3]; if (bNegScale) { vx[0] = 0; vx[1] = 1; vx[2] = 2; } else { vx[0] = 2; vx[1] = 1; vx[2] = 0; } Mesh& mesh = pTriObj->GetMesh(); bool bHasTexCoord = (mesh.numTVerts != 0); bool bHasVertexColor = (mesh.numCVerts != 0) && m_pConfig->m_bExportVertexColors; bool bHasNormal = m_pConfig->m_bExportNormals; bool bHasSkin = ProcessSkin( node ); // some cosmetics BOOL res = mesh.RemoveDegenerateFaces(); if (res) { Spam( "Degenerate faces were fixed." ); } res = mesh.RemoveIllegalFaces(); if (res) { Spam( "Degenerate indices were fixed." ); } ExpNode* pExpNode = GetExportedNode( node ); if (!pExpNode) { return; } int numPri = mesh.getNumFaces(); int numVert = mesh.numVerts; // initialize helper array for building vertices' 0-circles VertexPtrArray vertexEntry; vertexEntry.resize( numVert ); memset( &vertexEntry[0], 0, sizeof( ExpVertex* )*numVert ); Spam( "Original mesh has %d vertices and %d faces.", numVert, numPri ); bool bHasVoidFaces = false; // loop on mesh faces for (int i = 0; i < numPri; i++) { Face& face = mesh.faces[i]; // calculate face normal const Point3& v0 = mesh.verts[face.v[vx[0]]]; const Point3& v1 = mesh.verts[face.v[vx[1]]]; const Point3& v2 = mesh.verts[face.v[vx[2]]]; Point3 normal = -Normalize( (v1 - v0)^(v2 - v1) ); normal = mOffs.VectorTransform( normal ); normal = c_FlipTM.VectorTransform( normal ); // loop on face vertices ExpVertex* pFaceVertex[3]; for (int j = 0; j < 3; j++) { ExpVertex v; v.mtlID = pExpNode->GetMaterialIdx( face.getMatID() ); v.nodeID = pExpNode->m_Index; if (v.mtlID < 0) { bHasVoidFaces = true; } // extract vertex position and apply world-space modifier to it int vIdx = face.v[vx[j]]; Point3 pt = mesh.verts[vIdx]; pt = mOffs.PointTransform( pt ); pt = c_FlipTM.PointTransform( pt ); v.index = vIdx; v.pos = Vec3( pt.x, pt.y, pt.z ); //v.pos *= m_WorldScale; // extract skinning info if (bHasSkin) { GetSkinInfo( v ); } // assign normal if (bHasNormal) { v.normal = Vec3( normal.x, normal.y, normal.z ); v.smGroup = face.smGroup; } // extract vertex colors if (bHasVertexColor) { const VertColor& vcol = mesh.vertCol[mesh.vcFace[i].t[vx[j]]]; v.color = ColorToDWORD( Color( vcol.x, vcol.y, vcol.z ) ); } // extract texture coordinates if (bHasTexCoord) { const Point3& texCoord = mesh.tVerts[mesh.tvFace[i].t[vx[j]]]; v.uv.x = texCoord.x; v.uv.y = 1.0f - texCoord.y; // second texture coordinate channel if (mesh.getNumMaps() > 1 && mesh.mapSupport( 2 )) { UVVert* pUVVert = mesh.mapVerts( 2 ); TVFace* pTVFace = mesh.mapFaces( 2 ); if (pUVVert && pTVFace) { const Point3& tc2 = pUVVert[pTVFace[i].t[vx[j]]]; v.uv2.x = tc2.x; v.uv2.y = 1.0f - tc2.y; } } } // allocate new vertex pFaceVertex[j] = AddVertex( v ); // we want vertices in the 0-ring neighborhood to be linked into closed linked list if (vertexEntry[vIdx] == NULL) { vertexEntry[vIdx] = pFaceVertex[j]; pFaceVertex[j]->pNext = pFaceVertex[j]; } else { vertexEntry[vIdx]->AddToZeroRing( pFaceVertex[j] ); } } AddPolygon( pFaceVertex[0], pFaceVertex[1], pFaceVertex[2] ); if (IsCanceled()) { return; } } // correct normals at vertices corresponding to smoothing groups SmoothNormals( vertexEntry ); // put vertices into set (this removes duplicate vertices) for (int i = 0; i < numVert; i++) { ExpVertex::ZeroRingIterator it( vertexEntry[i] ); while (it) { VertexSet::iterator sIt = m_VertexSet.find( it ); if (sIt == m_VertexSet.end()) { m_VertexSet.insert( it ); } else { it->pBase = (*sIt); } ++it; } } if (bReleaseTriObj) { delete pTriObj; } if (bHasVoidFaces) { Warn( "Mesh %s has faces with no material assigned.", node->GetName() ); } } // RBExport::ProcessMesh
void CUploadTask::Run() { m_Item.ullOffset=0; if (m_Item.ullFilesize==0) { string content=""; CURLcode ret=COssApi::AddObject(m_Item.strHost,m_Item.strBucket,m_Item.strObject,m_Item.ullFilesize,this,NULL,(culfunc)curl_header,content); int httpcode=ParesHeaderCode(m_strHeader); if (httpcode==200) { Finish(); goto END; } if (httpcode>0) TaskError(httpcode,_T("http code")); else TaskError(ret,_T("curl error")); goto END; } m_UnFinish.InsertPair(0,m_Item.ullFilesize-1); if (CheckMultipart()) { if (m_Item.strUploadId==_T("")) { COssInitiateMultipartUploadRet ret; if(COssApi::InitiateMultipartUploadObject(m_Item.strHost,m_Item.strBucket,m_Item.strObject,ret)) { m_Item.strUploadId=ret.m_strUploadId; GetNetwork()->m_TransDb.Update_UploadUploadId(m_Item.strPathhash,m_Item.strUploadId); } else { TaskError(TRANSERROR_OSSERROR,ret.m_strCode); goto END; } } if (!CreateMultipartFile()) { TaskError(TRANSERROR_CREATEMULTIPARTERROR,wstring(GetSkinInfo()->GetString(_T("prompt"),_T("CreateFileInfoError")))); goto END; } } m_ullStarttime=CTime::GetCurrentTime().GetTime(); m_ullRuntime=m_ullStarttime; while(true) { if (m_bStop) goto END; if (CheckFinish()) { m_ullTranssize=0; if (m_Item.strUploadId!=L"") { COssRet ret; if(!COssApi::CompleteMultipartUpload(m_Item.strHost,m_Item.strBucket,m_Item.strObject,m_Item.strUploadId,m_PartList,ret)) { TaskError(TRANSERROR_OSSERROR,ret.m_strCode);//zhengÓеĴíÎóÓ¦¸Ãɾ³ýid goto END; } } Finish(); goto END; } int nNum=GetPeerNum(); if (nNum>=GetNetwork()->m_UManager.m_nPeerMax) { Sleep(1); continue; } ULONGLONG ullPos,ullSize; ullPos=ullSize=0; m_csFileLock.Lock(); int nIndex=GetUploadIndex(ullPos,ullSize); m_csFileLock.Unlock(); if (nIndex<0) { Sleep(1000); continue; } m_csLock.Lock(); nNum=m_listPeer.size(); m_csLock.Unlock(); if (nNum<GetNetwork()->m_UManager.m_nPeerMax) { CUploadPeer * peer =new CUploadPeer; peer->Init(this,m_Item.strHost,m_Item.strBucket,m_Item.strObject); if (peer->OpenFile(m_Item.strUploadId,m_Item.strFullpath)) { m_csFileLock.Lock(); m_UnFinish.RemovePairs(ullPos,ullPos+ullSize-1); m_csFileLock.Unlock(); m_csLock.Lock(); m_listPeer.push_back(peer); m_csLock.Unlock(); peer->StartUpload(nIndex,ullPos,ullSize); GetNetwork()->m_ThreadPool.AddTask(peer); } else { int a=GetLastError(); delete peer; if (m_Item.strUploadId==_T("")) { TaskError(TRANSERROR_OPENFILE,wstring(slnhelper::GetLastErrorMessage(a))); goto END; } } } else { bool bHave=false; m_csLock.Lock(); for (int i=0;i<m_listPeer.size();i++) { CUploadPeer * peer =(CUploadPeer*)m_listPeer[i]; if (peer->IsIdle()) { m_csFileLock.Lock(); m_UnFinish.RemovePairs(ullPos,ullPos+ullSize-1); m_csFileLock.Unlock(); peer->StartUpload(nIndex,ullPos,ullSize); GetNetwork()->m_ThreadPool.AddTask(peer); bHave=true; break; } } m_csLock.Unlock(); if (!bHave) Sleep(10); } } END: if (m_bDelete&&CheckMultipart()) { if (m_Item.strUploadId!=L"") { COssRet ret; COssApi::AbortMultipartUpload(m_Item.strHost,m_Item.strBucket,m_Item.strObject,m_Item.strUploadId,ret); } } if (m_entOut) m_entOut->SetEvent(); m_Item.nStatus=TRANSTASK_REMOVE; }