// Copyright 2002, SLAC, Stanford University, U.S.A. package org.freehep.aid; import org.freehep.rtti.IType; /** * @author Mark Donszelmann * @version $Id: ColorToDoubleVector.java 8584 2006-08-10 23:06:37Z duns $ */ public class ColorToDoubleVector extends JNITypeConversion { public ColorToDoubleVector(String indent, String cr) { super(indent, cr); } public String convertToJava(JNITypeConverter converter, int scope, IType type, int dimension, String nameSpace, String src, String dst) { StringBuffer s = new StringBuffer(); s.append(indent(scope)); s.append("// convert vector<double> to Color"); s.append(cr); s.append(indent(scope)); s.append("jfloat alpha"); s.append(scope); s.append(" = color[0];"); s.append(cr); s.append(indent(scope)); s.append("jfloat red"); s.append(scope); s.append(" = color[1];"); s.append(cr); s.append(indent(scope)); s.append("jfloat green"); s.append(scope); s.append(" = color[2];"); s.append(cr); s.append(indent(scope)); s.append("jfloat blue"); s.append(scope); s.append(" = color[3];"); s.append(cr); s.append(indent(scope)); s.append("jclass colorClass"); s.append(scope); s.append(" = env->FindClass(\"java.awt.Color\");"); s.append(cr); s.append(indent(scope)); s.append("jmethodID constructor"); s.append(scope); s.append(" = env->GetMethodID(colorClass"); s.append(scope); s.append(", \"<init>\", \"(FFFF)V\");"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(" = env->NewObject(colorClass"); s.append(scope); s.append(", constructor"); s.append(scope); s.append(", red"); s.append(scope); s.append(", green"); s.append(scope); s.append(", blue"); s.append(scope); s.append(", alpha"); s.append(scope); s.append(");"); s.append(cr); return s.toString(); } public String convertToCPP(JNITypeConverter converter, int scope, IType type, int dimension, String nameSpace, String src, String dst) { StringBuffer s = new StringBuffer(); s.append(indent(scope)); s.append("// convert Color to vector<double>"); s.append(cr); s.append(indent(scope)); s.append("jclass colorClass"); s.append(scope); s.append(" = env->GetObjectClass("); s.append(src); s.append(");"); s.append(cr); s.append(indent(scope)); s.append("jmethodID getRGBComponentsMethod"); s.append(scope); s.append(" = env->GetMethodID(colorClass"); s.append(scope); s.append(", \"getRGBComponents\", \"([F)[F\");"); s.append(cr); s.append(indent(scope)); s.append("jfloatArray o"); s.append(scope); s.append(" = (jfloatArray)env->CallObjectMethod("); s.append(src); s.append(", getRGBComponentsMethod"); s.append(scope); s.append(", NULL"); s.append(");"); s.append(cr); s.append(indent(scope)); s.append("float* c"); s.append(scope); s.append(" = env->GetFloatArrayElements(o"); s.append(scope); s.append(", NULL);"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(".push_back(*c"); s.append(scope); s.append("++);"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(".push_back(*c"); s.append(scope); s.append("++);"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(".push_back(*c"); s.append(scope); s.append("++);"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(".push_back(*c"); s.append(scope); s.append("++);"); s.append(cr); return s.toString(); } }