sketchucation logo sketchucation
    • Login
    1. Home
    2. ado130
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
    A
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 24
    • Groups 1

    ado130

    @ado130

    10
    Reputation
    1
    Profile views
    24
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    ado130 Unfollow Follow
    registered-users

    Latest posts made by ado130

    • RE: How to cut from object

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

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

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

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

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

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

      posted in Developers' Forum
      A
      ado130
    • RE: 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
      
      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      No, they aren't. I know it's a problem and if I will do drill into 2 blocks, they need to be in the same group. But for now, the problem is first image. It looks like, pushpull tools pushpull the block and not cylinder(drill/notch).

      It works!! I had a little bug in my input file.
      So final code is

      		group = nil
      		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
      					group = g
      				end
      			}	
      		}	
      		gents = group.entities
      		active_faces = gents.grep(Sketchup;;Face)
      		circle_group = gents.add_group; cge = circle_group.entities
      		edges = cge.add_circle(center, dir, radius)
      		circle_group.explode
      		circle_face = (gents.grep(Sketchup;;Face) - active_faces)[0]
      		circle_face.pushpull(-depth)	
      		togos = [] 
      		edges.each{|edge| togos << edge unless edge.faces[0] }
      		model.active_entities.erase_entities(togos) if togos[0]	
      

      Many many many thanks to both!
      Maybe a question about the second image, is it possible do it somehow?
      i.e.: Even if they are 4 blocks next to each (2x2 matrix) and create a hole in the middle.
      It occurred to me, try to apply this method twice (or more, if there will be more blocks next to each other).
      Or maybe 2nd solution, make a temporary group with all common groups/faces where will be a hole.

      Edit:
      So, I edited it

      		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
      			active_faces = gents.grep(Sketchup;;Face)
      			circle_group = gents.add_group; cge = circle_group.entities
      			edges = cge.add_circle(center, dir, radius)
      			circle_group.explode
      			circle_face = (gents.grep(Sketchup;;Face) - active_faces)[0]
      			next if circle_face == nil
      			circle_face.pushpull(-depth)	
      			togos = [] 
      			edges.each{|edge| togos << edge unless edge.faces[0] }
      			model.active_entities.erase_entities(togos) if togos[0]		
      		end
      

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

      It "works", but there is a problem, if I need do a drill over 3 (more) blocks.
      Or when I have 4 blocks, etc..

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

      I found that after this circle_face = (gents.grep(Sketchup::Face) - active_faces), there are two faces, so I tried ".last", it helped, but still don't work at well.

      http://i.imgur.com/J8tQrBb.jpg

      Aby ideas?

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      It almost works, but the result is

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

      def notch(x, y, z, radiuses, depths, directions)
      	model = Sketchup.active_model 
      	countOfNotch = x.length.to_i
      	countOfNotch.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		
      		
      		group = nil
      		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
      					group = g
      				end
      			}	
      		}	
      		gents = group.entities
      		active_faces = gents.grep(Sketchup;;Face);
      		circle_group = gents.add_group; cge = circle_group.entities;
      		edges = cge.add_circle(center, dir, radius);
      		circle_group.explode;
      		circle_face = (gents.grep(Sketchup;;Face) - active_faces)[0];
      		circle_face.pushpull(-depth)		
      	end
      end
      

      It works only if the cylinder's face is whole on the block.

      It "works", if I have two blocks on each other

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

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      So there are 2 solutions for this (I think)

      1. save somewhere the group where will be notch
      2. find that group somehow
        because, when I do a dril, I'm using this
      		group = nil
      		face = nil
      		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 f.classify_point(center) == Sketchup;;Face;;PointInside then
      					group = g
      					face = f
      				end
      			}	
      		}
      

      2.) Exist a way how to find "my" group, where is the rectangular block, when the center point is outside that block?

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      Hmm, I have one main method, one method for rectangle blocks and next method for cylinders, but in every of those methods I have
      group = Sketchup.active_model.active_entities.add_group() entities = group.entities
      so then i.e.
      circle = entities.add_circle(center, dir, radius)
      or
      entities.add_line(ptA, ptB) etc bottom = entities.add_face(ptA, ptB, ptC, ptD)
      So this is the wrong solution?
      If I understand correctly, I need have group = Sketchup.active_model.active_entities.add_group() only in main method and then passed as a variable to other methods?

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      I had never defined the group in this method previous.
      This is what I have now:

      def notch(x, y, z, radiuses, depths, directions)
      	model = Sketchup.active_model 
      	countOfNotch = x.length.to_i
      	countOfNotch.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		
      		
      		gents = group.entities
      		active_faces = gents.grep(Sketchup;;Face);### modified
      		circle_group = gents.add_group; cge = circle_group.entities;### new
      		edges = cge.add_circle(center, dir, radius);### modified
      		circle_group.explode;### new
      		circle_face = (gents.grep(Sketchup;;Face) - active_faces)[0];### modified	
      		circle_face.pushpull(-depth)		
      	end
      end
      

      Of cource, I define a group in method, where I draw a rectangel block, but it's independently. So first I call this method, it'll draw several blocks, and then, if is necessary (according to input file) I'll call a method for notch.

      posted in Developers' Forum
      A
      ado130
    • RE: How to cut from object

      I am slightly confused now ๐Ÿ˜„ because before you said

      @unknownuser said:

      You don't need to add the edges to a new group.
      raw it directly over the face in the active_entities.
      edges = Sketchup.active_model.active_entities.add_circle(center, dir, radius, segs)

      So what should I do?
      If I understood Sam correctly, I need sth like
      group = Sketchup.active_model.active_entities.add_group() gents = group.entities active_faces = model.active_entities.grep(Sketchup::Face) edges = gents.add_circle(center, dir, radius) group.explode circle_face = model.active_entities.grep(Sketchup::Face) - active_faces
      .. and then?
      I'm not sure what is meant by "add a group inside the original group".

      By the way, thanks Sam, or, thanks to both.

      posted in Developers' Forum
      A
      ado130