Ejemplo n.º 1
0
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);
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
Archivo: mesh.cpp Proyecto: skopp/rush
//  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
Ejemplo n.º 4
0
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;
}