- select many objects
- adjust intersection aggressiveness setting (between 0.1 and 1.0)
- run script
- you are left with a selection
- delete the selection, or rotate or scale them or whatever fix is most appropriate.
- Intersection detection is simple bounding box intersection. Therefore does not work particularly well if bounding box is not a good fit for the object. If I have cause, I'll introduce a sphere/squashed-sphere based intersection detection at a later date.
-- MixeScript snippet: Select Intersections -- selects objects which intersect one another by performing overlapping bounding box detection. optional adjustment for bounding box downscaling. --USAGE --select many objects --adjust intersection aggressiveness setting (between 0.1 and 1.0) --run script --you are left with a selection --delete the selection, or rotate or scale them or whatever fix is most appropriate. --SETTINGS IntersectionAggressiveness = 0.5 -- downscales objects to center. choose between 0.1 and 1.0 (1.0 uses bounding boxes exactly as they are) Global IsIntersecting = #() Global PivotPositions = #() Global IntersectingObjects = #() fn DownScale objarray = ( if IntersectionAggressiveness != 1.0 then ( for o in objarray do ( append PivotPositions o.position o.pivot = o.center o.scale = o.scale * [IntersectionAggressiveness,IntersectionAggressiveness,IntersectionAggressiveness] ) ) ) fn UpScale objarray = ( i = 0 if IntersectionAggressiveness != 1.0 then ( for o in objarray do ( i=i+1 o.scale = o.scale / [IntersectionAggressiveness,IntersectionAggressiveness,IntersectionAggressiveness] o.pivot = PivotPositions[i] ) ) Global PivotPositions = #() ) objarray = getcurrentselection() DownScale(objarray) --Detect intersections for i = 1 to objarray.count do ( doesintersect = false for y = 1 to objarray.count do ( if y != i and IsIntersecting[y] == false then --ignore same object and objects already detected as intersecting ( if (intersects objarray[i] objarray[y]) == true then (doesintersect = true) ) ) append IsIntersecting doesintersect if doesintersect then (append IntersectingObjects objarray[i]) ) UpScale(objarray) select IntersectingObjects