Units / geom
geom.attribute green
- Layer
- 1
- Upstream lines
- 920
- Functions
- 90
- Rust module
geom::attribute
Source: crates/solidcore/src/geom/attribute.rs
Upstream: source/SMLib/inc/SmAttribute.h, source/SMLib/src/SmAttribute.cpp
Notes
GREEN: PR #80 region lookup integration; 2029/2029 native comparisons, zero failures/deferrals, max_rel_err=0; all 2029 perturbations detected. merge_with_regions resolves actual typed regions and optional B-rep identities through RegionLookup; the legacy merge entry point explicitly requires context for merge-region attributes. Earlier port notes: 90 fns; largest: SmMergeRegionAttribute::Merge, SmAttribute::Split, SmColorAttribute::PropagateRegionsThroughBooleans, SmAttributeData::ReadIndexedAttributesFromDB; cycle back-edges (call into later units; stub or co-port): geom.a_object(14), geom.object(11), query.brep(6), geom.vector3d(4), query.tess(4), topology.shell(3), curve.composite_curve_p1(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; PARTIAL: difftest 2029 cases (29 fixture + 2000 generated), 1991 pass bit-identical, 38 deferred (topology.shell 38: SmRegion::GetBrep in SmMergeRegionAttribute::Merge); 200k-seed run clean; SmAObject attribute-list methods co-ported into AttributeStore (CO-PORT(geom.a_object)), SmObject::IsKindOf co-ported (geom.object); region_type::VOID / INFINITE arms of merge-with-regions (PR #154 review): script ops 32 SetIsVoid(0/1/2) and 33 MakeInfinite (the object becomes the infinite region of a fresh SmBrep; skipped once any attribute exists) mirrored by RegionScene::set_is_void / make_infinite; generated cases that create merge-region attributes first draw those ops, so the add_region classification is compared on the void, UNSURE and infinite sides (mutating the INFINITE arm fails generated cases). Missing region context is Unported(topology.shell), not InvalidInput
Difftest
- Cases
- 2,029
- Passed
- 2,029
- Deferred
- 0
- Failed
- 0
- Both errored
- 0
- Max rel. error
- 0.0
- Tolerance
- 1e-09 rel.
- Seeds
- 16
Blocked by
Nothing: no deferred cases.
Report JSON (per-case results)
Dependencies
Depends on: topology.database_io green
Soft dependencies: none
Dependents: blend.fillet_executive_p1 todo boolean.merge_p1 partial boolean.merge_p4 todo curve.composite_curve_p1 green geom.a_object partial query.brep claimed query.tess partial topology.brep_data partial
Soft dependents: blend.fillet_corner_p1 todo blend.fillet_executive_p3 todo blend.fillet_geom_p4 todo boolean.merge_p3 todo geom.object partial mass.integrator partial sweep.topology_sweep claimed
Upstream functions
| Upstream function | Defined at | Lines | Rust (from the file header) |
|---|---|---|---|
SmAttribute::SmAttribute | SmAttribute.h:634 | 10 | [Attribute] |
SmAttribute::SmAttribute | SmAttribute.h:646 | 5 | [Attribute] |
SmAttribute::~SmAttribute | SmAttribute.h:653 | 19 | [AttributeStore::destroy] |
SmAttribute::MakeCopy | SmAttribute.h:674 | 2 | [Attribute::make_copy] |
SmAttribute::GetAttributeID | SmAttribute.h:689 | 1 | [Attribute::attribute_id] / [Attribute::behavior] |
SmAttribute::GetBehavior | SmAttribute.h:690 | 1 | [Attribute::attribute_id] / [Attribute::behavior] |
SmAttribute::IsPropagatedThroughBooleans | SmAttribute.h:736 | 2 | [Attribute::is_propagated_through_booleans] |
SmAttribute::PropagateRegionsThroughBooleans | SmAttribute.h:739 | 7 | [AttributeStore::propagate_regions_through_booleans] |
SmAttribute::GetType | SmAttribute.h:796 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmAttribute::GetTypeString | SmAttribute.h:796 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmGenericAttribute::~SmGenericAttribute | SmAttribute.h:838 | 1 | |
SmGenericAttribute::MakeCopy | SmAttribute.h:841 | 5 | [Attribute::make_copy] |
SmGenericAttribute::GetType | SmAttribute.h:885 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmGenericAttribute::GetTypeString | SmAttribute.h:885 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmLongAttribute::SmLongAttribute | SmAttribute.h:900 | 4 | [AttributeValue] |
SmLongAttribute::~SmLongAttribute | SmAttribute.h:912 | 1 | |
SmLongAttribute::MakeCopy | SmAttribute.h:915 | 2 | [Attribute::make_copy] |
SmLongAttribute::GetValue | SmAttribute.h:925 | 1 | [Attribute::long_value] |
SmLongAttribute::GetType | SmAttribute.h:938 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmLongAttribute::GetTypeString | SmAttribute.h:938 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerAttribute::SmPointerAttribute | SmAttribute.h:958 | 4 | [Attribute::pointer] |
SmPointerAttribute::SmPointerAttribute | SmAttribute.h:963 | 4 | [Attribute::pointer] |
SmPointerAttribute::~SmPointerAttribute | SmAttribute.h:969 | 1 | |
SmPointerAttribute::MakeCopy | SmAttribute.h:972 | 2 | [Attribute::make_copy] |
SmPointerAttribute::GetType | SmAttribute.h:988 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerAttribute::GetTypeString | SmAttribute.h:988 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerListAttribute::SmPointerListAttribute | SmAttribute.h:1010 | 3 | [Attribute::pointer_list] |
SmPointerListAttribute::~SmPointerListAttribute | SmAttribute.h:1015 | 1 | |
SmPointerListAttribute::MakeCopy | SmAttribute.h:1018 | 2 | [Attribute::make_copy] |
SmPointerListAttribute::GetType | SmAttribute.h:1033 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerListAttribute::GetTypeString | SmAttribute.h:1033 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmVector3dAttribute::SmVector3dAttribute | SmAttribute.h:1049 | 4 | [Attribute::vector3d] |
SmVector3dAttribute::~SmVector3dAttribute | SmAttribute.h:1060 | 1 | |
SmVector3dAttribute::MakeCopy | SmAttribute.h:1063 | 2 | [Attribute::make_copy] |
SmVector3dAttribute::SetValue | SmAttribute.h:1073 | 1 | [Attribute::vector3d_value] / [Attribute::set_vector3d_value] |
SmVector3dAttribute::GetValue | SmAttribute.h:1075 | 1 | [Attribute::vector3d_value] / [Attribute::set_vector3d_value] |
SmVector3dAttribute::GetType | SmAttribute.h:1086 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmVector3dAttribute::GetTypeString | SmAttribute.h:1086 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmMergeRegionAttribute::SmMergeRegionAttribute | SmAttribute.h:1132 | 9 | [region_type] |
SmMergeRegionAttribute::~SmMergeRegionAttribute | SmAttribute.h:1143 | 1 | |
SmMergeRegionAttribute::MakeCopy | SmAttribute.h:1146 | 2 | [Attribute::make_copy] |
SmMergeRegionAttribute::GetThisRegions | SmAttribute.h:1170 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::GetThisRegionTypes | SmAttribute.h:1171 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::GetThisRegion | SmAttribute.h:1172 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::GetOtherRegions | SmAttribute.h:1176 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::GetOperation | SmAttribute.h:1181 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::SetOperation | SmAttribute.h:1182 | 1 | [MergeRegionData] |
SmMergeRegionAttribute::HasThisInfiniteRegion | SmAttribute.h:1190 | 9 | [MergeRegionData::has_this_infinite_region] / [MergeRegionData::has_other_infinite_region] |
SmMergeRegionAttribute::HasOtherInfiniteRegion | SmAttribute.h:1201 | 9 | [MergeRegionData::has_this_infinite_region] / [MergeRegionData::has_other_infinite_region] |
SmMergeRegionAttribute::GetType | SmAttribute.h:1240 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmMergeRegionAttribute::GetTypeString | SmAttribute.h:1240 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmTagAttribute::~SmTagAttribute | SmAttribute.h:1305 | 1 | |
SmTagAttribute::MakeCopy | SmAttribute.h:1308 | 2 | [Attribute::make_copy] |
SmTagAttribute::GetType | SmAttribute.h:1347 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmTagAttribute::GetTypeString | SmAttribute.h:1347 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmColorAttribute::SmColorAttribute | SmAttribute.h:1398 | 5 | [Attribute::color] |
SmColorAttribute::~SmColorAttribute | SmAttribute.h:1409 | 1 | |
SmColorAttribute::MakeCopy | SmAttribute.h:1412 | 2 | [Attribute::make_copy] |
SmColorAttribute::IsPropagatedThroughBooleans | SmAttribute.h:1417 | 1 | [Attribute::is_propagated_through_booleans] |
SmColorAttribute::GetType | SmAttribute.h:1429 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmColorAttribute::GetTypeString | SmAttribute.h:1429 | 1 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmAttributeData::ReadIndexedAttributesFromDB | SmAttribute.cpp:210 | 80 | [AttributeStore::read_indexed_attributes_from_db] |
SmAttribute::Split | SmAttribute.cpp:377 | 88 | [AttributeStore::split] |
SmAttribute::Copy | SmAttribute.cpp:476 | 47 | [AttributeStore::copy] |
SmAttribute::Merge | SmAttribute.cpp:531 | 47 | append_new_regions (private) |
SmAttribute::Coincident | SmAttribute.cpp:588 | 50 | [AttributeStore::coincident] |
SmAttribute::Edit | SmAttribute.cpp:645 | 4 | [AttributeStore::edit] / [AttributeStore::destruction] |
SmAttribute::Destruction | SmAttribute.cpp:658 | 4 | [AttributeStore::edit] / [AttributeStore::destruction] |
SmMergeRegionAttribute::SmMergeRegionAttribute | SmAttribute.cpp:782 | 25 | [region_type] |
SmMergeRegionAttribute::Merge | SmAttribute.cpp:816 | 126 | append_new_regions (private) |
SmMergeRegionAttribute::HasAnySolid | SmAttribute.cpp:949 | 20 | [MergeRegionData::has_any_solid] |
SmMergeRegionAttribute::HasAnyOtherPropagatedAttribs | SmAttribute.cpp:1006 | 26 | [AttributeStore::has_any_other_propagated_attribs] |
SmMergeRegionAttribute::SetRegions | SmAttribute.cpp:1038 | 23 | [MergeRegionData::set_regions] |
SmColorAttribute::PropagateRegionsThroughBooleans | SmAttribute.cpp:1101 | 81 | [AttributeStore::propagate_regions_through_booleans] |
SmAttribute::IsKindOf | SmAttribute.cpp:1187 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmLongAttribute::IsKindOf | SmAttribute.cpp:1226 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerAttribute::IsKindOf | SmAttribute.cpp:1268 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmMergeRegionAttribute::IsKindOf | SmAttribute.cpp:1309 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmPointerListAttribute::IsKindOf | SmAttribute.cpp:1383 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmVector3dAttribute::IsKindOf | SmAttribute.cpp:1440 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmColorAttribute::IsKindOf | SmAttribute.cpp:1475 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmGenericAttribute::SmGenericAttribute | SmAttribute.cpp:1541 | 13 | [Attribute::generic] |
SmAttribute::RemoveUser | SmAttribute.cpp:1577 | 36 | [AttributeStore::add_user] / [AttributeStore::remove_user] / [AttributeStore::users] |
SmAttribute::fromClearAttributes | SmAttribute.cpp:1635 | 12 | [AttributeStore::from_clear_attributes] |
SmAttribute::AddUser | SmAttribute.cpp:1654 | 11 | [AttributeStore::add_user] / [AttributeStore::remove_user] / [AttributeStore::users] |
SmAttribute::GetUsers | SmAttribute.cpp:1671 | 10 | [AttributeStore::add_user] / [AttributeStore::remove_user] / [AttributeStore::users] |
SmTagAttribute::SmTagAttribute | SmAttribute.cpp:1687 | 14 | [Attribute::tag] |
SmTagAttribute::SmTagAttribute | SmAttribute.cpp:1708 | 14 | [Attribute::tag] |
SmGenericAttribute::IsKindOf | SmAttribute.cpp:1871 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
SmTagAttribute::IsKindOf | SmAttribute.cpp:1938 | 4 | [Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] |
Module file-header table (45 rows)
| Rust | Upstream |
|---|---|
[Attribute] | SmAttribute and its derived classes |
[AttributeValue] | the derived class (SmLongAttribute, ...) and its data |
[Behavior] | SmAttributeBehaviorType |
[ids] | the SM_AI_* attribute ids |
[tag_ids] | the SM_TI_* tag id types |
[type_code] | the Sm*Attribute_TYPE / SmObject_TYPE values |
[region_type] | the region type literals of SmMergeRegionAttribute |
[Attribute::new] | SmAttribute(ULONG, SmAttributeBehaviorType) |
[Attribute::generic] | SmGenericAttribute(...) |
[Attribute::long] | SmLongAttribute(...) |
[Attribute::pointer] | SmPointerAttribute(ULONG, void*, ...) |
[Attribute::pointer_list] | SmPointerListAttribute(...) |
[Attribute::vector3d] | SmVector3dAttribute(...) |
[Attribute::color] | SmColorAttribute(ULONG, const SmVector3d&, ...) |
[Attribute::tag] | SmTagAttribute(ULONG, long x8, ...) |
[Attribute::merge_region] | SmMergeRegionAttribute(SmRegion*, ULONG, SmRegion*, ULONG) |
[Attribute::make_copy] | every MakeCopy override and copy constructor |
[Attribute::attribute_id] / [Attribute::behavior] | GetAttributeID / GetBehavior |
[Attribute::type_code] / [Attribute::type_string] / [Attribute::is_kind_of] | GetType / GetTypeString / IsKindOf (every class) |
[Attribute::is_propagated_through_booleans] | IsPropagatedThroughBooleans (base, SmColorAttribute) |
[Attribute::long_value] | SmLongAttribute::GetValue |
[Attribute::vector3d_value] / [Attribute::set_vector3d_value] | SmVector3dAttribute::GetValue / SetValue |
[MergeRegionData] | SmMergeRegionAttribute data and simple accessors (GetThisRegions, GetThisRegionTypes, GetThisRegion, GetOtherRegions, GetOperation, SetOperation) |
[MergeRegionData::has_this_infinite_region] / [MergeRegionData::has_other_infinite_region] | HasThisInfiniteRegion / HasOtherInfiniteRegion |
[MergeRegionData::has_any_solid] | SmMergeRegionAttribute::HasAnySolid |
[MergeRegionData::set_regions] | SmMergeRegionAttribute::SetRegions |
append_new_regions (private) | the two accumulation loops of SmMergeRegionAttribute::Merge |
[AttributeStore] | the heap of attributes plus every SmAObject::m_pAttributes list |
[AttributeStore::destroy] | SmAttribute::~SmAttribute (delete pAttr) |
[AttributeStore::add_user] / [AttributeStore::remove_user] / [AttributeStore::users] | AddUser / RemoveUser / GetUsers |
[AttributeStore::from_clear_attributes] | SmAttribute::fromClearAttributes |
[AttributeStore::split] | SmAttribute::Split |
[AttributeStore::copy] | SmAttribute::Copy |
[AttributeStore::merge] | Merge (base, SmMergeRegionAttribute) |
[AttributeStore::coincident] | SmAttribute::Coincident |
[AttributeStore::edit] / [AttributeStore::destruction] | SmAttribute::Edit / Destruction (no-ops) |
[AttributeStore::propagate_regions_through_booleans] | PropagateRegionsThroughBooleans (base, SmColorAttribute) |
[AttributeStore::has_any_other_propagated_attribs] | SmMergeRegionAttribute::HasAnyOtherPropagatedAttribs |
[AttributeStore::read_indexed_attributes_from_db] | SmAttributeData::ReadIndexedAttributesFromDB |
[AttributeStore::read_indexed_attributes_from_db_partial] | the same, with the out-param a failed line skip leaves |
[AttributeStore::add_attribute] | SmAObject::AddAttribute (co-ported) |
[AttributeStore::remove_attribute] | SmAObject::RemoveAttribute (co-ported) |
[AttributeStore::clear_attributes] | SmAObject::ClearAttributes (co-ported) |
[AttributeStore::attributes] | SmAObject::GetAttributes (co-ported) |
[AttributeStore::find_attribute] | SmAObject::FindAttribute (co-ported) |
Upstream tests reaching this unit
prog_test:my_test_extent3d, prog_test:my_test_vector2d, prog_test:my_test_surface_closest_point, prog_test:my_test_drop_point, prog_test:my_test_matrix, prog_test:my_test_reversed_line_join