Question

How can I filter out aggregates that contain the same geometry as another, but keep the ones with more parts?


Badge +5

I have a bunch of line pairs where each individual line has been assigned a UUID and is stored in a list: UUID_PARTS{} with indices 0 and 1. 

 

Also have some aggregates of three which contain the same lines as the pairs, plus an additional line. They also have the same list attribute, where the indices are 0, 1, 2.

 

The pairs and trios of lines are currently separated, but could be combined if needed.

 

Have tried both list-based feature merger and regular feature merger on UUID_PARTS{0} or UUID_PARTS{1} with various settings, but no luck. My goal is for this to be flexible enough so it does not matter what index the matching UUIDs are and also handle aggregates with more than three parts, if possible. Any ideas?

 

Thanks,

 

@larue


6 replies

Badge +5

Can you use a ListSorter, so it doesn't matter what index the UUID's are in, followed by a ListConcatenator, and just do the FeatureMerger or DuplicateFilter etc on just the _concatenated attribute.

Badge +5

Can you use a ListSorter, so it doesn't matter what index the UUID's are in, followed by a ListConcatenator, and just do the FeatureMerger or DuplicateFilter etc on just the _concatenated attribute.

Sorry, got an error. Any ideas? Not sure if it matters but it was run inside a custom transformer.

 

@Tcl2 -- failed to evaluate expression `set WALL_MODULE_-_SINGULAR_-_VERT_ListConcatenator__separator [FME_DecodeText {<comma>}]; regsub -all "{}" [FME_DecodeText {_UUID_PARTS<opencurly><closecurly>._uuid1}] [FME_DecodeText {<opencurly><backslash>d+<closecurly>}] WALL_MODULE_-_SINGULAR_-_VERT_ListConcatenator__listPattern; set WALL_MODULE_-_SINGULAR_-_VERT_ListConcatenator__listPattern ^$WALL_MODULE_-_SINGULAR_-_VERT_ListConcatenator__listPattern$;' -- can't read "WALL_MODULE_": no such variable

Badge +5

Sorry, no. I'd need to see the workspace.

Badge +5

Sorry, no. I'd need to see the workspace.

Ok let me work on getting you something that makes sense for this issue.

My workspace is over 320 transformers (yikes!) and has lots of nested custom ones. This project is about translating CAD floor plans of buildings into a Revit model. I have figured out most of the process, but some geometry is problematic. Here is a screenshot of what I am trying to solve:

 

3_linesThis is a wall that changes width and shares a common boundary. I split the longest line and create separate bounding boxes which are used to generate Wall Family info for Revit. The problem is that my process (using FuzzyParallelLineFinder) creates line pairs that need to be filtered out before the bounding box stage.

I think your solution can work, so it may just be a matter of isolating the data stream. Stay tuned!

 

Badge +5

Sorry, no. I'd need to see the workspace.

I was able to run the transformers without error, but the features did not merge. My hunch is that it is treating the concatenations as one entity instead of seeing and matching individual UUIDs.

3_lines1I also tried the ListBasedMerger (without Concatenator), but I am unclear on how it should be configured. Was hoping to just compare Requestor and Supplier lists and merge when it came upon a feature that matched the UUID pair with the trio. Any ideas?

 

Badge +5

3_lines2I think I figured it out. I first changed the aggregator to generate lists of the original UUIDs, then exploded the supplier side UUID list only, using the requestor as the main list by which to "merge" Not sure how universal this is, but it is working for me so far. I am using LastBasedFeatureMerger as a filter and sending only unused suppliers on their way.

 

 

Reply