Finding an Annotation object's font
Question
There are many changes to ONX_Model
in openNURBS. In prior versions, I was getting the font and its id information for ON_Leader2
with:
ONX_Model model = ...
const ON_Leader2* leader = ...
const ON_Font& font = model.m_font_table[leader->Index()];
How can I do this with the current openNURBS?
Answer
In openNURBS, the the dimension style, or ON_DimStyle
, specifies all appearance properties like the text font, size, and alignment, arrow head shape, and so on. To obtain the font used by an Annotation object, such as an ON_Leader
, you just need to query the object’s effective dimension style.
Example
The following example code can be used to get the ON_Font
used by an ON_Leader
using the openNURBS toolkit:
ONX_Model model = ...
// Create a model geometry interator
ONX_ModelComponentIterator it(model, ON_ModelComponent::Type::ModelGeometry);
const ON_ModelComponent* model_component = nullptr;
for (model_component = it.FirstComponent(); nullptr != model_component; model_component = it.NextComponent())
{
// Get the model geometry
const ON_ModelGeometryComponent* model_geometry = ON_ModelGeometryComponent::Cast(model_component);
if (nullptr == model_geometry)
continue;
// Try getting an annotation leader
const ON_Leader* leader = ON_Leader::Cast(model_geometry->Geometry(nullptr));
if (nullptr == leader)
continue;
// Get the parent dimension style
const ON_ModelComponentReference& parent_dim_style_ref = model.DimensionStyleFromId(leader->DimensionStyleId());
const ON_DimStyle* parent_dim_style = ON_DimStyle::Cast(parent_dim_style_ref.ModelComponent());
if (nullptr == parent_dim_style)
continue;
// Get the effective dimension style
const ON_DimStyle& dim_style = leader->DimensionStyle(*parent_dim_style);
// Get the font
const ON_Font& font = dim_style.Font();
// TODO...
}