Skip to main content
  • I have a set of geometry 3D objects containing, points, surfaces, cubes, and lines.
  •  Each geometry object in the set has attributes defined for them but the attributes are read into the workspace through a different reader.
  • The geometry and attributes for this set are coming from the same file originating from AutoCAD Mechanical 2020.

1) How can I join the set of attributes to the set of geometry objects?

  • I have tried using FeatureMerger with a join on `_geometry` which is successful for points because the geometry matches the 'insertion point' of the attributes being read in but the join fails when the geometry is 3D or not of equal size.
  • I have tried Matcher with vector tolerance but the results were not was I was looking for. Could be a transformer configuration problem.
  • I have tried NeighborFinder but the results were not was I was looking for. Could be a transformer configuration problem.
  • I have also tried SpatialRelator to find containment and Clipper but inputs were rejected for both of these options with INVALID_CANDIDATE_GEOMETRY_TYPE and INVALID_CLIPPER_GEOMETRY_TYPE respectively.

2) Are any of these the appropriate Transformer to use? What are some other suggestions?

 

Ultimately, I am trying to take a packed json and assign it to a geometry object. My attempts have primarily been focused around trying to join on autocad_block_name and _geometry. Block name for type of object and _geometry to determine which object of that type to assign the json to. Also, these two fields seem to be the only reliable pieces of data for long term use coming from the CAD dwg file. 

Sample data to help clarify:

Attributes Object:
         fme_feature_type: ZONE_SAFETY
                _geometry: 3161A8831631C07A14AE476153C0A072EFA1688FED3C000000000000000000000000000000
autocad_attributes_follow: true
       autocad_block_name: ZONE_SAFETY
           autocad_entity: autocad_insert
                  _packed: {"NAME":"Z1","TYPE":"ZONE_SAFETY"}
 
Geometry Object:
            _geometry: 3161A8831D190005000000687814AE476153C0D4A3703D0AD77940D4A3703D0AD77940687814AE476153C0687814AE476153C05C8FC2F5289C76405C8FC2F5289C764000000000000030BD4068EFA1688FED3C5C8FC2F5289C76400000000000000000000000
       autocad_entity: autocad_polygon
autocad_entity_handle: 3306
   autocad_block_name: ZONE_SAFETY
 autocad_block_number: 1044

 

Hi @jspratt​,

When it comes to spatial joins, there are a number of transformers that can be used. Fortunately, we have a Merging or Joining Spatial Data Article with a great chart to help narrow down which one is the right transformer for the job. When it comes to 3D geometry, if you are working with solids, the CSGBuilder can also be used (and attributes/lists can be joined if you enable Attribute Accumulation in the transformer parameters).

If you are dealing with all sorts of geometry and find it would be best to join using multiple transformers, the GeometryFilter can come in handy to sort your features before performing the join.


Reply