The Range Line example demonstrates how to add a new visual definition to show a line of range between two points.
The Range Line is added as a new tactical graphic object. It is also added to the existing entity fan to show how to modify an existing intervisibility object to add a range calculation from the origin to the outside of the entity fan
using namespace makVrf;
using namespace makVrv;
static DtUnicode theRangeLineDefinition = DtUnicode::fromAscii(
"Range_Line");
static DtUnicode theRangeVertexDefinition = DtUnicode::fromAscii(
"RangedVertex");
static DtUnicode theRangeVertexIVDefinition = DtUnicode::fromAscii(
"RangedIVVertex");
{
{
cats.add("Distance");
entry->
setMenuIcon(
"$(DATA_DIR)/images/overlays/small/line.png");
}
}
{
std::vector<DtVisualizerDefinition*> defs;
set.findVisualizerDefinitions(DtBuiltInSchemas::theDtHATLineSchema().name(), defs);
if (defs.size())
{
defs[0]->findOrCreateLocalAttribute("enabled"));
if (!setValue)
{
setValue =
DtVisualizerAttributeFactory::instance(de).create(DtVisualizerAttributeBool::theTypeInfo().className));
defs[0]->setAttribute("enabled", std::auto_ptr<DtVisualizerAttribute>(setValue));
}
else
{
*setValue = false;
}
}
}
{
if (rangeVertexDef)
{
disableHATLinesFor(de, set);
DtVisualizerAttributeFactory::instance(de).create(DtVisualizerAttributeString::theTypeInfo().className));
attr->
setValue(DtUnicode::fromAscii(
"Main Object"));
rangeDefinition->
setAttribute(
"parent", std::auto_ptr<DtVisualizerAttribute>(attr));
attr =
DtVisualizerAttributeFactory::instance(de).create(DtVisualizerAttributeString::theTypeInfo().className));
attr->
setValue(DtUnicode::fromAscii(
"DtRangeLineTextVisualizer"));
rangeDefinition->
setAttribute(
"type", std::auto_ptr<DtVisualizerAttribute>(attr));
attr =
DtVisualizerAttributeFactory::instance(de).create(DtVisualizerAttributeString::theTypeInfo().className));
attr->
setValue(DtUnicode::fromAscii(
"main_model"));
rangeDefinition->
setAttribute(
"visualtype", std::auto_ptr<DtVisualizerAttribute>(attr));
return rangeDefinition;
}
return 0;
}
{
{
if (!settings->tacticalGraphicsMapper().findMappings(theRangeLineType))
{
settings->tacticalGraphicsMapper().addMapping(theRangeLineType, theRangeLineDefinition);
}
}
{
if (curDef)
{
if (rangeLineDef)
{
disableHATLinesFor(de, set);
std::vector<DtVisualizerDefinition*> defs;
set.findVisualizerDefinitions(DtBuiltInSchemas::theDtShapeVertexSchema().name(), defs);
if (defs.size())
{
defs[0]->findOrCreateLocalAttribute("vertexvisualizerset"));
if (setValue)
{
*setValue = theRangeVertexDefinition;
}
}
}
}
}
{
if (curDef)
{
createRangeVertexDefinition(de, curDef, theRangeVertexDefinition);
}
if (curDef)
{
if (ivVertexDef)
{
if (!setValue)
{
setValue =
DtVisualizerAttributeFactory::instance(de).create(DtVisualizerAttributeBool::theTypeInfo().className));
ivVertexDef->
setAttribute(
"computeToNextPoint", std::auto_ptr<DtVisualizerAttribute>(setValue));
}
else
{
*setValue = true;
}
}
}
}
}
void completeIVSetup(
DtDe* de)
{
if (fanDef)
{
disableHATLinesFor(*de, set);
std::vector<DtVisualizerDefinition*> defs;
set.findVisualizerDefinitions(DtIntervisibilityVertexVisualizer::theTypeInfo().schema.name(), defs);
if (defs.size())
{
defs[0]->findOrCreateLocalAttribute("vertexvisualizerset"));
if (setValue)
{
*setValue = theRangeVertexIVDefinition;
}
}
}
}
{
(
boost::bind(&DtCreateMenuConfigurationLoaded, de, _1, _2));
return true;
}
{
info.
pluginDescription =
"This example shows how to create a new object from scratch and create a new visualizer and updater";
}