view src/main/java/alice/test/topology/aquarium/fx/CreateObject.java @ 421:fdac53a9101f dispose

could assign FIsh Object type. but occur ArrayIndexOutOfBoundsException in importer
author sugi
date Fri, 18 Jul 2014 23:47:49 +0900
parents aefbe41fcf12
children 6e304a7a60e7
line wrap: on
line source

package alice.test.topology.aquarium.fx;

import javafx.beans.binding.When;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.MeshView;

import com.interactivemesh.jfx.importer.col.ColModelImporter;
import com.interactivemesh.jfx.importer.obj.ObjModelImporter;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;

public class CreateObject extends CodeSegment{

    private Receiver info = ids.create(CommandType.TAKE);  // fishInfo 
    private Receiver info1 = ids.create(CommandType.PEEK);  // fishInfo 

    public CreateObject(){
        info.setKey("fishData");
        info1.setKey("type");

    }

    @Override
    public void run() {
        FishInfo fishInfo = info.asClass(FishInfo.class);

        Group obj = new Group();
        addColladaObject(obj);

        obj.setScaleX(fishInfo.size);
        obj.setScaleY(fishInfo.size);
        obj.setScaleZ(fishInfo.size);
        obj.setId(fishInfo.name);

        ods.put("addOffer", obj);
        if (!fishInfo.fromCheckExist)
            new SendDataOthers(info, "fishData");

        new CreateObject();
    }

    // for read *.obj file
    public void addObject(Group obj){
        BooleanProperty showWireframe = new SimpleBooleanProperty(false);
        ObjModelImporter objImporter = new ObjModelImporter();
        objImporter.read(getClass().getClassLoader().getResource("objects/Scooter-smgrps.obj"));

        MeshView[] dukeMesh = objImporter.getImport();
        objImporter.close();

        for (MeshView _dukeMesh : dukeMesh) {
            obj.getChildren().addAll(_dukeMesh);
            _dukeMesh.drawModeProperty().bind(new When(showWireframe).then(DrawMode.LINE).otherwise(DrawMode.FILL));
        }
    }

    // for read *.dae file
    public void addColladaObject(Group obj){
        String url = getResourceUrl();
        ColModelImporter colImporter = new ColModelImporter();
        colImporter.read(getClass().getClassLoader().getResource(url));
        Node[] node = colImporter.getImport();
        obj.getChildren().add(node[0]);
    }
    
    public String getResourceUrl() {
        String type = info1.asString();
        System.out.println(type);
        for (FishType f :FishType.values()){
            if (type.equals(f.name())){
                return f.getUrl();
            }
        }
        return FishType.DEFAULT.getUrl();
    }

}