コード例 #1
0
void DIALOG_LAYERS_SETUP::OnOkButtonClick( wxCommandEvent& event )
{
    if( testLayerNames() )
    {
        wxString name;

        m_EnabledLayers = getUILayerMask();
        m_Pcb->SetEnabledLayers( m_EnabledLayers );

        /* Ensure enabled layers are also visible
         * This is mainly to avoid mistakes if some enabled
         * layers are not visible when exiting this dialog
         */
        m_Pcb->SetVisibleLayers( m_EnabledLayers );

        for( LSEQ seq = LSET::AllCuMask().Seq();  seq;  ++seq )
        {
            LAYER_ID  layer = *seq;

            if( m_EnabledLayers[layer] )
            {
                name = getLayerName( layer );

                m_Pcb->SetLayerName( layer, name );

                LAYER_T t = (LAYER_T) getLayerTypeIndex( layer );

                m_Pcb->SetLayerType( layer, t );
            }
        }

        EndModal( wxID_OK );
    }
}
コード例 #2
0
ファイル: mapkmlrenderer.cpp プロジェクト: codeforeurope/gim
xmlNodePtr KmlRenderer::createPlacemarkNode(xmlNodePtr parentNode, char *styleUrl)
{
    xmlNodePtr placemarkNode = xmlNewChild(parentNode, NULL, BAD_CAST "Placemark", NULL);
    /*always add a name. It will be replaced by a text value if available*/
    char tmpid[100];
    char *stmp=NULL, *layerName=NULL;
    if (CurrentShapeName && strlen(CurrentShapeName)>0)
    {
        xmlNewChild(placemarkNode, NULL, BAD_CAST "name", BAD_CAST CurrentShapeName);
    }
    else
    {
        sprintf(tmpid, ".%d", CurrentShapeIndex);
        layerName = getLayerName(currentLayer);
        stmp = msStringConcatenate(stmp, layerName);
        stmp = msStringConcatenate(stmp, tmpid);
        xmlNewChild(placemarkNode, NULL, BAD_CAST "name", BAD_CAST stmp);
    }
    msFree(layerName);
    msFree(stmp);
    if (styleUrl)
      xmlNewChild(placemarkNode, NULL, BAD_CAST "styleUrl", BAD_CAST styleUrl);

    return placemarkNode;
}
コード例 #3
0
void DXFWriterNodeVisitor::processGeometry(osg::Geometry* geo, osg::Matrix& m)
{


    // We only want to create a new layer for geometry with something to draw
    if (geo->getVertexArray() && geo->getVertexArray()->getNumElements() ) {

        if ( _firstPass ) {
            // Must have unique layer names
            _layer._name = getLayerName( geo->getName().empty() ? geo->getParent(0)->getName() : geo->getName() );
            OSG_DEBUG << "adding Layer " << _layer._name  << std::endl;

            // if single colour include in header
            osg::Array::Binding colorBinding = osg::getBinding(geo->getColorArray());
            if ( osg::Array::BIND_OVERALL == colorBinding ) {
                _layer._color = _acadColor.findColor(getNodeRGB(geo)); // per layer color
            } else if ( osg::Array::BIND_OFF== colorBinding ) {
                _layer._color = 0xff; // use white - or can we easily lookup in texture?
            } else {
                _layer._color = 0;  // per point color
            }
            _layers.push_back(_layer);

        } else {
            _layer = _layers[_count++];
            OSG_DEBUG << "writing Layer " << _layer._name  << std::endl;

            processStateSet(_currentStateSet.get());

            if ( geo->getNumPrimitiveSets() ) {
                for(unsigned int i = 0; i < geo->getNumPrimitiveSets(); ++i)
                {
                    osg::PrimitiveSet* ps = geo->getPrimitiveSet(i);
                    DxfPrimitiveIndexWriter pif(_fout, geo,_layer,_acadColor,m,_writeTriangleAs3DFace);
                    ps->accept(pif);
                }
            } else {
                // Is array visitor necessary for only dealing with vertex arrays?
                //processArray(geo->getVertexArray(),  _layer,m);
                if ( geo->getVertexArray() ) {
                    osg::Vec3Array* data=static_cast<osg::Vec3Array*>(geo->getVertexArray());
                    for (unsigned int ii=0;ii<data->getNumElements();ii++)
                    {
                        osg::Vec3 point = data->at(ii) * m;
                        _fout << "0 \nVERTEX\n 8\n"<<_layer._name<<"\n";
                        if ( _layer._color ) {
                            _fout << "62\n"<<_layer._color<<"\n";
                        } else {
                            _fout << "62\n"<<_acadColor.findColor(getNodeRGB(geo,ii))<<"\n";
                        }
                        _fout<<" 10\n"<<point.x()<<"\n 20\n"<<point.y()<<"\n 30\n"<<point.z()<<"\n";
                    }
                }
            }
        }
    }
}
コード例 #4
0
PopupMenu CtrlrPanelCanvas::getLayerMenu()
{
    PopupMenu m;

    for (int i=0; i<getNumLayers(); i++)
    {
        m.addItem (i+4096, getLayerName(i));
    }
    return (m);
}
コード例 #5
0
ファイル: GLDisplay.cpp プロジェクト: dreamfrog/robocup
void GLDisplay::setPrimaryDisplay(int displayID, QColor drawingColour)
{
    primaryLayer->primary = false;
    primaryLayer->enabled = false;
    primaryLayer = &overlays[displayID];
    primaryLayer->primary = true;
    primaryLayer->enabled = true;
    primaryLayer->colour = drawingColour;
    setWindowTitle(getLayerName(displayID) + " Image");
    updateGL();
    return;
}
コード例 #6
0
ファイル: TiledMapLoader.cpp プロジェクト: kawaiSky/avalon
void TiledMapLoader::loadGidFactories(cocos2d::TMXTiledMap& map)
{
    Value* info = nullptr;

    for (auto& child : map.getChildren()) {
        auto mapLayer = dynamic_cast<TMXLayer*>(child);
        if (!mapLayer) {
            continue;
        }

        for (int x = 0; x < map.getMapSize().width; ++x) {
            for (int y = 0; y < map.getMapSize().height; ++y) {

                auto currentGID = mapLayer->getTileGIDAt({static_cast<float>(x), static_cast<float>(y)});
                if (!gidFactories.count(currentGID)) {
                    continue;
                }

                map.getPropertiesForGID(currentGID, &info);
                ValueMap data;

                if (info) {
                    data = info->asValueMap();
                }

                if (!data.count("gid")) data["gid"] = Value(static_cast<int>(currentGID));
                if (!data.count("x")) data["x"] = Value(static_cast<float>(x));
                if (!data.count("y")) data["y"] = Value(static_cast<float>(y));

                Configuration config{data, mapLayer->getLayerName(), map, box2dContainer};
                for (auto& callback : gidFactories.at(currentGID)) {
                    callback(config);
                }
            }
        }
    }
}
コード例 #7
0
ファイル: ConcatLayer.cpp プロジェクト: NCUT-MMALab/Mocha
	string ConcatLayer::convet2CaffeFormat()
	{
		string layerStrStart = "layer\n{\n";
		string layerStrEnd = "}";

		string nameStrStart = "\tname: \"";
		string nameStrEnd = "\"\n";

		string typeStrStart = "\ttype: \"";
		string typeStrEnd = "\"\n";

		string topStrStart = "\ttop: \"";
		string topStrEnd = "\"\n";

		string bottomStrStart = "\tbottom: \"";
		string bottomStrEnd = "\"\n";

		string concatParamStrStart = "\tconcat_param\n\t{\n";
		string concatParamStrEnd = "\t}\n";

		string axisStrStart = "\t\taxis: ";
		string axisStrEnd = "\n";

		string concatDimStrStart = "\t\tconcat_dim: ";
		string concatDimStrEnd = "\n";

		string ignorelabelStrStart = "\t\tignore_label: ";
		string ignorelabelStrEnd = "\n";

		string phaseStrStart = "\tinclude:\n\t{\n";		
		string phaseStrEnd = "\t}\n";

		string phaseStateStrStart = "\t\tphase: ";
		string phaseStateStrEnd = "\n";

		string outStr = layerStrStart + 
						nameStrStart  + getLayerName()    + nameStrEnd + 
						typeStrStart  + getLayerType() + typeStrEnd;

		for(size_t i = 0; i < mTops->size(); i++)
		{
			outStr = outStr + topStrStart + (*mTops)[i] + topStrEnd;
		}

		for(size_t i = 0; i < mBottoms->size(); i++)
		{
			outStr = outStr + bottomStrStart + (*mBottoms)[i] + bottomStrEnd;
		}

		outStr = outStr + 
			     concatParamStrStart ;
		if(((ConcatParam*)mParam)->mAxis != 1)
		{
			outStr +=  axisStrStart + to_string(getAxis()) + axisStrEnd;
		}

		if(((ConcatParam*)mParam)->mConcatDim != -1)
		{
			outStr += concatDimStrStart + to_string(getConcatDim()) + concatDimStrEnd;
		}				 
		outStr += concatParamStrEnd;

		if (mPhase != Phase::BOTH)
		{
			outStr += phaseStrStart + phaseStateStrStart;

			if (mPhase == Phase::TRAIN)
			{
				outStr += "TRAIN";
			}
			else if (mPhase == Phase::TEST)
			{
				outStr += "TEST";
			}

			outStr += phaseStateStrEnd + phaseStrEnd;
		}
		
		outStr += layerStrEnd;

		return outStr;
	}
