sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🛣️ Road Profile Builder | Generate roads, curbs and pavements easily Download

    How to cut from object

    Scheduled Pinned Locked Moved Developers' Forum
    47 Posts 4 Posters 4.4k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      ado130
      last edited by

      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
      
      1 Reply Last reply Reply Quote 0
      • sdmitchS Offline
        sdmitch
        last edited by

        @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
        
        

        cut from object.gif

        Nothing is worthless, it can always be used as a bad example.

        http://sdmitch.blogspot.com/

        1 Reply Last reply Reply Quote 0
        • A Offline
          ado130
          last edited by

          It seems that it works too. Thanks!
          But black lines are still there.
          You have there "]", I think, it should be "}"?

          1 Reply Last reply Reply Quote 0
          • sdmitchS Offline
            sdmitch
            last edited by

            @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'?

            Nothing is worthless, it can always be used as a bad example.

            http://sdmitch.blogspot.com/

            1 Reply Last reply Reply Quote 0
            • A Offline
              ado130
              last edited by

              Yeah, you're right, but I meant black lines in rectangular blocks (rather, all lines).

              1 Reply Last reply Reply Quote 0
              • sdmitchS Offline
                sdmitch
                last edited by

                @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)
                
                

                Nothing is worthless, it can always be used as a bad example.

                http://sdmitch.blogspot.com/

                1 Reply Last reply Reply Quote 0
                • A Offline
                  ado130
                  last edited by

                  Sorry for the delayed response. It looks fine, thanks again!

                  http://i.imgur.com/TtoBovE.png

                  1 Reply Last reply Reply Quote 0
                  • 1
                  • 2
                  • 3
                  • 3 / 3
                  • First post
                    Last post
                  Buy SketchPlus
                  Buy SUbD
                  Buy WrapR
                  Buy eBook
                  Buy Modelur
                  Buy Vertex Tools
                  Buy SketchCuisine
                  Buy FormFonts

                  Advertisement