How to cut from object
-
It seems that it works. Is it correct way?
Just one question, how can I delete the black lines?, or hide them.def drill(x, y, z, radiuses, depths, directions) model = Sketchup.active_model countOfDrills = x.length.to_i countOfDrills.times do |i| center = [x[i], y[i], z[i]].map(&;to_f) radius = radiuses[i] depth = depths[i] direction = directions[i] case direction when "N" dir = Geom;;Vector3d.new(0,0,1) when "E" dir = Geom;;Vector3d.new(-1,0,0) when "S" dir = Geom;;Vector3d.new(0,0,-1) when "W" dir = Geom;;Vector3d.new(1,0,0) when "F" dir = Geom;;Vector3d.new(0,-1,0) when "B" dir = Geom;;Vector3d.new(0,1,0) else dir = Geom;;Vector3d.new(0,0,1) end groups = [] i = 0 Sketchup.active_model.entities.each{|g| next unless g.is_a?(Sketchup;;Group) g.entities.each{|f| next unless f.is_a?(Sketchup;;Face) if center.on_plane? f.plane then groups.each {|x| next if g == x} groups[i] = g i += 1 end } } groups = groups.uniq countOfGroups = groups.length.to_i countOfGroups.times do |i| group = groups[i] gents = group.entities activeFaces = gents.grep(Sketchup;;Face) circleGroup = gents.add_group; cge = circleGroup.entities edges = cge.add_circle(center, dir, radius) circleGroup.explode circleFace = (gents.grep(Sketchup;;Face) - activeFaces).last next if circleFace == nil normal = circleFace.normal activeFaces = gents.grep(Sketchup;;Face) circleFace.pushpull(-depth) deleteFace = (gents.grep(Sketchup;;Face) - activeFaces)[0] if deleteFace.normal == normal then deleteFace.erase! end end end end
-
@ado130 said:
Just one question, how can I delete the black lines?, or hide them.
Try this
groups = groups.uniq countOfGroups = groups.length.to_i countOfGroups.times do |i| group = groups[i] gents = group.entities activeFaces = gents.grep(Sketchup;;Face) circleGroup = gents.add_group; cge = circleGroup.entities edges = cge.add_circle(center, dir, radius) circleGroup.explode; (gents.grep(Sketchup;;Face) - activeFaces).each{|circleFace| next if center.distance(circleFace.bounds.center) > radius circleFace.pushpull(-depth) ] remove = gents.grep(Sketchup;;Edge).find_all{|e|e.faces.length<2} gents.erase_entities(remove.reverse) end
-
It seems that it works too. Thanks!
But black lines are still there.
You have there "]", I think, it should be "}"? -
@ado130 said:
It seems that it works too. Thanks!
But black lines are still there.
You have there "]", I think, it should be "}"?Yes, you are right. Sorry about that.
The black vertical lines in the 'drill hole'?
-
Yeah, you're right, but I meant black lines in rectangular blocks (rather, all lines).
-
@ado130 said:
Yeah, you're right, but I meant black lines in rectangular blocks.
Well, if you didn't want them, why did you create then in the first place.
groups = groups.uniq countOfGroups = groups.length.to_i countOfGroups.times do |i| group = groups[i]; group.make_unique gents = group.entities activeFaces = gents.grep(Sketchup;;Face) activeEdges = gents.grep(Sketchup;;Edge);#<-- save active edges circleGroup = gents.add_group; cge = circleGroup.entities edges = cge.add_circle(center, dir, radius) circleGroup.explode; (gents.grep(Sketchup;;Face) - activeFaces).each{|circleFace| next if center.distance(circleFace.bounds.center) > radius circleFace.pushpull(-depth) } #remove unused circle edges remove = gents.grep(Sketchup;;Edge).find_all{|e|e.faces.length<2} gents.erase_entities(remove.reverse) # hide vertical edges in drill hole soften = (gents.grep(Sketchup;;Edge)-activeEdges).find_all{|e|e.line[1].parallel?(dir) && !e.soft?} soften.each{|e|e.soft=e.smooth=true} # remove co-planar edges remove = gents.grep(Sketchup;;Edge).find_all{|e|(e.faces.length>=2 && e.faces.find_all{|f|f.normal.parallel?(e.line[1].axes[1])}.length==2)} gents.erase_entities(remove.reverse)
-
Sorry for the delayed response. It looks fine, thanks again!
Advertisement