コード例 #8
0
ファイル: labelposition.cpp プロジェクト: tqhien/Quantum-GIS
void LabelPosition::validateCost()
{
    if ( cost >= 1 )
    {
        std::cout << " Warning: lp->cost == " << cost << " (from feat: " << feature->getUID() << "/" << getLayerName() << ")" << std::endl;
        cost -= int ( cost ); // label cost up to 1
    }
}
コード例 #9
0
bool DIALOG_LAYERS_SETUP::testLayerNames()
{
    std::vector<wxString>    names;

    wxTextCtrl*  ctl;

    for( LSEQ seq = LSET::AllCuMask().Seq();  seq;  ++seq )
    {
        LAYER_ID layer = *seq;

        // we _can_ rely on m_EnabledLayers being current here:
        if( !m_EnabledLayers[layer] )
            continue;

        wxString name = getLayerName( layer );

        //D(printf("name[%d]=%s\n", layer, TO_UTF8(name) );)

        ctl = (wxTextCtrl*) getName( layer );

        // check name for legality.
        // 1) cannot be blank.
        // 2) cannot have blanks.
        // 3) cannot have " chars
        // 4) cannot be 'signal'
        // 5) must be unique.
        // 6) cannot have illegal chars in filenames ( some filenames are built from layer names )
        static const wxString badchars( wxT("%$\" /\\") );

        if( !name )
        {
            DisplayError( this, _("Layer name may not be empty" ) );
            ctl->SetFocus();    // on the bad name
            return false;
        }

        if( hasOneOf( name, badchars ) )
        {
            DisplayError( this, _("Layer name has an illegal character, one of: '") + badchars + wxT("'") );
            ctl->SetFocus();    // on the bad name
            return false;
        }

        if( name == wxT("signal") )
        {
            DisplayError( this, _("'signal' is a reserved layer name") );
            ctl->SetFocus();    // on the bad name
            return false;
        }

        for( std::vector<wxString>::iterator it = names.begin();  it != names.end();  ++it )
        {
            if( name == *it )
            {
                DisplayError( this, _("Layer name is a duplicate of another") );
                ctl->SetFocus();    // on the bad name
                return false;
            }
        }

        names.push_back( name );
    }

    return true;
}
コード例 #10
0
xmlNodePtr KmlRenderer::createGroundOverlayNode(xmlNodePtr parentNode, char *imageHref, layerObj *layer)
{
  /*
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
    <GroundOverlay>
    <name>GroundOverlay.kml</name>
    <color>7fffffff</color>
    <drawOrder>1</drawOrder>
    <Icon>
    <href>http://www.google.com/intl/en/images/logo.gif</href>
    <refreshMode>onInterval</refreshMode>
    <refreshInterval>86400</refreshInterval>
    <viewBoundScale>0.75</viewBoundScale>
    </Icon>
    <LatLonBox>
    <north>37.83234</north>
    <south>37.832122</south>
    <east>-122.373033</east>
    <west>-122.373724</west>
    <rotation>45</rotation>
    </LatLonBox>
    </GroundOverlay>
    </kml>
  */
  char  layerHexColor[32];
  xmlNodePtr groundOverlayNode = xmlNewChild(parentNode, NULL, BAD_CAST "GroundOverlay", NULL);
  char *layerName = getLayerName(layer);
  xmlNewChild(groundOverlayNode, NULL, BAD_CAST "name", BAD_CAST layerName);
  if (layer->compositer && layer->compositer->opacity > 0 && layer->compositer->opacity < 100) {
    sprintf(layerHexColor, "%02xffffff", (unsigned int)MS_NINT(layer->compositer->opacity*2.55));
    xmlNewChild(groundOverlayNode, NULL, BAD_CAST "color", BAD_CAST layerHexColor);
  } else
    xmlNewChild(groundOverlayNode, NULL, BAD_CAST "color", BAD_CAST "ffffffff");
  char stmp[20];
  sprintf(stmp, "%d",layer->index);
  xmlNewChild(groundOverlayNode, NULL, BAD_CAST "drawOrder", BAD_CAST stmp);

  if (imageHref) {
    xmlNodePtr iconNode = xmlNewChild(groundOverlayNode, NULL, BAD_CAST "Icon", NULL);
    xmlNewChild(iconNode, NULL, BAD_CAST "href", BAD_CAST imageHref);
  }

  char crdStr[64];
  rectObj mapextent;
  if (map->gt.need_geotransform == MS_TRUE)
    mapextent = currentLayer->map->saved_extent;
  else
    mapextent = currentLayer->map->extent;

  xmlNodePtr latLonBoxNode = xmlNewChild(groundOverlayNode, NULL, BAD_CAST "LatLonBox", NULL);
  sprintf(crdStr, "%.8f", mapextent.maxy);
  xmlNewChild(latLonBoxNode, NULL, BAD_CAST "north", BAD_CAST crdStr);

  sprintf(crdStr, "%.8f", mapextent.miny);
  xmlNewChild(latLonBoxNode, NULL, BAD_CAST "south", BAD_CAST crdStr);

  sprintf(crdStr, "%.8f", mapextent.minx);
  xmlNewChild(latLonBoxNode, NULL, BAD_CAST "west", BAD_CAST crdStr);

  sprintf(crdStr, "%.8f", mapextent.maxx);
  xmlNewChild(latLonBoxNode, NULL, BAD_CAST "east", BAD_CAST crdStr);

  xmlNewChild(latLonBoxNode, NULL, BAD_CAST "rotation", BAD_CAST "0.0");

  return groundOverlayNode;
}
コード例 #11
0
int KmlRenderer::startNewLayer(imageObj *img, layerObj *layer)
{
  char *layerName=NULL;
  const char *value=NULL;

  LayerNode = xmlNewNode(NULL, BAD_CAST "Folder");

  layerName = getLayerName(layer);
  xmlNewChild(LayerNode, NULL, BAD_CAST "name", BAD_CAST layerName);
  msFree(layerName);

  const char *layerVisibility = layer->status != MS_OFF ? "1" : "0";
  xmlNewChild(LayerNode, NULL, BAD_CAST "visibility", BAD_CAST layerVisibility);

  const char *layerDsiplayFolder = msLookupHashTable(&(layer->metadata), "kml_folder_display");
  if (layerDsiplayFolder == NULL)
    layerDsiplayFolder = msLookupHashTable(&(layer->map->web.metadata), "kml_folder_display");
  if (!layerDsiplayFolder || strlen(layerDsiplayFolder)<=0) {
    xmlNewChild(LayerNode, NULL, BAD_CAST "styleUrl", BAD_CAST "#LayerFolder_check");
  }

  else {
    if (strcasecmp(layerDsiplayFolder, "checkHideChildren") == 0)
      xmlNewChild(LayerNode, NULL, BAD_CAST "styleUrl", BAD_CAST "#LayerFolder_checkHideChildren");
    else if (strcasecmp(layerDsiplayFolder, "checkOffOnly") == 0)
      xmlNewChild(LayerNode, NULL, BAD_CAST "styleUrl", BAD_CAST "#LayerFolder_checkOffOnly");
    else if (strcasecmp(layerDsiplayFolder, "radioFolder") == 0)
      xmlNewChild(LayerNode, NULL, BAD_CAST "styleUrl", BAD_CAST "#LayerFolder_radioFolder");
    else
      xmlNewChild(LayerNode, NULL, BAD_CAST "styleUrl", BAD_CAST "#LayerFolder_check");
  }


  /*Init few things on the first layer*/
  if (FirstLayer) {
    FirstLayer = MS_FALSE;
    map = layer->map;

    if (layer->map->mappath)
      snprintf(MapPath, sizeof(MapPath), "%s", layer->map->mappath);

    /*First rendered layer - check mapfile projection*/
    checkProjection(layer->map);

    /*check for image path and image url*/
    if (layer->map->debug && (layer->map->web.imageurl == NULL ||   layer->map->web.imagepath == NULL))
      msDebug("KmlRenderer::startNewLayer: imagepath and imageurl should be set in the web object\n");


    /*map rect for ground overlay*/
    MapExtent = layer->map->extent;
    MapCellsize = layer->map->cellsize;
    BgColor = layer->map->imagecolor;

    xmlNewChild(DocNode, NULL, BAD_CAST "name", BAD_CAST layer->map->name);
    aggFormat = msSelectOutputFormat( layer->map, "png24");
    aggFormat->transparent = MS_TRUE;

  }

  currentLayer = layer;

  if (!msLayerIsOpen(layer)) {
    if (msLayerOpen(layer) != MS_SUCCESS) {
      msSetError(MS_MISCERR, "msLayerOpen failed", "KmlRenderer::startNewLayer" );
      return MS_FAILURE;
    }
  }

  /*pre process the layer to set things that make sense for kml output*/
  if (img)
    processLayer(layer, img->format);
  else
    processLayer(layer, NULL);

  if (msLookupHashTable(&layer->metadata, "kml_description"))
    pszLayerDescMetadata = msLookupHashTable(&layer->metadata, "kml_description");
  else if (msLookupHashTable(&layer->metadata, "ows_description"))
    pszLayerDescMetadata = msLookupHashTable(&layer->metadata, "ows_description");

  value=msLookupHashTable(&layer->metadata, "kml_include_items");
  if (!value)
    value=msLookupHashTable(&layer->metadata, "ows_include_items");
  if (value)
    papszLayerIncludeItems = msStringSplit(value, ',', &nIncludeItems);

  value=msLookupHashTable(&layer->metadata, "kml_exclude_items");
  if (!value)
    value=msLookupHashTable(&layer->metadata, "ows_exclude_items");
  if (value)
    papszLayerExcludeItems = msStringSplit(value, ',', &nExcludeItems);


  if (msLookupHashTable(&layer->metadata, "kml_name_item"))
    pszLayerNameAttributeMetadata = msLookupHashTable(&layer->metadata, "kml_name_item");

  /*get all attributes*/
  if(msLayerWhichItems(layer, MS_TRUE, NULL) != MS_SUCCESS) {
    return MS_FAILURE;
  }


  NumItems = layer->numitems;
  if (NumItems) {
    Items = (char **)msSmallCalloc(NumItems, sizeof(char *));
    for (int i=0; i<NumItems; i++)
      Items[i] = msStrdup(layer->items[i]);
  }


  const char* elevationAttribute = msLookupHashTable(&layer->metadata, "kml_elevation_attribute");
  if( elevationAttribute ) {
    mElevationFromAttribute = true;
    for( int i = 0; i < layer->numitems; ++i ) {
      if( strcasecmp( layer->items[i], elevationAttribute ) == 0 ) {
        mElevationAttributeIndex = i;
      }
    }
  }

  setupRenderingParams(&layer->metadata);
  return MS_SUCCESS;
}
コード例 #12
0
ファイル: DataLayer.cpp プロジェクト: NCUT-MMALab/Mocha
	string DataLayer::convet2CaffeFormat()
	{
		string layerStrStart = "layer\n{\n";
		string layerStrEnd = "}";

		string nameStrStart = "\tname: \"";
		string nameStrEnd = "\"\n";

		string typeStrStart = "\ttype: \"";
		string typeStrEnd = "\"\n";

		string topStrStart = "\ttop: \"";
		string topStrEnd = "\"\n";

		string bottomStrStart = "\tbottom: \"";
                string bottomStrEnd = "\"\n";

                string transformParamStrStart = "\ttransform_param\n\t{\n";
                string transformParamStrEnd ="\t}\n";

		string dataParamStrStart = "\tdata_param\n\t{\n";
		string dataParamStrEnd ="\t}\n";

		string SourceStrStart = "\t\tsource: ";
		string SourceStrEnd = "\n";

		string batchSizeStrStart = "\t\tbatch_size: ";
		string batchSizeStrEnd = "\n";

		string randSkipStrStart = "\t\trand_skip: ";
		string randSkipStrEnd = "\n";

		string backendStrStart = "\t\tbackend: ";
		string backendStrEnd = "\n";

		string ScaleStrStart = "\t\tscale: ";
		string ScaleStrEnd = "\n";

		string MeanFileStrStart = "\t\tmean_file: ";
		string MeanFileStrEnd = "\n";

		string CropSizeStrStart = "\t\tcrop_size: ";
		string CropSizeStrEnd = "\n";

		string MirrorStrStart = "\t\tmirror: ";
		string MirrorStrEnd = "\n";

		string ForceEncodeColorStrStart = "\t\tforce_encoded_color: ";
		string ForceEncodeColorStrEnd = "\n";

                string PrefetchStrStart =  "\t\tprefetch: ";
                string PrefetchStrEnd = "\n";

		string phaseStrStart = "\tinclude:\n\t{\n";		
		string phaseStrEnd = "\t}\n";

		string phaseStateStrStart = "\t\tphase: ";
		string phaseStateStrEnd = "\n";

		string outStr =  layerStrStart + 
						 nameStrStart + getLayerName() + nameStrEnd + 
						 typeStrStart + getLayerType() + typeStrEnd;

		for(size_t i = 0; i < mTops->size(); i++)
		{
			outStr = outStr + topStrStart + (*mTops)[i] + topStrEnd;
		}

		for(size_t i = 0; i < mBottoms->size(); i++)
		{
			outStr = outStr + bottomStrStart + (*mBottoms)[i] +bottomStrEnd;
		}

                outStr += transformParamStrStart;

                if(((DataParam*)mParam)->mScale != 1)
                {
                        outStr += ScaleStrStart + to_string(getScale()) + ScaleStrEnd;
                }

                if (getMeanfile() != "")
                {
                        outStr += MeanFileStrStart + "\"" + getMeanfile() + "\"" + MeanFileStrEnd;
                }

                if(((DataParam*)mParam)->mCropsize != 0)
                {
                        outStr += CropSizeStrStart + to_string(getCropsize()) + CropSizeStrEnd;
                }

                if(((DataParam*)mParam)->mMirror != false)
                {
                        outStr += MirrorStrStart + "true" + MirrorStrEnd;
                }
                outStr += transformParamStrEnd;

		outStr += dataParamStrStart;

                if (getSource() != "")
		{
			outStr += SourceStrStart + "\"" + getSource() + "\"" + SourceStrEnd;
		}

		outStr +=batchSizeStrStart + to_string(getBatchSize()) + batchSizeStrEnd;

		if(((DataParam*)mParam)->mRandSkip != 0)
		{
			outStr += randSkipStrStart + to_string(getRandSkip()) + randSkipStrEnd;
		}

		if(((DataParam*)mParam)->mBackend != DB::LEVELDB)
		{
			switch (((DataParam*)mParam)->mBackend)
			{
			case DB::LEVELDB:
					outStr += backendStrStart + "LEVELDB" + backendStrEnd;
					break;

			case DB::LMDB:
					outStr += backendStrStart + "LMDB" + backendStrEnd;
					break;
			}
		}

		if(((DataParam*)mParam)->mForceEncodedcolor != false)
		{
			outStr += ForceEncodeColorStrStart + "true" + ForceEncodeColorStrEnd;
		}

                if(((DataParam*)mParam)->mPrefetch != 4)
                {
                        outStr += PrefetchStrStart + to_string(getPrefetch())  + PrefetchStrEnd;
                }

		outStr += dataParamStrEnd;

		if (mPhase != Phase::BOTH)
		{
			outStr += phaseStrStart + phaseStateStrStart;

			if (mPhase == Phase::TRAIN)
			{
				outStr += "TRAIN";
			}
			else if (mPhase == Phase::TEST)
			{
				outStr += "TEST";
			}

			outStr += phaseStateStrEnd + phaseStrEnd;
		}
		
		outStr += layerStrEnd;

		return outStr;
	}