Flickering faces import IFC due to component axes

Need help!

After importing an IFC file (big one) all my faces are flickering and this makes it horrible to work in.
I know this is because all groups and components have different axes. (plus they are rotated…) I tried to reset it with the plugin ‘Axes tools’ by ThomThom. But this only works on the components/groups you select so not for nested groups/components. This means i would need to go in every group and repeat the action. Because is it a very complex file with many groups in groups in groups its almost impossible. Is there a quick way or plugin to reset all axes for every group/component in a model?

PS i also tried Eneroth line up axes… same problem.
PPS I also use the plugin IFC cleaner to remove triangulation of faces and this works really good!

Thanks!

sounds like you need to move the objects closer to SketchUp’s (0,0,0) which is a fixed point in the model space. By default, the global or model axes intersect at the origin but moving the axes does not move (0,0,0).

Faces flickering sounds like Z-fighting which is not an axis issue. Hard to tell without a picture. Is it possible you imported the file twice and there are two versions overlapping each other in space? Can you upload the .skp file? If it’s big you would need to use a file sharing platform and post the link here. Or at least post a screenshot.

EDIT: Far from origin is also a really good guess.

What application is the IFC coming from? The possibility is that the original model is geolocated and that it is exported using actual map coordinates. At least the Revit IFC exporter places all the component origins at the same, model origin. It would be better to export the IFC using the local coordinate system and not by using the survey point information as the datum. That might make the model more manageable in SketchUp.

I reset the main axes of the model closer to the objects. This should do the same?

No. Moving the axes does not move Sketchup’s origin. The origin is fixed and cannot be moved.

The objects need to be moved to the origin.

No i didnt import the file twice. Really sure :slight_smile:
The faces ‘flickering’ when moving/orbiting around.
See two screenshots of slightly different angle.

I think it comes from Revit. Download from Bim360.
Thanks for the tip. I will ask the architect if he can make an export using the local coordinates!

Ok thanks! I will try this.

To me the screenshots look indeed like a problem with model extents, not duplicate faces.
Probably just exploding everything down to raw geometry would also fix this. What are you using the model for? The components in it might not prove very usable even without the origin problem, as every one of them is unique, even the ones that are basically identical.

What is your goal? Do you need to inspect the file or create some visuals from it?
At this moment, SketchUp’s ifc importer doesn’t convert objects the ‘SketchUp way’ (treating the same geometry as instances of Components instead of making them all unique, and instead of placing the origin to the bounding box and adding a vector transformation, sets the insertion points to the origin)
Can you share the original file?

Another common thing is the presence of ifc spaces.
If you can locate them and erase, it might get better…

1 Like

@lvd

This video talks about this issue and provides various methods to resolve the problem

3 Likes

This is exactly the problem indeed!
The thing is that i tried with ‘Axes tools’ but this only works when you can select all your different components. If your components are for example grouped. You will need to go in the group first.
Because the model had different groups in groups it’s really not possible to do this for every component that is in there. So i’m looking for a quick way to reset the axes of every component that is in the model.

Hi Mike,

The goal is to make visuals of the interior. So we need the architectural layer for this (and be able to hide certain parts like the facade,…)
Unfortunately i cannot share the original file because it is confidential…

Changing the axes in the components and groups won’t change how far the model is from [0,0,0] Neither will moving the model axes. The origin is a fixed point in space. If your model is located at a large distance from the origin, you need to move the model closer to the origin, not the other way around.

I don’t really understand what you mean by ‘ifc spaces’… :slight_smile:

Every ‘BIM’ project comes with ‘IFCspaces’. Those are geometric volumes of the spaces. If they are the same size as the actual elements of the building and visible, they would ‘Z-fight’ as well.
Search for ‘spaces’ in the Tag panel or Outliner.

A quick one…not really tested, but it looks like is O.K :innocent:
No guarantee! Use your own risk!
Backup, Backup…

Follow the animation:

  • Select the desired components, groups or everything (Ctrl+A)
  • Open Ruby Console
  • Copy-Paste the code from below into Ruby Console
  • Hit Enter (Return)

The axis origin of selected components, groups will set to its bound left front bottom corner. Including all nested…
You can Undo it.

Dezmo_reset_axes

module Dezmo
module Reset_Axes
  extend self
  
  def transform_obj_origin(obj, point)
    tr = Geom::Transformation.new( point )
    obj.entities.transform_entities( tr.inverse, obj.entities.to_a )
    obj.instances.each { |instance|
      instance.transformation = instance.transformation * tr
      @count_inst += 1
    }
  end
  
  def set_origin(definitions)
    definitions.each{|obj|
      point = obj.bounds.corner(0)
      transform_obj_origin(obj, point)
    }
  end
  
  def get_defs(instance)
    @definitions<<instance.definition
    classify(instance.definition.entities).each{|inst|
      get_defs(inst)
    }
    true
  end
  
  def classify(ents)
    componets = ents.grep(Sketchup::ComponentInstance)
    groups = ents.grep(Sketchup::Group)
    componets + groups
  end
  
  def run
    model = Sketchup.active_model
    sel = model.selection
    @definitions = []
    @count_inst = 0
    if !sel.empty?
      classify(sel).each{|instance|
        get_defs(instance)
      }
      @definitions.uniq!
      model.start_operation('Dezmo:Reset_Axes', true)
      set_origin(@definitions)
      model.commit_operation
      puts "Axes reset to bound left front bottom corner:"
      puts "Definitions:#{@definitions.size} Instances:#{@count_inst}"
    end
  end

end
end
Dezmo::Reset_Axes.run

Some bits from Thomas Thomassen ( thomas[at]thomthom[dot]net). Thanks.

2 Likes