def addBillboards(): # must have projected things already FileUtils.importFile('C:\\amigos\\templates\\billboardangled.3dm') FileUtils.importFile('C:\\amigos\\templates\\billboardstraight.3dm') lyrAtt = LayerUtils.layerAttributes('billboards') bbs = LayerUtils.getLayerGeometry('geocodedbillboards-projected') bbs.extend(LayerUtils.getLayerGeometry('foundbillboards-projected')) bbpoints = [bb.Location for bb in bbs] frwys = LayerUtils.getLayerGeometry('freeways-projected') roads = LayerUtils.getLayerGeometry('roads-projected') for pt in bbpoints: vector = GeomTools.vectorToClosestCurve(pt, frwys, 100.0) if vector: # freeway within 100m bbModel = LayerUtils.getLayerGeometry('billboardangled') else: # no freeways within 100meters vector = GeomTools.vectorToClosestCurve(pt, roads) bbModel = LayerUtils.getLayerGeometry('billboardstraight') GeomTools.moveMany(bbModel, Vector3d(pt)) angle = vector.VectorAngle(Vector3d.XAxis, vector, Plane.WorldXY) GeomTools.rotateMany(bbModel, angle, Vector3d.ZAxis, pt) GeomTools.bakeMany(bbModel, lyrAtt) LayerUtils.deleteLayer('billboardstraight') LayerUtils.deleteLayer('billboardangled')
def addBillboards(): # must have projected things already FileUtils.importFile('C:\\amigos\\templates\\billboardangled.3dm') FileUtils.importFile('C:\\amigos\\templates\\billboardstraight.3dm') lyrAtt = LayerUtils.layerAttributes('billboards') bbs = LayerUtils.getLayerGeometry('geocodedbillboards-projected') bbs.extend( LayerUtils.getLayerGeometry('foundbillboards-projected') ) bbpoints = [bb.Location for bb in bbs] frwys = LayerUtils.getLayerGeometry('freeways-projected') roads = LayerUtils.getLayerGeometry('roads-projected') for pt in bbpoints: vector = GeomTools.vectorToClosestCurve(pt, frwys, 100.0) if vector: # freeway within 100m bbModel = LayerUtils.getLayerGeometry('billboardangled') else: # no freeways within 100meters vector = GeomTools.vectorToClosestCurve(pt, roads) bbModel = LayerUtils.getLayerGeometry('billboardstraight') GeomTools.moveMany( bbModel, Vector3d(pt) ) angle = vector.VectorAngle( Vector3d.XAxis, vector, Plane.WorldXY ) GeomTools.rotateMany( bbModel, angle, Vector3d.ZAxis, pt ) GeomTools.bakeMany( bbModel, lyrAtt ) LayerUtils.deleteLayer('billboardstraight') LayerUtils.deleteLayer('billboardangled')
geoms = [] objs = model.Objects.FindByLayer(layer) for obj in objs: data = objUserStringDictionary(obj) for k in data: if k in goodData: if goodData[k] not in siteData: siteData[goodData[k]] = [data[k]] else: siteData[goodData[k]].append( data[k] ) geom = obj.Geometry geom.EnsurePrivateCopy() geoms.append( geom ) layerAtt = LayerTools.layerAttributes( layer ) if layer != 'site': GeomTools.bakeMany( geoms, layerAtt ) else: siteCrv = geoms[0] bbox = siteCrv.GetBoundingBox(False) minPt, maxPt = bbox.Min, bbox.Max xyPlane = Rhino.Geometry.Plane.WorldXY rect = Rhino.Geometry.Rectangle3d( xyPlane, minPt, maxPt ) newCrv = rect.ToNurbsCurve() GeomTools.bakeMany( [newCrv], layerAtt ) # save watershed info pickleData( pickleFile, siteData ) #print unpickleData( pickleFile ) # zoom to everything Rhino.RhinoApp.RunScript('-_ZE ', True) # export to illustrator