package org.reprap; import javax.media.j3d.Appearance; import javax.media.j3d.BranchGroup; import org.reprap.devices.GenericExtruder; import org.reprap.geometry.polyhedra.STLObject; import org.reprap.utilities.Debug; /** * Small class to hold RepRap attributes that are attached to * Java3D shapes as user data, primarily to record the material * that things are made from. * * @author adrian * */ public class Attributes { /** * The name of the material */ private String material; /** * The STLObject of which this is a part */ private STLObject parent; /** * Where this is in the STLObject of which it is a part */ private BranchGroup part; /** * The appearance (colour) in the loading and simulation windows */ private Appearance app; /** * The extruder corresponsing to this material. This is lazily evaluated * (I.e. it is not set until there are some extruders around to use). */ private Extruder e; /** * Constructor - it is permissible to set any argument null. If you know * what you're doing of course... * @param s The name of the material * @param p Parent STLObject * @param b Where in p * @param a what it looks like */ public Attributes(String s, STLObject p, BranchGroup b, Appearance a) { material = s; parent = p; part = b; app = a; e = null; } /** * Just say the name of the material */ public String toString() { String result = new String(); result += "Attributes: material is " + material; return result; } /** * @return the name of the material */ public String getMaterial() { return material; } /** * @return the parent object */ public STLObject getParent() { return parent; } /** * @return the bit of the STLObject that this is */ public BranchGroup getPart() { return part; } /** * @return what colour am I? */ public Appearance getAppearance() { return app; } /** * Find my extruder in the list (if not known) or just * return it (if known). * @param es The extruders currently in the printer. * @return my extruder */ public Extruder getExtruder() { if(e == null) { Printer p = org.reprap.Main.gui.getPrinter(); if(p == null) { Debug.e("Attributes.getExtruder(): null printer!"); return null; } e = p.getExtruder(material); if(e == null) { Debug.e("Attributes.getExtruder(): null extruder for " + material); return null; } } return e; } /** * Change the material name * @param s */ public void setMaterial(String s) { material = s; e = null; app = GenericExtruder.getAppearanceFromMaterial(material); if(parent != null) parent.restoreAppearance(); } /** * Change the parent * @param p */ public void setParent(STLObject p) { parent = p; } /** * To be used in conjunction with changing the parent * @param b */ public void setPart(BranchGroup b) { part = b; } /** * New colour * @param a */ public void setAppearance(Appearance a) { app = a; } }