Exemple #1
0
	bool toggle (bool enable)
	{
		if (enable) {
			editor->SetTextureSelectCallback (callback, this);
			MdlObject *r = editor->GetMdl()->root;
			if (r) IterateObjects(r,deselect);
		} else
			editor->SetTextureSelectCallback (0, 0);
		enabled=enable;
		return true;
	}
Exemple #2
0
bool Model::SaveS3O(const char *filename, IProgressCtl& /*progctl*/) {
	S3OHeader header;
	size_t write_result;
	memset (&header,0,sizeof(S3OHeader));
	memcpy (header.magic, S3O_ID, 12);

	if (!root)
		return false;
	
	FILE *f = fopen (filename, "wb");
	if (!f) 
		return false;

	fseek (f, sizeof(S3OHeader), SEEK_SET);
	header.rootPiece = ftell(f);

	if (root) {
		MdlObject *cloned = root->Clone();
		IterateObjects (cloned, ApplyOrientationAndScaling);
		MirrorX(cloned);
		S3O_SaveObject (f, cloned);
		delete cloned;
	}

	for (uint tex=0;tex<texBindings.size();tex++) {
		if (tex >= texBindings.size ())
			break;

		TextureBinding &tb = texBindings[tex];
		if (!tb.name.empty()) {
			if (tex==0) header.texture1 = ftell(f);
			if (tex==1) header.texture2 = ftell(f);
			WriteZStr (f, tb.name);
		}
	}

	header.radius = radius;
	header.height = height;
	header.midx = -mid.x;
	header.midy = mid.y;
	header.midz = mid.z;

	fseek (f, 0, SEEK_SET);
	write_result = fwrite (&header, sizeof(S3OHeader), 1, f);
	if (write_result != (size_t)1) throw std::runtime_error ("Couldn't write S3O header.");
	fclose (f);

	return true;
}
// TODO: Abstract file formats
Model* Model::Load (const char *fn, bool Optimize, IProgressCtl& progctl)
{
	const char *ext=fltk::filename_ext(fn);
	Model *mdl = 0;

	try {
		if (!STRCASECMP(ext, ".opk")) 
			mdl = Model::LoadOPK (fn, progctl);
		else {
			bool r;
			mdl = new Model;

			if ( !STRCASECMP(ext, ".3do") )
				r = mdl->Load3DO (fn, progctl);
			else if( !STRCASECMP(ext, ".s3o" ))
				r = mdl->LoadS3O (fn, progctl);
			else if(!STRCASECMP(ext, ".3ds"))
				r = (mdl->root = Load3DSObject (fn, progctl)) != 0;
			else if (!STRCASECMP(ext, ".obj")) 
				r = (mdl->root = LoadWavefrontObject (fn, progctl)) != 0;
			else if (!STRCASECMP(ext, ".c3o"))
				r = mdl->LoadC3O (fn, progctl);
			else {
				fltk::message ("Unknown extension %s\n", fltk::filename_ext(fn));
				delete mdl;
				return false;
			}
			if (!r) {
				delete mdl;
				mdl = 0;
			}
		}
	}
	catch (std::runtime_error err)
	{
		fltk::message (err.what());
		return false;
	}
	if (mdl) {
		if (mdl->root && Optimize) IterateObjects (mdl->root, InitObject);
		return mdl;
	} else {
		fltk::message ("Failed to read file %s:\n",fn);
		return 0;
	}
}
Exemple #4
0
bool Model::Save3DO (const char *fn, IProgressCtl& progctl)
{
	FILE *f = fopen(fn, "wb");

	if (!f)
		return false;

	MdlObject *cl = root->Clone();
	IterateObjects (cl, ApplyOrientationAndScaling);
	
	vector<MdlObject*> tmp;
	tmp.push_back (cl);
	save_object (f, 0, tmp.begin());
	fclose (f);

	delete cl;
	return true;
}
Exemple #5
0
	void click (){
		Model *m=editor->GetMdl();
		if (m->root) IterateObjects (m->root,togglecurved);
		editor->RedrawViews();
	}
Exemple #6
0
	void click (){ 
		Model *m=editor->GetMdl();
		if (m->root) IterateObjects (m->root,rotatetex);
		BACKUP_POINT("3DO texture rotated");
		editor->RedrawViews();
	}
Exemple #7
0
	void click (){ 
		Model *m=editor->GetMdl();
		if (m->root) IterateObjects (m->root,flip);
		BACKUP_POINT("Flipped selected polygons");
		editor->RedrawViews();
	}