示例#1
0
TagLib::ByteVector TagLib::EncodeBase64(const TagLib::ByteVector& input)
{
	SFB::CFError error;
	SFB::SecTransform encoder(SecEncodeTransformCreate(kSecBase64Encoding, &error));
    if(!encoder) {
		LOGGER_WARNING("org.sbooth.AudioEngine", "SecEncodeTransformCreate failed: " << error);
		return {};
	}

	SFB::CFData sourceData(CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (const UInt8 *)input.data(), (CFIndex)input.size(), kCFAllocatorNull));
	if(!sourceData)
		return {};

    if(!SecTransformSetAttribute(encoder, kSecTransformInputAttributeName, sourceData, &error)) {
		LOGGER_WARNING("org.sbooth.AudioEngine", "SecTransformSetAttribute failed: " << error);
		return {};
	}

	SFB::CFData encodedData((CFDataRef)SecTransformExecute(encoder, &error));
	if(!encodedData) {
		LOGGER_WARNING("org.sbooth.AudioEngine", "SecTransformExecute failed: " << error);
		return {};
	}

	return {(const char *)CFDataGetBytePtr((CFDataRef)encodedData), (size_t)CFDataGetLength((CFDataRef)encodedData)};
}
void vesKiwiDataConversionTools::GenericConvertTriangles(vtkPolyData* input,
  vesSharedPtr<vesGeometryData> output)
{
  vesSourceDataP3N3f::Ptr sourceData (new vesSourceDataP3N3f());

  double inPoint[3];
  for (int i = 0; i < input->GetNumberOfPoints(); ++i){
    input->GetPoint(i, inPoint);

    vesVertexDataP3N3f vertexData;
    vertexData.m_position = vesVector3f(inPoint[0], inPoint[1], inPoint[2]);
    sourceData->pushBack(vertexData);
  }

  // copy triangles in place to ves structure
  vtkCellArray* polys = input->GetPolys();
  vtkIdType num;
  vtkIdType* vertices;

  vesSharedPtr< vesIndices<T> > indicesObj =
    std::tr1::static_pointer_cast< vesIndices<T> >
    (output->triangles()->getVesIndices());

  typename vesIndices<T>::Indices* triangleIndices
    = indicesObj->indices();

  triangleIndices->clear();
  triangleIndices->resize(polys->GetNumberOfCells());

  T* outIndex = &triangleIndices->front();
  for (int i = 0; i < polys->GetNumberOfCells(); ++i)
  {
    // there are 4 elements for each triangle cell in the array (count, i1, i2, i3)
    polys->GetCell(4*i, num, vertices);
    *outIndex++ = vertices[0];
    *outIndex++ = vertices[1];
    *outIndex++ = vertices[2];
  }

  if (input->GetPointData()->GetNormals())
  {
    vtkDataArray* normals = input->GetPointData()->GetNormals();
    for (int i = 0; i < input->GetNumberOfPoints(); ++i)
    {
      sourceData->arrayReference()[i].m_normal[0] = normals->GetTuple(i)[0];
      sourceData->arrayReference()[i].m_normal[1] = normals->GetTuple(i)[1];
      sourceData->arrayReference()[i].m_normal[2] = normals->GetTuple(i)[2];
    }
  }
  else
  {
    output->computeNormals<T>();
  }

  output->computeBounds();
  output->addSource(sourceData);
}
示例#3
0
tristate KexiReportView::afterSwitchFrom(Kexi::ViewMode mode)
{
    Q_UNUSED(mode);

    qDebug();
    if (tempData()->reportSchemaChangedInPreviousView) {
        qDebug() << "Schema changed";
        delete m_preRenderer;

        qDebug() << tempData()->reportDefinition.tagName();

        m_preRenderer = new KoReportPreRenderer(tempData()->reportDefinition);
        if (m_preRenderer->isValid()) {
            KoReportData *reportData = 0;
            if (!tempData()->connectionDefinition.isNull())  {
                reportData = sourceData(tempData()->connectionDefinition);
            }
            m_preRenderer->setSourceData(reportData);

            m_preRenderer->setName(window()->partItem()->name());

            //Add a kexi object to provide kexidb and extra functionality
//! @todo KEXI3 if we want this            if(!m_kexi) {
//                m_kexi = new KexiScriptAdaptor();
//            }
//            m_preRenderer->registerScriptObject(m_kexi, "Kexi");
            //If using a kexidb source, add a functions scripting object
            if (tempData()->connectionDefinition.attribute("type") == "internal") {
                m_functions = new KRScriptFunctions(reportData, KexiMainWindowIface::global()->project()->dbConnection());
                m_preRenderer->registerScriptObject(m_functions, "field");
                connect(m_preRenderer, SIGNAL(groupChanged(QMap<QString, QVariant>)),
                        m_functions, SLOT(setGroupData(QMap<QString, QVariant>)));
            }

            if (m_reportDocument) {
                qDebug() << "=======================================Deleting old document";
                delete m_reportDocument;
            }

            m_reportDocument = m_preRenderer->generate();
            if (m_reportDocument) {
                m_reportView->setDocument(m_reportDocument);
#ifndef KEXI_MOBILE
                m_pageSelector->setRecordCount(m_reportView->pageCount());
                m_pageSelector->setCurrentRecordNumber(1);
#endif
            }
        } else {
            KMessageBox::error(this, xi18n("Report schema appears to be invalid or corrupt"), xi18n("Opening failed"));
        }


        tempData()->reportSchemaChangedInPreviousView = false;
    }
    return true;
}
void KexiSourceSelector::setConnectionData(QDomElement c)
{
    if (c.attribute("type") == "internal") {
        d->sourceType->setCurrentIndex(d->sourceType->findData("internal"));
        d->internalSource->setCurrentIndex(d->internalSource->findText(c.attribute("source")));
    }

    if (c.attribute("type") == "external") {
        d->sourceType->setCurrentIndex(d->sourceType->findText("external"));
        d->externalSource->setText(c.attribute("source"));
    }

    emit(setData(sourceData()));
}
//-----------------------------------------------------------------------------
vesSharedPtr<vesGeometryData> vesKiwiDataConversionTools::ConvertPoints(vtkPolyData* input)
{
  vesSharedPtr<vesGeometryData> output(new vesGeometryData());
  vesSourceDataP3f::Ptr sourceData(new vesSourceDataP3f());

  vesVertexDataP3f vertexData;
  for (int i = 0; i < input->GetNumberOfPoints(); ++i){
    vertexData.m_position[0] = input->GetPoint(i)[0];
    vertexData.m_position[1] = input->GetPoint(i)[1];
    vertexData.m_position[2] = input->GetPoint(i)[2];
    sourceData->pushBack(vertexData);
  }

  output->addSource(sourceData);
  output->setName("PolyData");

  // Add point primitive
  vesPrimitive::Ptr pointPrimitive (new vesPrimitive());
  pointPrimitive->setPrimitiveType(vesPrimitiveRenderType::Points);
  pointPrimitive->setIndexCount(1);
  output->addPrimitive(pointPrimitive);

  return output;
}
示例#6
0
tristate KexiReportView::afterSwitchFrom(Kexi::ViewMode mode)
{
    Q_UNUSED(mode);

    kDebug();
    if (tempData()->reportSchemaChangedInPreviousView) {
        kDebug() << "Schema changed";
        delete m_preRenderer;

        kDebug() << tempData()->reportDefinition.tagName();

        m_preRenderer = new KoReportPreRenderer(tempData()->reportDefinition);
        if (m_preRenderer->isValid()) {
            KoReportData *reportData = 0;
            if (!tempData()->connectionDefinition.isNull())  {
                reportData = sourceData(tempData()->connectionDefinition);    
            }
            if (!reportData) {
                reportData = new KexiDBReportData(QString(), KexiMainWindowIface::global()->project()->dbConnection());
            }
            m_preRenderer->setSourceData(reportData);
            
            m_preRenderer->setName(tempData()->name);
            m_currentPage = 1;

            //Add a kexi object to provide kexidb and extra functionality
            if(!m_kexi) {
                m_kexi = new KexiScriptAdaptor();
            }
            m_preRenderer->registerScriptObject(m_kexi, "Kexi");

            //If using a kexidb source, add a functions scripting object
            if (tempData()->connectionDefinition.attribute("type") == "internal") {
                if (!m_functions) {
                    m_functions = new KRScriptFunctions(reportData, KexiMainWindowIface::global()->project()->dbConnection());
                }
                m_preRenderer->registerScriptObject(m_functions, "field");
            }

            if (m_reportDocument)
                delete m_reportDocument;
            
            m_reportDocument = m_preRenderer->generate();
            if (m_reportDocument) {
                m_pageCount = m_reportDocument->pages();
#ifndef KEXI_MOBILE
                m_pageSelector->setRecordCount(m_pageCount);
#endif
            }

            m_reportWidget = new KoReportPage(this, m_reportDocument);
            m_reportWidget->setObjectName("KexiReportPage");
            m_scrollArea->setWidget(m_reportWidget);

        } else {
            KMessageBox::error(this, i18n("Report schema appears to be invalid or corrupt"), i18n("Opening failed"));
        }


        tempData()->reportSchemaChangedInPreviousView = false;
    }
    return true;
}
void KexiSourceSelector::setDataClicked()
{
    emit(setData(sourceData()));
}
/**
 * Decodes the given byte array into the <tt>ImageData</tt>.
 * <p>
 * Java declaration:
 * <pre>
 *     loadNative(Ljavax/microedition/lcdui/ImageDataFactory;[BII)Z
 * </pre>
 *
 * @param imageData the ImageData to load to
 * @param imageBytes A byte array containing the encoded PNG image data
 * @param offset The start of the image data within the byte array
 * @param length The length of the image data in the byte array
 *
 * @return true if able to decode
 */
