Ejemplo n.º 1
0
	void
CParticleAttachCommand::cmd_Execute (
	unsigned		 flags)
	{
	
	CSourceItems		 sel(dyna_Int(0));
	CLxUser_Item		 source, item;
	CLxUser_ValueReference	 ref;

	if (dyna_Object (1, ref))
		ref.Get (source);

	for (sel.LoopInit (); sel.LoopNext (item);) {
		if (SetSource (item, source)) {
			UpDateUI (item, source);
		} else {
			// if there is no source attached, we try to load from file, thus we init features first.
			// restore settings from file.

			CLxUser_ChannelRead	 chanRead;
			CLxUser_ChannelWrite	 chanWrite, chanWriteEdit;
			std::string		 currentFeature;
			std::string		 filename;

			chanRead.from (item);
			int index = item.ChannelIndex (CN_FILE_NAME);
			chanRead.GetString (item, index, filename);

			OpenVDBItemPreLoader itemPreLoader (filename);
			chanWrite.setupFrom (item);
			chanWrite.Set (item, CN_DATA_FILE_NAME, filename.c_str());
			std::string featureList;
			currentFeature = itemPreLoader.getFeatureNameList (featureList);
			chanWrite.Set (item, FEATURE_NAME_LIST, featureList.c_str());

			chanWriteEdit.from (item);
			chanWriteEdit.Set (item, CURRENT_FEATURE, currentFeature.c_str());
		}
	}
		
}
Ejemplo n.º 2
0
	LxResult
CParticleAttachCommand::cmd_Query (
	unsigned		 index,
	ILxUnknownID		 vaQuery)
{
	CLxUser_ValueReference	 ref;
	CLxUser_ValueArray	 va(vaQuery);
	CSourceItems		 sel(dyna_Int(0));
	CLxUser_Item		 item;
	CLxUser_Value		 val;
	CSourceFinder		 src;

	for (sel.LoopInit (); sel.LoopNext (item);)
	{
		va.AddEmpty (val);
		ref.set (val);

		if (src.Find (item)) {
			ref.SetObject ( (ILxUnknownID)src.source_item);
		}
	}

	return LXe_OK;
}
Ejemplo n.º 3
0
LxResult CModifierElement::EvalCache (CLxUser_Evaluation &eval, CLxUser_Attributes &attr, CLxObject *cacheRaw, bool prev)
{
	CChanState		*cache = dynamic_cast<CChanState *> (cacheRaw);
	CInfluence		*infl;
	CLxUser_ValueReference	 ref;
	ILxUnknownID		 obj;
	LxResult		 rc;

    infl = new CInfluence;
    infl->Spawn ((void **) &obj);
    attr.ObjectRW (index, ref);
    ref.SetObject (obj);
    lx::UnkRelease (obj);

    infl->cur.Read (attr, index + 1);
	//early out
	if(!infl->cur.enabled)
        return LXe_OK;

	if(infl->cur.resolution != resolution || 
        infl->cur.outputType != outputType ||
		infl->cur.size != size ||
		infl->cur.windSpeed != windSpeed ||
		infl->cur.windDir != windDir ||
		infl->cur.windAlign != windAlign ||
		infl->cur.chop != chop ||
		infl->cur.shortestWave != shortestWave ||
		infl->cur.oceanDepth != oceanDepth ||
		infl->cur.damping != damping ||
		infl->cur.seed != seed ||
        infl->cur.waveHeight != waveHeight ||
		ocean == NULL )
	{
		if (ocean)
		{
			delete ocean;
		}

		if (context)
		{
			delete context;
		}
		ocean = infl->cur.reBuildOceanData();
        outputType = infl->cur.outputType;
        if (outputType == 0)
        {
            context = ocean->new_context(true,true,false,false);
        } else {
            context = ocean->new_context(true,true,false,true);
        }
		resolution = infl->cur.resolution;
		size = infl->cur.size;
		windSpeed = infl->cur.windSpeed;
		windDir = infl->cur.windDir;
		windAlign = infl->cur.windAlign;
		chop = infl->cur.chop;
		shortestWave = infl->cur.shortestWave;
		oceanDepth = infl->cur.oceanDepth;
		damping = infl->cur.damping;
		seed = infl->cur.seed;
        waveHeight = infl->cur.waveHeight;
		infl->cur.setUpOceanPtrs(ocean, context);
	}
	else infl->cur.setUpOceanPtrs(ocean, context);

	infl->cur.updateOcean();

    if (prev)
		rc = cache->Compare (infl->cur);
    else
		rc = LXe_OK;

    *cache = infl->cur;

    return rc;
}