Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 28 additions & 5 deletions src/papermodels/datatypes/element.py
Original file line number Diff line number Diff line change
Expand Up @@ -452,13 +452,13 @@ def _get_transfer_loads(self, precision: int):
source_start_extent = []
source_end_extent = []
elif len(correspondent_above.other_extents) == 2:
target_start_extent = round(correspondent_above.other_extents[0])
target_end_extent = round(correspondent_above.other_extents[1])
target_start_extent = round(correspondent_above.other_extents[0], precision)
target_end_extent = round(correspondent_above.other_extents[1], precision)
source_start_extent = []
source_end_extent = []
elif len(correspondent_above.other_extents) == 4:
target_start_extent = round(correspondent_above.other_extents[0])
target_end_extent = round(correspondent_above.other_extents[1])
target_start_extent = round(correspondent_above.other_extents[0], precision)
target_end_extent = round(correspondent_above.other_extents[1], precision)
source_start_extent = round(correspondent_above.other_extents[2], precision)
source_end_extent = round(correspondent_above.other_extents[3], precision)

Expand Down Expand Up @@ -738,7 +738,30 @@ def get_transfer_extents(element: Element) -> tuple[str, dict]:
}
)

return intersection_extents
correspondent_extents = {}
for correspondent_below in element.correspondents_below:
tag = correspondent_below.other_tag
other_geom = correspondent_below.other_geometry
intersecting_region = element.geometry.intersection(other_geom)
other_geom_centerline = geom_ops.get_rectangle_centerline(other_geom)
below_start_coord, _ = geom_ops.get_start_end_nodes(other_geom_centerline)
above_start_coord, _ = geom_ops.get_rectangle_centerline(element.geometry).coords
above_start_coord = Point(above_start_coord)
intersecting_centerline = geom_ops.get_rectangle_centerline(intersecting_region)
inter_start_coord, inter_end_coord = geom_ops.get_start_end_nodes(intersecting_centerline)
correspondent_extents.update(
{
tag: (
below_start_coord.distance(inter_start_coord),
below_start_coord.distance(inter_end_coord),
above_start_coord.distance(inter_start_coord),
above_start_coord.distance(inter_end_coord),
)
}
)


return intersection_extents | correspondent_extents



Expand Down
51 changes: 51 additions & 0 deletions src/papermodels/datatypes/geometry_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,17 @@ def add_intersection_indexes_below(self):
for intersection in element.intersections_below
if intersection.other_tag in dependents
]
dependent_correspondents = [
correspondent
for correspondent in element.correspondents_below
if correspondent.other_tag in dependents
]
if node_attrs['start_coord'] is None: # node geometry is polygon
updated_intersections_below = []
all_extents = {}
if element.reaction_type == "linear":
all_extents = get_transfer_extents(element)

for intersection in dependent_intersections:
extents = all_extents.get(intersection.other_tag)
new_intersection = Intersection(
Expand All @@ -271,6 +277,20 @@ def add_intersection_indexes_below(self):
other_extents=extents
)
updated_intersections_below.append(new_intersection)

updated_correspondents_below = []
for correspondent in dependent_correspondents:
extents = all_extents.get(correspondent.other_tag)
new_correspondent = Correspondent(
correspondent.overlap_ratio,
correspondent.other_geometry,
correspondent.other_tag,
correspondent.other_rank,
correspondent.other_reaction_type,
extents,
)
updated_correspondents_below.append(new_correspondent)
element.correspondents_below = updated_correspondents_below
else:
start_coord = Point(node_attrs['start_coord'])
intersection_below_local_coords = []
Expand Down Expand Up @@ -330,6 +350,11 @@ def add_intersection_indexes_above(self):
for intersection in element.intersections_above
if intersection.other_tag in predecessors
]
predecessor_correspondents = [
correspondent
for correspondent in element.correspondents_above
if correspondent.other_tag in predecessors
]
for intersection in predecessor_intersections:
other_tag = intersection.other_tag
element_above: Element = self.nodes[other_tag]['element']
Expand Down Expand Up @@ -371,7 +396,33 @@ def add_intersection_indexes_above(self):
)
indexed_intersections_above.append(new_sub_intersection)

indexed_correspondents_above = []
for correspondent in predecessor_correspondents:
other_tag = correspondent.other_tag
element_above: Element = self.nodes[other_tag]['element']
above_dependents = list(self.successors(other_tag))
element_above_dependent_correspondents = [
correspondent
for correspondent in element_above.correspondents_below
if element.tag in above_dependents
]
above_correspondents_below = {
above_correspondent_below.other_tag: above_correspondent_below.other_extents
for above_correspondent_below in element_above_dependent_correspondents
}
other_extents = above_correspondents_below[element_tag]
if element_above.subelements is None:
new_correspondent = Correspondent(
correspondent.overlap_ratio,
correspondent.other_geometry,
correspondent.other_tag,
correspondent.other_rank,
correspondent.other_reaction_type,
other_extents
)
indexed_correspondents_above.append(new_correspondent)

element.correspondents_above = indexed_correspondents_above
element.intersections_above = indexed_intersections_above
self.nodes[node]['element'] = element

Expand Down