/** * process the hit * * @param hitting e.g. ray * @param hits hits where drawables are stored */ public void hit(Hitting hitting, Hits3D hits) { for (Drawable3DList list : lists) { for (Drawable3D d : list) { d.hitIfVisibleAndPickable(hitting, hits); } } }
/** * draw in .obj format through renderer * * @param renderer renderer */ public void drawInObjFormat(Renderer renderer) { for (Drawable3DList list : lists) { for (Drawable3D d : list) { d.drawInObjFormat(renderer); } } }
public String toString() { StringBuilder sb = new StringBuilder(); for (Drawable3D d : this) { sb.append(d); sb.append(" -- "); sb.append(d.getGeoElement().getLabel(StringTemplate.defaultTemplate)); sb.append("\n"); } return sb.toString(); }
/** * @param mouseLoc mouse location * @return first hitted label geo */ public GeoElement getLabelHit(GPoint mouseLoc) { for (Drawable3DList list : lists) { for (Drawable3D d : list) { if (d.isVisible()) { GeoElement geo = d.getGeoElement(); if (!geo.isGeoText() && geo.isPickable() && d.label.hit(mouseLoc)) { return geo; } } } } return null; }
/** * remove the drawable from the correct list * * @param drawable drawable to remove */ protected void remove(Drawable3D drawable) { // TODO fix it if (drawable != null) { // App.debug(drawable.getGeoElement()+""); drawable.removeFromDrawable3DLists(this); } }
/** update all 3D objects */ public void updateAll() { /* * if (isUpdatingAll){ * Application.printStacktrace("is already updating"); return; } * * isUpdatingAll = true; */ for (int i = 0; i < Drawable3D.DRAW_TYPE_MAX; i++) for (Iterator<Drawable3D> d = lists[i].iterator(); d.hasNext(); ) { Drawable3D d3d = d.next(); // Application.debug("updating :"+d3d.getGeoElement()); d3d.update(); } // isUpdatingAll = false; }
/** says that it has to be updated */ @Override public void setWaitForUpdate() { elementHasChanged = true; super.setWaitForUpdate(); }
/** * add the drawable to the correct list * * @param drawable drawable to add */ public void add(Drawable3D drawable) { drawable.addToDrawable3DLists(this); }