Sorry Fabrice, but I can't get this to work, here's my entire class.
Maybe it isn't working because i'm trying to clone the object?
package {
import away3dlite.containers.ObjectContainer3D
import away3dlite.loaders.Loader3D
import away3dlite.events.Loader3DEvent;
import away3dlite.loaders.AbstractParser
import away3dlite.loaders.AWData;
import away3dlite.containers.ObjectContainer3D
import flash.display.Sprite
import flash.events.Event;
import away3dlite.primitives.Cube6;
import away3dlite.materials.WireColorMaterial;
import away3dlite.containers.ObjectContainer3D
import away3dlite.materials.BitmapMaterial;
public class ObjectMani extends Sprite{
private var knownObjects:Array = ["Tree","Tree"];
private var constructed:Array = [];
public var afterLoadFunction:Function;
public var objectsLoaded:int = 0;
public function ObjectMani(func:Function = null){
afterLoadFunction = func
for (var i:int = 0;i<knownObjects.length;i++){
var ld:Loader3D = new Loader3D()
ld.addEventListener(Loader3DEvent.LOAD_SUCCESS,model_loaded);
ld.addEventListener(Loader3DEvent.LOAD_ERROR,model_errored);
ld.name = String(i);
var ap:AWData = new AWData()
ap.pathToSources =
"C:/xampp/htdocs/3d/unit/"+knownObjects[i]
+"/"+knownObjects[i]+"/images"
ld.loadGeometry("unit/"+knownObjects[i]+"/"+knownObjects[i]
+".awd",ap);
}
//addEventListener(Event.ADDED,added);
}
private function added(e:Event){
//afterLoadFunction()
}
private function model_loaded(e:Loader3DEvent){
trace("Model "+knownObjects[Number(e.target.name)], " :
Successful
Load!");
constructed[Number(e.target.name)] = e.target.handle
objectsLoaded++;
if (objectsLoaded>=knownObjects.length){
afterLoadFunction()
}
}
private function model_errored(e:Loader3DEvent){
trace("Model "+knownObjects[Number(e.target.name)], " :
Load
Fail!");
}
public function getId(str:String){
var found:Boolean = false
for (var i:int = 0;i<knownObjects.length&&!found;i++){
if (str == knownObjects[i]){
return i;
found = true
}
}
if (!found){
return 0;
}
}
public function create(id:int,scl:Number = 1) {
//return getDef()
return fixModel(constructed[id].clone(),scl);
//return this["create"+knownObjects[id]]()
}
private function getDef():ObjectContainer3D{
var n:Cube6 = new Cube6(new
WireColorMaterial(),10,20,10,2,2,2);
var con:ObjectContainer3D = new ObjectContainer3D(n);
return con;
}
private function fixModel(mv:ObjectContainer3D,scl:Number){
mv.y -= 100
mv.scaleX = .1*scl
mv.scaleY = .1*scl
mv.scaleZ = .1*scl
return mv
}
}
}
On Jun 26, 3:57 pm, Fabrice3D <[email protected]> wrote:
> its a setter... sorry for the typo.
>
> >> ap.pathToSources("/stuff/otherstuff/myimages/");
>
> should be ap.pathToSources = "/stuff/otherstuff/myimages/";
>
> /**
> * Allows to set custom path to source(s) map(s) other than
> set in file
> * Standard output url from Prefab awd files is
> "images/filename.jpg"
> * when set pathToSources, url becomes [newurl]filename.jpg.
> * Example: AWData.pathToSources = "mydisc/myfiles/";
> * Only required for load method using Loader3D
> * var awd:AWData = new AWData();
> * awd.pathToSources = "mydisc/myfiles/";
> * loader = new Loader3D();
> * loader.addEventListener(Loader3DEvent.LOAD_SUCCESS,
> onSuccess);
> * loader.loadGeometry("mymodels/car.awd", awd);
> *
> */
> public function set pathToSources(url:String):void
> {
> customPath = url;
> }
>
> Fabrice
>
> On Jun 26, 2010, at 9:22 PM, Th3Sh33p wrote:
>
>
>
> > Thanks for quick reply Fabrice,
>
> > After modifying my script like so...
>
> > var model_number:int = 0
> > var model:String = "tree";
> > var ld:Loader3D = new Loader3D()
> > ld.addEventListener(Loader3DEvent.LOAD_SUCCESS,model_loaded);
> > ld.addEventListener(Loader3DEvent.LOAD_ERROR,model_errored);
> > ld.name = String(model_number);
> > var ap:AWData = new AWData()
> > ap.pathToSources("unit/"+model+"/"+model+"/images")
> > ld.loadGeometry("unit/"+model+"/"+model+".awd",ap);
> > private function model_loaded(e:Loader3DEvent){
> > constructed[Number(e.target.name)] = e.target.handle
> > }
>
> > I get the error
>
> > Line 29 1061: Call to a possibly undefined method pathToSources
> > through a reference with static type away3dlite.loaders:AWData.
>
> > Is this possible in away3dlite?
>
> > On Jun 26, 3:07 pm, Fabrice3D <[email protected]> wrote:
> >> Prefab resolves urls and also unescape them.
> >> just open bitmapFilematerial and add a trace where the url is passed to
> >> load the image.
> >> you probably will get hints there.
>
> >> note that you also can pass a custom path to AWData parser for your images
> >> directory as well.
>
> >> like var ap:AWData = new AWData();
> >> ap.pathToSources("/stuff/otherstuff/myimages/");
>
> >> you also can add to init object of the AWData instance like this if you
> >> use the parse handler for embedded awd files
> >> var ap:AWData = new AWData({customPath:"/stuff/otherstuff/myimages/"});
>
> >> Fabrice
>
> >> On Jun 26, 2010, at 7:37 PM, Th3Sh33p wrote:
>
> >>> I created a tree model, which I would like to place in my project, it
> >>> was created as a obj file, imported into prefab, then a texture was
> >>> added and I exported as a awd file. Then I used this script...
>
> >>> var model_number:int = 0
> >>> var model:String = "tree";
> >>> var ld:Loader3D = new Loader3D()
> >>> ld.addEventListener(Loader3DEvent.LOAD_SUCCESS,model_loaded);
> >>> ld.addEventListener(Loader3DEvent.LOAD_ERROR,model_errored);
> >>> ld.name = String(model_number);
> >>> var ap:AWData = new AWData()
> >>> ld.loadGeometry("unit/"+model+"/"+model+".awd",ap);
>
> >>> private function model_loaded(e:Loader3DEvent){
> >>> constructed[Number(e.target.name)] = e.target.handle
> >>> }
> >>> .. to import the model, which was successful, however the model has no
> >>> material or texture. I have tried various things I've seen on other
> >>> threads but the model is always white when imported.The folder
> >>> "images" is located next to "tree.awd".
>
> >>> How can I import this model with it's material?
>
> >>> *The model imports successfully with textures back into prefab