KNIEXPORT KNI_RETURNTYPE_BOOLEAN
KNIDECL(javax_microedition_lcdui_ImageDataFactory_loadNative) {
    int            length = KNI_GetParameterAsInt(4);
    int            offset = KNI_GetParameterAsInt(3);
    int            status = KNI_TRUE;
    unsigned char* srcBuffer = NULL;
    PIXEL* imgPixelData = NULL;
    ALPHA* imgAlphaData = NULL;
    java_imagedata* midpImageData = NULL;
	TBool generateMask = EFalse;

	KNI_StartHandles(4);
    KNI_DeclareHandle(pixelData);
    KNI_DeclareHandle(alphaData);
    KNI_DeclareHandle(inData);
    KNI_DeclareHandle(imageData);

    KNI_GetParameterAsObject(2, inData);
	KNI_GetParameterAsObject(1, imageData);
	midpImageData = IMGAPI_GET_IMAGEDATA_PTR(imageData);

    srcBuffer = (unsigned char *)JavaByteArray(inData);
	int byteArrayLength = KNI_GetArrayLength(inData);
	if (offset >= 0 && length >= 0 && offset + length <= byteArrayLength)
	{
		TPtrC8 sourceData(srcBuffer + offset, length);
		TInt width;
		TInt height;
		if (static_cast<MApplication*>(Dll::Tls())->InitializeDecoder(sourceData, width, height, generateMask) == KErrNone)
		{
			midpImageData->width = width;
			midpImageData->height = height;
		
			SNI_NewArray(SNI_BYTE_ARRAY, midpImageData->width * midpImageData->height * 2, pixelData);
			if (generateMask)
			{
				SNI_NewArray(SNI_BYTE_ARRAY, midpImageData->width * midpImageData->height, alphaData);
			}

			if (!KNI_IsNullHandle(pixelData) && (!KNI_IsNullHandle(alphaData) || !generateMask))
			{		
				if (generateMask)
				{
					imgAlphaData = (ALPHA*)JavaByteArray(alphaData);
				}

				midp_set_jobject_field(KNIPASSARGS imageData, "pixelData", "[B", pixelData);
				imgPixelData = (PIXEL*)JavaByteArray(pixelData);

				if (static_cast<MApplication*>(Dll::Tls())->DecodeImage((char*)imgPixelData, (char*)imgAlphaData) != KErrNone)
				{
					status = KNI_FALSE;
				}
				if (imgAlphaData)
				{
					midp_set_jobject_field(KNIPASSARGS imageData, "alphaData", "[B", alphaData);
				}
			}
            else
            {
                status = KNI_FALSE;
			}
        }
	}

	KNI_EndHandles();
    KNI_ReturnBoolean(status);
}
//-----------------------------------------------------------------------------
vesSharedPtr<vesGeometryData> vesKiwiDataConversionTools::ConvertPVWebData(vesSharedPtr<vesPVWebDataSet> dataset)
{
  vesSharedPtr<vesGeometryData> geometryData = vesSharedPtr<vesGeometryData>(new vesGeometryData);
  geometryData->setName("PolyData");

  const int numberOfVerts = dataset->m_numberOfVerts;


  // Todo- handle point primitives
  //vesPrimitive::Ptr pointPrimitive(new vesPrimitive());
  //pointPrimitive->setPrimitiveType(vesPrimitiveRenderType::Points);
  //pointPrimitive->setIndexCount(1);
  //geometryData->addPrimitive(pointPrimitive);


  if (dataset->m_datasetType == 'M') {
    // verts and normals
    vesSourceDataP3N3f::Ptr sourceData(new vesSourceDataP3N3f());
    vesVertexDataP3N3f vertexData;
    for (int i = 0; i < numberOfVerts; ++i) {
      float* vertex = dataset->vertices() + i*3;
      float* normal = dataset->normals() + i*3;
      vertexData.m_position[0] = vertex[0];
      vertexData.m_position[1] = vertex[1];
      vertexData.m_position[2] = vertex[2];
      vertexData.m_normal[0] = normal[0];
      vertexData.m_normal[1] = normal[1];
      vertexData.m_normal[2] = normal[2];
      sourceData->pushBack(vertexData);
    }
    geometryData->addSource(sourceData);

    // triangles
    vesSharedPtr<vesIndices<unsigned short> > triangleIndices =
      vesSharedPtr<vesIndices<unsigned short> >(new vesIndices<unsigned short>());
    vesPrimitive::Ptr trianglesPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    trianglesPrimitive->setIndexCount(3);
    trianglesPrimitive->setIndicesValueType(vesPrimitiveIndicesValueType::UnsignedShort);
    trianglesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Triangles);
    trianglesPrimitive->setVesIndices(triangleIndices);
    geometryData->addPrimitive(trianglesPrimitive);

    for (int i = 0; i < dataset->m_numberOfIndices/3; ++i) {
      short* indices = dataset->indices() + i*3;
      triangleIndices->pushBackIndices(indices[0], indices[1], indices[2]);
    }

  }
  else if (dataset->m_datasetType == 'L') {

    // verts
    vesSourceDataP3f::Ptr vertexSourceData(new vesSourceDataP3f());
    vesVertexDataP3f vertexData;
    for (int i = 0; i < numberOfVerts; ++i) {
      float* vertex = dataset->vertices() + i*3;
      vertexData.m_position[0] = vertex[0];
      vertexData.m_position[1] = vertex[1];
      vertexData.m_position[2] = vertex[2];
      vertexSourceData->pushBack(vertexData);
    }
    geometryData->addSource(vertexSourceData);

    // lines
    vesSharedPtr<vesIndices<unsigned short> > lineIndices =
      vesSharedPtr<vesIndices<unsigned short> >(new vesIndices<unsigned short>());
    vesPrimitive::Ptr linesPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    linesPrimitive->setIndexCount(2);
    linesPrimitive->setIndicesValueType(vesPrimitiveIndicesValueType::UnsignedShort);
    linesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Lines);
    linesPrimitive->setVesIndices(lineIndices);
    geometryData->addPrimitive(linesPrimitive);

    for (int i = 0; i < dataset->m_numberOfIndices/2; ++i) {
      short* indices = dataset->indices() + i*2;
      lineIndices->pushBackIndices(indices[0], indices[1]);
    }
  }

  // colors
  float opacity = 1.0;
  if (dataset->m_transparency) {
    opacity = 0.4;
  }

  vesSourceDataC4f::Ptr colorSourceData(new vesSourceDataC4f());
  vesVertexDataC4f vertColor;
  for (size_t i = 0; i < numberOfVerts; ++i)
    {
    unsigned char* color = dataset->colors() + i*4;
    vertColor.m_color = vesVector4f(color[0]/255.0, color[1]/255.0, color[2]/255.0, opacity);
    colorSourceData->pushBack(vertColor);
    }

  geometryData->addSource(colorSourceData);
  return geometryData;
}
  vesSharedPtr<vesGeometryData> vesKiwiDataConversionTools::GenericConvert(
  vtkPolyData* input)
{
  unsigned int indicesValuesType;
  if(typeid(T) == typeid(unsigned int)) {
    indicesValuesType = vesPrimitiveIndicesValueType::UnsignedInt;
  }
  // Default
  else {
    indicesValuesType = vesPrimitiveIndicesValueType::UnsignedShort;
  }

  vesPrimitive::Ptr trianglesPrimitive;
  vesSharedPtr< vesIndices<T> > triangleIndices;
  vesPrimitive::Ptr triangleStripsPrimitive;
  vesSharedPtr< vesIndices<T> > triangleStripsIndices;
  vesPrimitive::Ptr linesPrimitive;
  vesSharedPtr< vesIndices<T> > linesIndices;
  vesPrimitive::Ptr verticesPrimitive;
  vesSharedPtr< vesIndices<T> > verticesIndices;

  vesSharedPtr<vesGeometryData> output =
    vesSharedPtr<vesGeometryData>(new vesGeometryData());
  vesSourceDataP3N3f::Ptr sourceData (new vesSourceDataP3N3f());

  vesVertexDataP3N3f vertexData;
  for (int i = 0; i < input->GetNumberOfPoints(); ++i){
    vertexData.m_position[0] = input->GetPoint(i)[0];
    vertexData.m_position[1] = input->GetPoint(i)[1];
    vertexData.m_position[2] = input->GetPoint(i)[2];
    vertexData.m_normal[0] = 1.0f;
    vertexData.m_normal[1] = 0.0f;
    vertexData.m_normal[2] = 0.0f;
    sourceData->pushBack(vertexData);
  }

  output->addSource(sourceData);
  output->setName("PolyData");

  vtkIdType num;
  vtkIdType* vertices;

  // Add triangles
  vtkCellArray* polys = input->GetPolys();
  polys->InitTraversal();

  if (polys->GetNumberOfCells() > 0) {
    triangleIndices = vesSharedPtr< vesIndices<T> >(new vesIndices<T>());
    trianglesPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    trianglesPrimitive->setIndexCount(3);
    trianglesPrimitive->setIndicesValueType(indicesValuesType);
    trianglesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Triangles);
    trianglesPrimitive->setVesIndices(triangleIndices);

    output->addPrimitive(trianglesPrimitive);

    for (int i = 0; i < polys->GetNumberOfCells(); ++i) {
      polys->GetNextCell(num, vertices);
      if (num == 3) {
        triangleIndices->pushBackIndices(vertices[0], vertices[1], vertices[2]);
      }
      else if (num == 4) {
        triangleIndices->pushBackIndices(vertices[0], vertices[1], vertices[2]);
        triangleIndices->pushBackIndices(vertices[3], vertices[0], vertices[2]);
      }
    }
  }

  // Add triangle strips
  vtkCellArray* strips = input->GetStrips();
  strips->InitTraversal();

  if (strips->GetNumberOfCells() > 0) {
    triangleStripsIndices
      = vesSharedPtr< vesIndices<T> >( new vesIndices<T>() );
    triangleStripsPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    triangleStripsPrimitive->setIndexCount(1);
    triangleStripsPrimitive->setIndicesValueType(indicesValuesType);
    triangleStripsPrimitive->setPrimitiveType(vesPrimitiveRenderType::TriangleStrip);
    triangleStripsPrimitive->setVesIndices(triangleIndices);

    output->addPrimitive(triangleStripsPrimitive);

    for (int i = 0; i < strips->GetNumberOfCells(); ++i) {
      strips->GetNextCell(num, vertices);
      for (int i = 2; i < num; ++i)
      {
        if (i & 1)
        {
          triangleStripsIndices->pushBackIndices(vertices[i-1], vertices[i-2], vertices[i]);
        }
        else
        {
          triangleStripsIndices->pushBackIndices(vertices[i-2], vertices[i-1], vertices[i]);
        }
      }
    }
  }

  // Add lines
  vtkCellArray* lines = input->GetLines();
  lines->InitTraversal();

  if (lines->GetNumberOfCells() > 0) {
    linesIndices = vesSharedPtr< vesIndices<T> >(new vesIndices<T>());
    linesPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    linesPrimitive->setIndexCount(2);
    linesPrimitive->setIndicesValueType(indicesValuesType);
    linesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Lines);
    linesPrimitive->setVesIndices(linesIndices);

    output->addPrimitive(linesPrimitive);

    for (int i = 0; i < lines->GetNumberOfCells(); ++i) {
      lines->GetNextCell(num, vertices);
      for (int i = 1; i < num; ++i)
      {
        linesIndices->pushBackIndices(vertices[i-1], vertices[i]);
      }
    }
  }

  // Add verts
  vtkCellArray* verts = input->GetVerts();
  verts->InitTraversal();

  if (verts->GetNumberOfCells() > 0) {
    verticesIndices = vesSharedPtr< vesIndices<T> >(new vesIndices<T>());
    verticesPrimitive = vesPrimitive::Ptr(new vesPrimitive());
    verticesPrimitive->setIndexCount(1);
    verticesPrimitive->setIndicesValueType(indicesValuesType);
    verticesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Points);
    verticesPrimitive->setVesIndices(verticesIndices);

    output->addPrimitive(verticesPrimitive);

    for (int i = 0; i < verts->GetNumberOfCells() && i < 65000; ++i) {
      verts->GetNextCell(num, vertices);
      verticesIndices->pushBackIndices(vertices[0]);
    }
  }

  if (input->GetPointData()->GetNormals()) {
    vtkDataArray* normals = input->GetPointData()->GetNormals();
    for (int i = 0; i < input->GetNumberOfPoints(); ++i) {
      sourceData->arrayReference()[i].m_normal[0] = normals->GetTuple(i)[0];
      sourceData->arrayReference()[i].m_normal[1] = normals->GetTuple(i)[1];
      sourceData->arrayReference()[i].m_normal[2] = normals->GetTuple(i)[2];
    }
  }
  else
  {
    output->computeNormals<T>();
  }

#if 0
  // Note- the PDB reader assigns a 3 component 'rgb_colors' array as point scalars,
  // so make sure we check the number of components
  vtkDataArray* scalars = input->GetPointData()->GetScalars();
  if (scalars && scalars->GetNumberOfComponents() == 1)
  {
    for (int i = 0; i < input->GetNumberOfPoints(); ++i)
    {
      output->GetPointScalars().push_back(static_cast<float>(scalars->GetTuple1(i)));
    }
  }
#endif
  return output;
}