int Ng_GetSolidList (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * valuevar = argv[1]; int i; stringstream vst; for (i = 1; i <= geometry->GetNSolids(); i++) { const Solid * sol = geometry->GetSolid(i); if (!sol->GetPrimitive()) vst << sol->Name() << " "; } cout << "solnames = " << vst.str() << endl; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
int Ng_SetPrimitiveData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * value = argv[2]; Array<double> coeffs; cout << "Set primitive data, name = " << name << ", value = " << value << endl; istringstream vst (value); double val; while (!vst.eof()) { vst >> val; coeffs.Append (val); } ((Primitive*) geometry->GetSolid (name)->GetPrimitive())->SetPrimitiveData (coeffs); return TCL_OK; }
int Ng_GetSolidData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.Ptr()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * valuevar = argv[2]; ostringstream vst; const Solid * sol = geometry->GetSolid (name); sol->GetSolidData (vst); cout << "GetSolidData, name = " << name << ", data = " << vst.str() << endl; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
int Ng_SetSolidData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.Ptr()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * val = argv[2]; cout << "Set Solid Data, name = " << name << ", value = " << val << endl; istringstream vst (val); Solid * nsol = Solid::CreateSolid (vst, geometry->GetSolids()); geometry->SetSolid (name, nsol); return TCL_OK; }
int Ng_CreatePrimitive (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.Ptr()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * classname = argv[1]; tcl_const char * name = argv[2]; cout << "Create primitive, class = " << classname << ", name = " << name << endl; Primitive * nprim = Primitive::CreatePrimitive (classname); Solid * nsol = new Solid (nprim); char sname[100]; for (int j = 1; j <= nprim->GetNSurfaces(); j++) { sprintf (sname, "%s,%d", name, j); geometry -> AddSurface (sname, &nprim->GetSurface(j)); nprim -> SetSurfaceId (j, geometry->GetNSurf()); } geometry->SetSolid (name, nsol); return TCL_OK; }
CSGeometry* NGInterface::loadCSG(string data) { strstream in; CSGeometry *geom; Point<3> pmin(minX,minY,minZ), pmax(maxX,maxY,maxZ); Box<3> box(pmin,pmax); in << data; try { geom = ParseCSG(in); } catch(...) { cerr << "Problem in CSG-file!" << endl; return NULL; } if (!geom) { cout << "geo-file should start with 'algebraic3d'" << endl; return NULL; } else geom->FindIdenticSurfaces(1e-8*geom->MaxSize()); geom->SetBoundingBox(box); geom->CalcTriangleApproximation(detail,facets); return (CSGeometry*)(geometry = geom); }
int main() { std::ifstream geometry_file; geometry_file.open("../data/half-trigate.geo"); CSGeometry * geom = ParseCSG( geometry_file ); geom->FindIdenticSurfaces(1e-8 * geom->MaxSize()); Mesh * netgen_mesh = new Mesh(); netgen::MeshingParameters mparams; geom->GenerateMesh(netgen_mesh, mparams, 1, 5); { typedef viennagrid::tetrahedral_3d_mesh MeshType; typedef viennagrid::tetrahedral_3d_segmentation SegmentationType; MeshType mesh; SegmentationType segmentation(mesh); typedef viennagrid::result_of::point<MeshType>::type PointType; typedef viennagrid::result_of::vertex_handle<MeshType>::type VertexHandleType; typedef SegmentationType::segment_handle_type SegmentType; int num_points = netgen_mesh->GetNP(); int num_tets = netgen_mesh->GetNE(); std::cout << "Num Points: " << num_points << std::endl; std::cout << "Num Tets: " << num_tets << std::endl; std::vector<VertexHandleType> vertex_handles( num_points ); for (int i = 1; i <= num_points; ++i) { PointType vgrid_point(netgen_mesh->Point(i)[0], netgen_mesh->Point(i)[1], netgen_mesh->Point(i)[2]); vertex_handles[i-1] = viennagrid::make_vertex( mesh, vgrid_point ); } for (int i = 0; i < num_tets; ++i) { ElementIndex ei = i; SegmentType segment = segmentation.get_make_segment( (*netgen_mesh)[ei].GetIndex() ); viennagrid::make_tetrahedron( segment, vertex_handles[(*netgen_mesh)[ei][0]-1], vertex_handles[(*netgen_mesh)[ei][1]-1], vertex_handles[(*netgen_mesh)[ei][2]-1], vertex_handles[(*netgen_mesh)[ei][3]-1]); } viennagrid::io::vtk_writer<MeshType, SegmentationType> writer; writer(mesh, segmentation, "out"); } }
int Ng_GeometryOptions (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); const char * command = argv[1]; if (strcmp (command, "get") == 0) { if (geometry) { char buf[20]; Point3d pmin = geometry->BoundingBox ().PMin(); Point3d pmax = geometry->BoundingBox ().PMax(); sprintf (buf, "%5.1lf", pmin.X()); Tcl_SetVar (interp, "::geooptions.minx", buf, 0); sprintf (buf, "%5.1lf", pmin.Y()); Tcl_SetVar (interp, "::geooptions.miny", buf, 0); sprintf (buf, "%5.1lf", pmin.Z()); Tcl_SetVar (interp, "::geooptions.minz", buf, 0); sprintf (buf, "%5.1lf", pmax.X()); Tcl_SetVar (interp, "::geooptions.maxx", buf, 0); sprintf (buf, "%5.1lf", pmax.Y()); Tcl_SetVar (interp, "::geooptions.maxy", buf, 0); sprintf (buf, "%5.1lf", pmax.Z()); Tcl_SetVar (interp, "::geooptions.maxz", buf, 0); } } else if (strcmp (command, "set") == 0) { Point<3> pmin (atof (Tcl_GetVar (interp, "::geooptions.minx", 0)), atof (Tcl_GetVar (interp, "::geooptions.miny", 0)), atof (Tcl_GetVar (interp, "::geooptions.minz", 0))); Point<3> pmax (atof (Tcl_GetVar (interp, "::geooptions.maxx", 0)), atof (Tcl_GetVar (interp, "::geooptions.maxy", 0)), atof (Tcl_GetVar (interp, "::geooptions.maxz", 0))); Box<3> box (pmin, pmax); if (geometry) geometry -> SetBoundingBox (box); CSGeometry::SetDefaultBoundingBox (box); } return TCL_OK; }
void SaveVolumeMesh (const Mesh & mesh, const CSGeometry & geometry, char * filename) { INDEX i; ofstream outfile(filename); outfile << "volumemesh" << endl; outfile << mesh.GetNSE() << endl; for (i = 1; i <= mesh.GetNSE(); i++) { if (mesh.SurfaceElement(i).GetIndex()) outfile << mesh.GetFaceDescriptor(mesh.SurfaceElement(i).GetIndex ()).SurfNr() << "\t"; else outfile << "0" << "\t"; outfile << mesh.SurfaceElement(i)[0] << " " << mesh.SurfaceElement(i)[1] << " " << mesh.SurfaceElement(i)[2] << endl; } outfile << mesh.GetNE() << endl; for (ElementIndex ei = 0; ei < mesh.GetNE(); ei++) outfile << mesh[ei].GetIndex() << "\t" << mesh[ei][0] << " " << mesh[ei][1] << " " << mesh[ei][2] << " " << mesh[ei][3] << endl; outfile << mesh.GetNP() << endl; for (i = 1; i <= mesh.GetNP(); i++) outfile << mesh.Point(i)(0) << " " << mesh.Point(i)(1) << " " << mesh.Point(i)(2) << endl; #ifdef SOLIDGEOM outfile << geometry.GetNSurf() << endl; for (i = 1; i <= geometry.GetNSurf(); i++) geometry.GetSurface(i) -> Print (outfile); #endif }
int Ng_GetPrimitiveData (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } tcl_const char * name = argv[1]; tcl_const char * classnamevar = argv[2]; tcl_const char * valuevar = argv[3]; const char * classname; Array<double> coeffs; geometry->GetSolid (name)->GetPrimitive()->GetPrimitiveData (classname, coeffs); ostringstream vst; for (int i = 1; i <= coeffs.Size(); i++) vst << coeffs.Get(i) << " "; cout << "GetPrimitiveData, name = " << name << ", classnamevar = " << classnamevar << ", classname = " << classname << endl << " valuevar = " << valuevar << ", values = " << vst.str() << endl; Tcl_SetVar (interp, classnamevar, (char*)classname, 0); Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); return TCL_OK; }
/* * FEPP .. a finite element package developed at University Linz, Austria */ void WriteFEPPFormat (const Mesh & mesh, const CSGeometry & geom, const string & filename) { ofstream outfile (filename.c_str()); if (mesh.GetDimension() == 3) { // output for FEPP int np = mesh.GetNP(); int ne = mesh.GetNE(); int nse = mesh.GetNSE(); int ns = mesh.GetNFD(); int i, j; outfile.precision(5); outfile.setf (ios::fixed, ios::floatfield); outfile.setf (ios::showpoint); outfile << "volumemesh4" << endl; outfile << nse << endl; for (i = 1; i <= nse; i++) { const Element2d & el = mesh.SurfaceElement(i); // int facenr = mesh.facedecoding.Get(el.GetIndex()).surfnr; outfile.width(4); outfile << el.GetIndex() << " "; outfile.width(4); // outfile << mesh.GetFaceDescriptor(el.GetIndex()).BCProperty() << " "; outfile << mesh.GetFaceDescriptor(el.GetIndex()).BCProperty() << " "; outfile.width(4); outfile << el.GetNP() << " "; for (j = 1; j <= el.GetNP(); j++) { outfile.width(8); outfile << el.PNum(j); } outfile << "\n"; } outfile << ne << "\n"; for (i = 1; i <= ne; i++) { const Element & el = mesh.VolumeElement(i); outfile.width(4); outfile << el.GetIndex() << " "; outfile.width(4); outfile << el.GetNP() << " "; for (j = 1; j <= el.GetNP(); j++) { outfile.width(8); outfile << el.PNum(j); } outfile << "\n"; } outfile << np << "\n"; for (i = 1; i <= np; i++) { const Point3d & p = mesh.Point(i); outfile.width(10); outfile << p.X() << " "; outfile.width(9); outfile << p.Y() << " "; outfile.width(9); outfile << p.Z() << "\n"; } /* if (typ == WRITE_FEPPML) { int nbn = mesh.mlbetweennodes.Size(); outfile << nbn << "\n"; for (i = 1; i <= nbn; i++) outfile << mesh.mlbetweennodes.Get(i).I1() << " " << mesh.mlbetweennodes.Get(i).I2() << "\n"; // int ncon = mesh.connectedtonode.Size(); // outfile << ncon << "\n"; // for (i = 1; i <= ncon; i++) // outfile << i << " " << mesh.connectedtonode.Get(i) << endl; } */ // write CSG surfaces if (&geom && geom.GetNSurf() >= ns) { outfile << ns << endl; for (i = 1; i <= ns; i++) geom.GetSurface(mesh.GetFaceDescriptor(i).SurfNr())->Print(outfile); } else outfile << "0" << endl; } else { // 2D fepp format ; /* extern SplineGeometry2d * geometry2d; if (geometry2d) Save2DMesh (mesh, &geometry2d->GetSplines(), outfile); else Save2DMesh (mesh, 0, outfile); */ } }
void readSpatialSBML() { SBMLDocument *document2 = readSBML("spatial_example0.xml"); Model *model2 = document2->getModel(); Compartment *comp; SpatialCompartmentPlugin* cplugin; RequiredElementsSBasePlugin* reqplugin; for (unsigned int i = 0; i < model2->getNumCompartments(); i++) { comp = model2->getCompartment(i); cout << "Compartment" << i << ": " << comp->getId() << endl; reqplugin = static_cast<RequiredElementsSBasePlugin*>(comp->getPlugin("req")); if (!reqplugin->getMathOverridden().empty()) { cout << "Comp" << i << " req mathOverridden: " << reqplugin->getMathOverridden() << endl; } cplugin = static_cast<SpatialCompartmentPlugin*>(comp->getPlugin("spatial")); if (cplugin->getCompartmentMapping()->isSetSpatialId()) { cout << "Comp" << i << " CMSpId: " << cplugin->getCompartmentMapping()->getSpatialId() << endl; cout << "Comp" << i << " CM_Comp: " << cplugin->getCompartmentMapping()->getCompartment() << endl; cout << "Comp" << i << " CM_DType: " << cplugin->getCompartmentMapping()->getDomainType() << endl; cout << "Comp" << i << " CM_UnitSz: " << cplugin->getCompartmentMapping()->getUnitSize() << endl; } } Species *sp; SpatialSpeciesRxnPlugin* srplugin; for (unsigned int i = 0; i < model2->getNumSpecies(); i++) { sp = model2->getSpecies(i); cout << "Species" << i << ": " << sp->getId() << endl; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(sp->getPlugin("spatial")); if (srplugin->getIsSpatial()) { cout << "species" << i << " isSpatial: " << srplugin->getIsSpatial() << endl; } } Parameter *param; SpatialParameterPlugin* pplugin; for (unsigned int i = 0; i < model2->getNumParameters(); i++) { param = model2->getParameter(i); cout << "Parameter" << i << ": " << param->getId() << endl; reqplugin = static_cast<RequiredElementsSBasePlugin*>(param->getPlugin("req")); if (!reqplugin->getMathOverridden().empty()) { cout << "Parameter" << i << " req mathOverridden: " << reqplugin->getMathOverridden() << endl; } pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); if (pplugin->getSpatialSymbolReference()->isSetSpatialId()) { cout << "Parameter" << i << " SpRefId: " << pplugin->getSpatialSymbolReference()->getSpatialId() << endl; cout << "Parameter" << i << " SpRefType: " << pplugin->getSpatialSymbolReference()->getType() << endl; } if (pplugin->getDiffusionCoefficient()->isSetVariable()) { cout << "Diff_" << i << " SpeciesVarId: " << pplugin->getDiffusionCoefficient()->getVariable() << endl; cout << "Diff_" << i << " SpCoordIndex: " << pplugin->getDiffusionCoefficient()->getCoordinateIndex() << endl; } if (pplugin->getAdvectionCoefficient()->isSetVariable()) { cout << "Adv_" << i << " SpeciesVarId: " << pplugin->getAdvectionCoefficient()->getVariable() << endl; cout << "Adv_" << i << " SpCoordIndex: " << pplugin->getAdvectionCoefficient()->getCoordinateIndex() << endl; } if (pplugin->getBoundaryCondition()->isSetVariable()) { cout << "BC_" << i << " SpeciesVarId: " << pplugin->getBoundaryCondition()->getVariable() << endl; cout << "BC_" << i << " SpCoordBoundary: " << pplugin->getBoundaryCondition()->getCoordinateBoundary() << endl; cout << "BC_" << i << " SpBoundaryType: " << pplugin->getBoundaryCondition()->getType() << endl; } } Reaction *rxn; for (unsigned int i = 0; i < model2->getNumReactions(); i++) { rxn = model2->getReaction(i); cout << "Reaction" << i << ": " << rxn->getId() << endl; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(rxn->getPlugin("spatial")); if (srplugin->getIsLocal()) { cout << "rxn" << i << " isLocal: " << srplugin->getIsLocal() << endl; } } Rule *rule; for (unsigned int i = 0; i < model2->getNumRules(); i++) { rule = model2->getRule(i); cout << "Rule" << i << ": " << rule->getVariable() << endl; } // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be cast for the // corresponding derived class. // SpatialModelPlugin* mplugin2; mplugin2 = static_cast<SpatialModelPlugin*>(model2->getPlugin("spatial")); cout << "URI: " << mplugin2->getURI() << endl; cout << "prefix: " << mplugin2->getPrefix() << endl; // get a Geometry object via SpatialModelPlugin object. Geometry* geometry2 = mplugin2->getGeometry(); cout << "Geometry coordSystem: " << geometry2->getCoordinateSystem() << endl; // get a CoordComponent object via the Geometry object. CoordinateComponent* coordComp = geometry2->getCoordinateComponent(0); std::cout << "CoordComponent spatialId: " << coordComp->getSpatialId() << std::endl; std::cout << "CoordComponent compType: " << coordComp->getComponentType() << std::endl; std::cout << "CoordComponent sbmlUnit: " << coordComp->getSbmlUnit() << std::endl; std::cout << "CoordComponent index: " << coordComp->getIndex() << std::endl; BoundaryMin* minX = coordComp->getBoundaryMin(); std::cout << "minX name: " << minX->getSpatialId() << std::endl; std::cout << "minX value: " << minX->getValue() << std::endl; BoundaryMax* maxX = coordComp->getBoundaryMax(); std::cout << "maxX name: " << maxX->getSpatialId() << std::endl; std::cout << "maxX value: " << maxX->getValue() << std::endl; // get a DomainType object via the Geometry object. DomainType* domainType2 = geometry2->getDomainType(0); std::cout << "DomainType spatialId: " << domainType2->getSpatialId() << std::endl; std::cout << "DomainType spatialDim: " << domainType2->getSpatialDimensions() << std::endl; // get a Domain object via the Geometry object. Domain* domain = geometry2->getDomain(0); std::cout << "Domain1 spatialId: " << domain->getSpatialId() << std::endl; std::cout << "Domain1 implicit: " << domain->getImplicit() << std::endl; std::cout << "Domain1 domainType: " << domain->getDomainType() << std::endl; std::cout << "Domain1 Shape: " << domain->getShapeId() << std::endl; // get an internal point via the domain object InteriorPoint* internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_1 coord1: " << internalPt->getCoord1() << std::endl; // get a Domain object via the Geometry object. domain = geometry2->getDomain(1); std::cout << "Domain2 spatialId: " << domain->getSpatialId() << std::endl; std::cout << "Domain2 implicit: " << domain->getImplicit() << std::endl; std::cout << "Domain2 domainType: " << domain->getDomainType() << std::endl; std::cout << "Domain2 Shape: " << domain->getShapeId() << std::endl; // get an internal point via the domain object internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_2 coord1: " << internalPt->getCoord1() << std::endl; // get an AdjacentDomains object via the Geometry object. AdjacentDomains* adjDomain = geometry2->getAdjacentDomains(0); std::cout << "AdjDomain spatialId: " << adjDomain->getSpatialId() << std::endl; std::cout << "AdjDomain domain1: " << adjDomain->getDomain1() << std::endl; std::cout << "AdjDomain domain2: " << adjDomain->getDomain2() << std::endl; // get the different GeometryDefinition objects via the Geometry object. GeometryDefinition* gd; for (unsigned int i = 0; i < geometry2->getNumGeometryDefinitions(); i++) { gd = geometry2->getGeometryDefinition(i); if (gd->isAnalyticGeometry()) { AnalyticGeometry* analyticalGeom = static_cast<AnalyticGeometry*>(gd); std::cout << "AnalGeom spatialId: " << analyticalGeom->getSpatialId() << std::endl; // analVol from analGeom. AnalyticVolume* av = analyticalGeom->getAnalyticVolume(0); std::cout << "AnalVol spatialId: " << av->getSpatialId() << std::endl; std::cout << "AnalVol domainType: " << av->getDomainType() << std::endl; std::cout << "AnalVol funcType: " << av->getFunctionType() << std::endl; std::cout << "AnalVol ordinal: " << av->getOrdinal() << std::endl; const ASTNode* mathNode = av->getMath(); char* mathStr = writeMathMLToString(mathNode); std::cout << "AnalVol math: " << mathStr << std::endl; } if (gd->isSampledFieldGeometry()) { SampledFieldGeometry* sfGeom = static_cast<SampledFieldGeometry*>(gd); std::cout << "SampledFieldGeom spatialId: " << sfGeom->getSpatialId() << std::endl; // sampledField from sfGeom SampledField* sf = sfGeom->getSampledField(); std::cout << "SampledField spatialId: " << sf->getSpatialId() << std::endl; std::cout << "SampledField dataType: " << sf->getDataType() << std::endl; std::cout << "SampledField interpolation: " << sf->getInterpolationType() << std::endl; std::cout << "SampledField encoding: " << sf->getEncoding() << std::endl; std::cout << "SampledField numSamples1: " << sf->getNumSamples1() << std::endl; std::cout << "SampledField numSamples2: " << sf->getNumSamples2() << std::endl; std::cout << "SampledField numSamples3: " << sf->getNumSamples3() << std::endl; const ImageData* id = sf->getImageData(); int* samples = new int[id->getSamplesLength()]; id->getSamples(samples); std::cout << "ImageData samples[0]: " << samples[0] << std::endl; std::cout << "ImageData samplesLen: " << id->getSamplesLength() << std::endl; std::cout << "ImageData dataType: " << id->getDataType() << std::endl; // sampledVolVol from sfGeom. SampledVolume* sv = sfGeom->getSampledVolume(0); std::cout << "SampledVol spatialId: " << sv->getSpatialId() << std::endl; std::cout << "SampledVol domainType: " << sv->getDomainType() << std::endl; std::cout << "SampledVol sampledVal: " << sv->getSampledValue() << std::endl; std::cout << "SampledVol min: " << sv->getMinValue() << std::endl; std::cout << "SampledVol max: " << sv->getMaxValue() << std::endl; } if (gd->isParametricGeometry()) { ParametricGeometry* pGeom = static_cast<ParametricGeometry*>(gd); std::cout << "ParametricGeometry spatialId: " << pGeom->getSpatialId() << std::endl; // parametricObject from pGeom ParametricObject* pObj = pGeom->getParametricObject(0); std::cout << "ParametricObj spatialId: " << pObj->getSpatialId() << std::endl; std::cout << "ParametricObj domain: " << pObj->getDomain() << std::endl; std::cout << "ParametricObj polygonType: " << pObj->getPolygonType() << std::endl; const PolygonObject* po = pObj->getPolygonObject(); int* ptInd = new int[po->getIndicesLength()]; po->getPointIndices(ptInd); std::cout << "PolygonObj ptIndices[0]: " << ptInd[0] << std::endl; std::cout << "PolygonObj indLen: " << po->getIndicesLength() << std::endl; // SpatialPoint from pGeom. SpatialPoint* sp = pGeom->getSpatialPoint(0); std::cout << "SpatialPt spatialId: " << sp->getSpatialId() << std::endl; std::cout << "SpatialPt domain: " << sp->getDomain() << std::endl; std::cout << "SpatialPt coord1: " << sp->getCoord1() << std::endl; std::cout << "SpatialPt coord2: " << sp->getCoord2() << std::endl; std::cout << "SpatialPt coord3: " << sp->getCoord3() << std::endl; } if (gd->isCSGeometry()) { CSGeometry* csGeom = static_cast<CSGeometry*>(gd); std::cout << "CSGeometry spatialId: " << csGeom->getSpatialId() << std::endl; // CSGObject-CSGOperator from csGeom CSGObject* csgo; for (unsigned int i = 0; i < csGeom->getNumCSGObjects(); i++) { csgo = csGeom->getCSGObject(i); std::cout << "CSGObject spatialId: " << csgo->getSpatialId() << std::endl; std::cout << "CSGObject domainType: " << csgo->getDomainType() << std::endl; const CSGNode* csgnode = csgo->getCSGNodeRoot(); if (csgnode->isCSGTransformation()) { CSGTransformation* transf = (CSGTransformation*)csgnode; if (transf->isCSGScale()) { CSGScale* scale = static_cast<CSGScale*>(transf); std::cout << "CSGScale scaleX: " << scale->getScaleX() << std::endl; std::cout << "CSGScale scaleY: " << scale->getScaleY() << std::endl; std::cout << "CSGScale scaleZ: " << scale->getScaleZ() << std::endl; const CSGNode* scaleChild = scale->getChild(); if (scaleChild->isCSGPrimitive()) { CSGPrimitive* prim = (CSGPrimitive*)scaleChild; std::cout << "CSGPrimitive primitiveType: " << prim->getPrimitiveType() << std::endl; } } } if (csgnode->isCSGSetOperator()) { CSGSetOperator* setop = (CSGSetOperator*)(csgnode); std::cout << "CSGSetOperator opType: " << setop->getOperationType() << std::endl; for (unsigned int k = 0; k < setop->getNumCSGNodeChildren(); k++) { CSGNode* csgNode = setop->getCSGNodeChild(k); std::cout << "CSGNode type: " << csgNode->getTypeCode() << std::endl; } } } } } delete document2; }
void writeSpatialSBML() { /* // SBMLNamespaces of SBML Level 3 Version 1 with Spatial Version 1 SBMLNamespaces sbmlns(3,1,"spatial",1); // SpatialPkgNamespaces spatialns(3,1,1); // add Required Elements package namespace sbmlns.addPkgNamespace("req", 1); */ // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. RequiredElementsPkgNamespaces sbmlns(3,1,1); sbmlns.addPkgNamespace("spatial",1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("req")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. // required elements package extention to parameter RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(species1->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialSpeciesRxnPlugin* srplugin; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->getDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setCoordinateIndex(0); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->getAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinateIndex(0); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->getBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType("value"); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); /* // create a parameter Parameter* param = model->createParameter(); param->setId("k_1"); param->setValue(0.24); param->setConstant(true); // create an assignment rule AssignmentRule* assignRule = model->createAssignmentRule(); assignRule->setVariable(species1->getId()); assignRule->setFormula("species2+k_1"); */ /* reqplugin = static_cast<RequiredElementsSBasePlugin*>(assignRule->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(false); */ Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(reaction->getPlugin("spatial")); srplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->getGeometry(); geometry->setCoordinateSystem("XYZ"); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setSpatialId("coordComp1"); coordX->setComponentType("cartesian"); coordX->setSbmlUnit("umeter"); coordX->setIndex(1); BoundaryMin* minX = coordX->createBoundaryMin(); minX->setSpatialId("Xmin"); minX->setValue(0.0); BoundaryMax* maxX = coordX->createBoundaryMax(); maxX->setSpatialId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // required elements package extention to parameter // RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramX->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->getSpatialSymbolReference(); spSymRef->setSpatialId(coordX->getSpatialId()); spSymRef->setType(coordX->getElementName()); DomainType* domainType = geometry->createDomainType(); domainType->setSpatialId("dtype1"); domainType->setSpatialDimensions(3); // Spatial package extension to compartment (mapping compartment with domainType) // required elements package extention to compartment reqplugin = static_cast<RequiredElementsSBasePlugin*>(compartment->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->getCompartmentMapping(); compMapping->setSpatialId("compMap1"); compMapping->setCompartment(compartment->getId()); compMapping->setDomainType(domainType->getSpatialId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setSpatialId("domain1"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("circle"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setSpatialId("domain2"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("square"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setSpatialId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setSpatialId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setSpatialId("analyticVol1"); analyticVol->setDomainType(domainType->getSpatialId()); analyticVol->setFunctionType("squareFn"); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setSpatialId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setSpatialId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("compressed"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setSpatialId("sv_1"); sampledVol->setDomainType(domainType->getSpatialId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); ParametricGeometry* pg = geometry->createParametricGeometry(); pg->setSpatialId("parametricGeom1"); ParametricObject* paramObj = pg->createParametricObject(); paramObj->setSpatialId("po_1"); paramObj->setDomain(domain->getSpatialId()); paramObj->setPolygonType("hexagon"); int ptIndices[5] = {1, 2, 3, 4, 5}; PolygonObject* po = paramObj->createPolygonObject(); po->setPointIndices(ptIndices, 5); SpatialPoint* spPt = pg->createSpatialPoint(); spPt->setSpatialId("sp_1"); spPt->setDomain(domain->getSpatialId()); spPt->setCoord1(1); spPt->setCoord2(2); spPt->setCoord3(3); CSGeometry* csg = geometry->createCSGeometry(); csg->setSpatialId("csGeom1"); CSGObject* csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_1"); csgObj->setDomainType(domainType->getSpatialId()); csgObj->setOrdinal(1); CSGScale* scale = csgObj->createCSGScale(); scale->setScaleX(2.0); scale->setScaleY(3.0); scale->setScaleZ(4.0); CSGPrimitive* prim1 = scale->createCSGPrimitive(); prim1->setPrimitiveType("SOLID_SPHERE"); csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_2"); csgObj->setDomainType(domainType->getSpatialId()); CSGSetOperator* setUnion = csgObj->createCSGSetOperator(); setUnion->setOperationType("UNION"); /* CSGPrimitive* prim = setUnion->createCSGPrimitive(); prim->setPrimitiveType("SOLID_SPHERE"); CSGPrimitive* prim2 = setUnion->createCSGPrimitive(); prim2->setPrimitiveType("SOLID_CONE"); */ CSGPrimitive* prim2 = new CSGPrimitive(3,1,1); prim2->setSpatialId("cone0"); prim2->setPrimitiveType("SOLID_CONE"); CSGTranslation* translatedCone = new CSGTranslation(3,1,1); translatedCone->setSpatialId("translation0"); translatedCone->setTranslateX(2.0); translatedCone->setTranslateY(2.0); translatedCone->setTranslateZ(2.0); translatedCone->setChild(prim2); int n = setUnion->addCSGNodeChild(translatedCone); CSGPrimitive* prim3 = new CSGPrimitive(3,1,1); prim3->setSpatialId("sphere0"); prim3->setPrimitiveType("SOLID_SPHERE"); n = setUnion->addCSGNodeChild(prim3); writeSBML(&document, "spatial_example0.xml"); }
int Ng_TopLevel (ClientData clientData, Tcl_Interp * interp, int argc, tcl_const char *argv[]) { CSGeometry * geometry = dynamic_cast<CSGeometry*> (ng_geometry.get()); if (!geometry) { Tcl_SetResult (interp, err_needscsgeometry, TCL_STATIC); return TCL_ERROR; } int i; /* for (i = 0; i < argc; i++) cout << argv[i] << ", "; cout << endl; */ if (strcmp (argv[1], "getlist") == 0) { stringstream vst; for (i = 0; i < geometry->GetNTopLevelObjects(); i++) { const Solid * sol; const Surface * surf; geometry->GetTopLevelObject (i, sol, surf); if (!surf) vst << "{ " << sol->Name() << " } "; else vst << "{ " << sol->Name() << " " << surf->Name() << " } "; } tcl_const char * valuevar = argv[2]; Tcl_SetVar (interp, valuevar, (char*)vst.str().c_str(), 0); } if (strcmp (argv[1], "set") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); geometry->SetTopLevelObject (sol, surf); } if (strcmp (argv[1], "remove") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); geometry->RemoveTopLevelObject (sol, surf); } if (strcmp (argv[1], "setprop") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; tcl_const char * propvar = argv[4]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); TopLevelObject * tlo = geometry->GetTopLevelObject (sol, surf); if (!tlo) return TCL_OK; char varname[50]; sprintf (varname, "%s(red)", propvar); double red = atof (Tcl_GetVar (interp, varname, 0)); sprintf (varname, "%s(blue)", propvar); double blue = atof (Tcl_GetVar (interp, varname, 0)); sprintf (varname, "%s(green)", propvar); double green = atof (Tcl_GetVar (interp, varname, 0)); tlo -> SetRGB (red, green, blue); sprintf (varname, "%s(visible)", propvar); tlo -> SetVisible (bool(atoi (Tcl_GetVar (interp, varname, 0)))); sprintf (varname, "%s(transp)", propvar); tlo -> SetTransparent (bool(atoi (Tcl_GetVar (interp, varname, 0)))); } if (strcmp (argv[1], "getprop") == 0) { tcl_const char * solname = argv[2]; tcl_const char * surfname = argv[3]; tcl_const char * propvar = argv[4]; Solid * sol = (Solid*)geometry->GetSolid (solname); Surface * surf = (Surface*)geometry->GetSurface (surfname); TopLevelObject * tlo = geometry->GetTopLevelObject (sol, surf); if (!tlo) return TCL_OK; char varname[50], varval[10]; sprintf (varname, "%s(red)", propvar); sprintf (varval, "%lf", tlo->GetRed()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(green)", propvar); sprintf (varval, "%lf", tlo->GetGreen()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(blue)", propvar); sprintf (varval, "%lf", tlo->GetBlue()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(visible)", propvar); sprintf (varval, "%d", tlo->GetVisible()); Tcl_SetVar (interp, varname, varval, 0); sprintf (varname, "%s(transp)", propvar); sprintf (varval, "%d", tlo->GetTransparent()); Tcl_SetVar (interp, varname, varval, 0); } return TCL_OK; }
void WriteTecPlotFormat (const Mesh & mesh, const CSGeometry & geom, const string & filename) { INDEX i; int j, k, e, z; Vec<3> n; INDEX np = mesh.GetNP(); INDEX ne = mesh.GetNE(); INDEX nse = mesh.GetNSE(); ARRAY<int> sn(np); ofstream outfile(filename.c_str()); outfile << "TITLE=\" " << filename << "\"" << endl; // fill hashtable INDEX_3_HASHTABLE<int> face2volelement(ne); for (i = 1; i <= ne; i++) { const Element & el = mesh.VolumeElement(i); INDEX_3 i3; int l; for (j = 1; j <= 4; j++) // loop over faces of tet { l = 0; for (k = 1; k <= 4; k++) if (k != j) { l++; i3.I(l) = el.PNum(k); } i3.Sort(); face2volelement.Set (i3, i); } } for (j = 1; j <= geom.GetNSurf(); j++) /* Flaeche Nummer j */ { for (i = 1; i <= np; i++) sn.Elem(i) = 0; e = 0; for (i = 1; i <= nse; i++) { const Element2d & el = mesh.SurfaceElement(i); if (j == mesh.GetFaceDescriptor (el.GetIndex ()).SurfNr()) { for (k = 1; k <= 3; k++) sn.Elem(el.PNum(k)) = 1; e++; /* e= Anzahl der neuen Elemente */ } } z = 0; for (i = 1; i <= np; i++) if (sn.Elem(i) == 1) sn.Elem(i) = ++z; outfile << "ZONE T=\" Surface " << j << " \", N=" << z << ", E=" << e << ", ET=TRIANGLE, F=FEPOINT" << endl; for (i = 1; i <= np; i++) if (sn.Elem(i) != 0) { n = geom.GetSurface(j) -> GetNormalVector ( mesh.Point(i) ); outfile << mesh.Point(i)(0) << " " /* Knoten Koordinaten */ << mesh.Point(i)(1) << " " << mesh.Point(i)(2) << " " << n(0) << " " << n(1) << " " << n(2) << " " << i << endl; } for (i = 1; i <= nse; i++) { const Element2d & el = mesh.SurfaceElement(i); if (j == mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr()) /* FlaechenKnoten (3) */ outfile << sn.Get(el.PNum(1)) << " " << sn.Get(el.PNum(2)) << " " << sn.Get(el.PNum(3)) << endl; /// Hier soll noch die Ausgabe der Nummer des angrenzenden /// Vol.elements erfolgen ! for (k = 1; k <= nse; k++) { const Element2d & sel = mesh.SurfaceElement(k); INDEX_3 i3; for (j = 1; j <= 3; j++) i3.I(j) = sel.PNum(j); i3.Sort(); //int elind = face2volelement.Get(i3); } } } }