/* * JAME 6.2.1 * http://jame.sourceforge.net * * Copyright 2001, 2016 Andrea Medeghini * * This file is based on code from idx3dIII * Copyright 1999, 2000 Peter Walser * http://www.idx3d.ch/idx3d/idx3d.html * * This file is part of JAME. * * JAME is an application for creating fractals and other graphics artifacts. * * JAME is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * JAME is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with JAME. If not, see <http://www.gnu.org/licenses/>. * */ package net.sf.jame.core.media.g3d; import java.util.Enumeration; import java.util.Hashtable; public class Assembly extends Solid { private final Hashtable<String, Solid> solids; public Assembly(final String name) { super(name); solids = new Hashtable<String, Solid>(); } public final void removePart(final Part solid) { solids.remove(solid.getName()); } public final void addPart(final Part solid) { if (solid.getName() != null) { solids.put(solid.getName(), solid); } } public final void removeAssembly(final Assembly solid) { solids.remove(solid.getName()); } public final void addAssembly(final Assembly solid) { if (solid.getName() != null) { solids.put(solid.getName(), solid); } } public final Solid getSolid(final String name) { return (solids.get(name)); } public final Enumeration<Solid> getSolids() { return (solids.elements()); } @Override final void project(Matrix ml, Matrix mt, final float vx, final float vy, final float vz) { Solid solid = null; mt = Matrix.multiply(mt, mp); ml = Matrix.multiply(ml, mr); final Enumeration<Solid> solids = getSolids(); while (solids.hasMoreElements()) { solid = solids.nextElement(); solid.project(ml, mt, vx, vy, vz); } } @Override final void rebuild() { Solid solid = null; final Enumeration<Solid> solids = getSolids(); while (solids.hasMoreElements()) { solid = solids.nextElement(); solid.parent = this; solid.rebuild(); } } @Override public final void transform(final Matrix mt) { Solid solid = null; final Enumeration<Solid> solids = getSolids(); while (solids.hasMoreElements()) { solid = solids.nextElement(); solid.transform(mt); } } @Override public String toString() { final StringBuffer s = new StringBuffer("assembly: " + name + "\r\n"); s.append("parent: " + ((parent != null) ? parent.name : "unknow") + "\r\n"); Solid solid = null; final Enumeration<Solid> solids = getSolids(); while (solids.hasMoreElements()) { solid = solids.nextElement(); s.append(solid.toString()); } return (s.toString()); } }