############################## import rhinoscriptsyntax as rs import sys, math, random sys.path.append("P:\WWW\halil2003\DM2") import DM_lib as dm #reload (osm) import OSM_lib as osm #reload (osm) rs.UnitSystem(4) # meters = 4 rs.ShowGrid(None, 0) rs.ShowGridAxes(None, 1) rs.EnableRedraw(0) currentMode = rs.ViewDisplayMode(rs.CurrentView()) rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Redraw() dm.newEmptyLayer("XXX", [100,100,250]) rs.ShowObjects(rs.AllObjects()) def create_spehere(center, radius): coords = [] scalVec = [radius, 0, 0] for i in range(1001): scalVec = rs.VectorRotate(scalVec, random.uniform(-90,90), [random.uniform(-1,1) for i in range(3)]) coords.append( rs.VectorAdd(center, scalVec) ) rs.AddPoints(coords) def connect_2_speheres(first_center, first_radius, second_center, second_radius): vec = rs.VectorCreate(first_center, second_center) unit_vec = rs.VectorUnitize(vec) unit_vec = rs.VectorReverse(unit_vec) radius_vec = rs.VectorScale(unit_vec, first_radius) first_spehere_intersection_pt = rs.VectorAdd(first_center, radius_vec) unit_vec = rs.VectorReverse(unit_vec) radius_vec = rs.VectorScale(unit_vec, second_radius) second_spehere_intersection_pt = rs.VectorAdd(second_center, radius_vec) line_id = rs.AddLine(first_spehere_intersection_pt, second_spehere_intersection_pt) rs.ObjectColor(line_id, [255, 0, 0]) bldgNames = ["_bldg3D_higBy_flo_136691386", "_bldg3D_higBy_flo_60739635", "_bldg3D_higBy_flo_904678014", "_bldg3D_higBy_flo_116806281"] bldgIDs = [ rs.ObjectsByName(namX)[0] for namX in bldgNames ] bldgCenters = [] bldgAboveCenters = [] for bldg in bldgIDs: coords = dm.getSurfacePoints(bldg) center = dm.pntCentroid(coords) print center bldgCenters.append(center) centerAbove = rs.VectorAdd(center, [0,0,25]) bldgAboveCenters.append(centerAbove) print centerAbove rs.AddLine(center, centerAbove) main_center = dm.pntCentroid(bldgAboveCenters) larger_radius = 5 small_radius = 2 create_spehere(main_center, small_radius) for center in bldgAboveCenters: create_spehere(center, larger_radius) connect_2_speheres(main_center, small_radius, center, larger_radius) x_offsets = [-10, -10, 10, 10] y_offsets = [-10, 10, -10, 10] # up - down z_offsets = [-10, 10] for z in z_offsets: for idx in range(4): temp_vector = [x_offsets[idx], y_offsets[idx], z] new_center = rs.VectorAdd(main_center, temp_vector) create_spehere(new_center, small_radius) connect_2_speheres(main_center, small_radius, new_center, small_radius) #################################### rs.CurrentLayer("Default") rs.ViewDisplayMode(None, "ghosted")