Changeset 90 for java/main/src/main/java/com/framsticks/model/Model.java
- Timestamp:
- 07/02/13 16:20:07 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/model/Model.java
r86 r90 3 3 import com.framsticks.params.annotations.FramsClassAnnotation; 4 4 import com.framsticks.params.annotations.ParamAnnotation; 5 import com.framsticks.util.lang.Casting;6 5 import com.framsticks.util.lang.Containers; 7 import com.framsticks.util.lang.IterableIterator;8 import com.framsticks.util.math.Orientation;9 import org.apache.log4j.Logger;10 6 11 7 import java.util.ArrayList; 12 import java.util.Iterator;13 8 import java.util.List; 14 9 … … 17 12 */ 18 13 @FramsClassAnnotation(id = "m") 19 public class Model { 20 21 private final static Logger log = Logger.getLogger(Model.class); 14 public class Model implements ModelComponent { 22 15 23 16 @ParamAnnotation(id = "se") … … 39 32 public final List<Joint> joints = new ArrayList<Joint>(); 40 33 41 @ParamAnnotation 42 public final List<NeuroDef> neurodefs = new ArrayList<NeuroDef>(); 34 @ParamAnnotation(id = "neurodefs") 35 public final List<NeuroDefinition> neuroDefinitions = new ArrayList<NeuroDefinition>(); 36 37 @ParamAnnotation(id = "neuroconns") 38 public final List<NeuroConnection> neuroConnections = new ArrayList<NeuroConnection>(); 43 39 44 40 //TODO: why those methods returns and accepts doubles? … … 48 44 public double getNumjoints() { return (double)joints.size(); } 49 45 @ParamAnnotation 50 public double getNumneurons() { return (double)neuro defs.size(); }46 public double getNumneurons() { return (double)neuroDefinitions.size(); } 51 47 52 48 //this is impossible to use, because numparts field is marked as readonly … … 56 52 public void setNumjoints(double numjoints) { Containers.resizeList(joints, (int)(double)numjoints); } 57 53 @ParamAnnotation 58 public void setNumneurons(double numneurons) { Containers.resizeList(neuro defs, (int)(double)numneurons); }54 public void setNumneurons(double numneurons) { Containers.resizeList(neuroDefinitions, (int)(double)numneurons); } 59 55 60 56 public List<Part> getParts() { return parts; } 61 57 public List<Joint> getJoints() { return joints; } 62 public List<NeuroDef> getNeuroDefs() { return neurodefs; } 58 public List<NeuroDefinition> getNeuroDefinitions() { return neuroDefinitions; } 59 public List<NeuroConnection> getNeuroConnections() { return neuroConnections; } 63 60 64 public static Model build(List<Object> objects) {65 Iterator<Object> i = objects.iterator();66 if (!i.hasNext()) {67 return null;68 }69 Model f0Genotype = Casting.tryCast(Model.class, i.next());70 if (f0Genotype == null) {71 log.fatal("first object is not a Model");72 return null;73 }74 for (Object object : new IterableIterator<Object>(i)) {75 if (object instanceof Joint) {76 f0Genotype.joints.add((Joint)object);77 continue;78 }79 if (object instanceof Part) {80 f0Genotype.parts.add((Part)object);81 continue;82 }83 if (object instanceof NeuroDef) {84 f0Genotype.neurodefs.add((NeuroDef) object);85 continue;86 }87 log.error("invalid class: " + object.getClass().getCanonicalName());88 }89 90 for (Part p : f0Genotype.getParts()) {91 p.setOrientation(new Orientation().rotate(p.getRotation()));92 }93 for (Joint j : f0Genotype.getJoints()) {94 /** based on c++ Joint::attachToParts*/95 Part p1 = f0Genotype.parts.get(j.part1);96 Part p2 = f0Genotype.parts.get(j.part2);97 assert p1 != null && p2 != null;98 Orientation o = new Orientation().rotate(j.getRotation());99 p2.setOrientation(p1.getOrientation().transform(o));100 p2.setPosition(p2.getOrientation().transform(j.getDelta()).add(p1.getPosition()));101 }102 return f0Genotype;103 }104 61 }
Note: See TracChangeset
for help on using the changeset viewer.