def draw_circles(circles, **kwargs): guids = [] for data in iter(circles): point, normal = data['plane'] radius = data['radius'] name = data.get('name', '') color = data.get('color') layer = data.get('layer') circle = Circle(Plane(Point3d(*point), Vector3d(*normal)), radius) guid = add_circle(circle) if not guid: continue obj = find_object(guid) if not obj: continue attr = obj.Attributes if color: attr.ObjectColor = FromArgb(*color) attr.ColorSource = ColorFromObject else: attr.ColorSource = ColorFromLayer if layer and find_layer_by_fullpath: index = find_layer_by_fullpath(layer, True) if index >= 0: attr.LayerIndex = index attr.Name = name attr.WireDensity = -1 obj.CommitChanges() guids.append(guid) return guids
def draw_circles(circles): """Draw circles in Grasshopper. Parameters ---------- circles : list of dict The circle definitions. Returns ------- list of :class:`Rhino.Geometry.Circle` Notes ----- .. code-block:: python Schema({ 'plane': lambda x: len(x[0]) == 3 and len(x[1]) == 3, 'radius': And(Or(int, float), lambda x: x > 0) }) """ rg_circles = [] for c in iter(circles): point, normal = c['plane'] radius = c['radius'] rg_circles.append( Circle(Plane(Point3d(*point), Vector3d(*normal)), radius)) return rg_circles
def draw_circles(circles): """Draw circles in Grasshopper. """ rg_circles = [] for c in iter(circles): point, normal = c['plane'] radius = c['radius'] rg_circles.append(Circle(Plane(Point3d(*point), Vector3d(*normal)), radius)) return rg_circles
def draw_circles(circles, **kwargs): """Draw circles and optionally set individual name, color, and layer properties. Parameters ---------- circles : list[dict] A list of circle dictionaries. See Notes, for more information about the structure of the dict. Returns ------- list[System.Guid] Notes ----- A circle dict has the following schema: .. code-block:: python Schema({ 'plane': lambda x: len(x[0]) == 3 and len(x[1]) == 3, 'radius': And(Or(int, float), lambda x: x > 0), Optional('name', default=''): str, Optional('color', default=None): And(lambda x: len(x) == 3, all(0 <= y <= 255 for y in x)), Optional('layer', default=None): str }) """ guids = [] for data in iter(circles): point, normal = data['plane'] radius = data['radius'] name = data.get('name', '') color = data.get('color') layer = data.get('layer') circle = Circle(Plane(Point3d(*point), Vector3d(*normal)), radius) guid = add_circle(circle) if not guid: continue obj = find_object(guid) if not obj: continue attr = obj.Attributes if color: attr.ObjectColor = FromArgb(*color) attr.ColorSource = ColorFromObject else: attr.ColorSource = ColorFromLayer if layer and find_layer_by_fullpath: index = find_layer_by_fullpath(layer, True) if index >= 0: attr.LayerIndex = index attr.Name = name attr.WireDensity = -1 obj.CommitChanges() guids.append(guid) return guids
def get_rgcircle(self): """:class:`Rhino.Geometry.Circle` representing bullet footprint. Returns ------- :class:`Rhino.Geometry.Circle` """ from Rhino.Geometry import Circle return Circle(self.get_location_plane(), self.get_compressed_radius())
def draw_cylinders(cylinders, cap=False): """Draw cylinders. Parameters ---------- cylinders : list of dict The cylinder definitions. Other Parameters ---------------- cap : bool, optional Default is ``False``. Returns ------- list of :class:`Rhino.Geometry.Cylinder` Notes ----- .. code-block:: python Schema({ 'start': lambda x: len(x) == 3, 'end': lambda x: len(x) == 3, 'radius': And(Or(int, float), lambda x: x > 0) }) """ rg_cylinders = [] for c in iter(cylinders): start = c['start'] end = c['end'] radius = c['radius'] if radius < TOL: continue base = Point3d(*start) normal = Point3d(*end) - base height = normal.Length if height < TOL: continue plane = Plane(base, normal) circle = Circle(plane, radius) cylinder = Cylinder(circle, height) brep = cylinder.ToBrep(cap, cap) if not brep: continue rg_cylinders.append(brep) return rg_cylinders
def _egi_sort_v_nbrs(egi): """ By default, the sorting should be ccw, since the circle is typically drawn ccw around the local plane's z-axis... """ xyz = dict((key, [attr[_] for _ in 'xyz']) for key, attr in egi.vertices(True)) for vkey in egi.vertex: nbrs = egi.vertex[vkey]['nbrs'] plane = Plane(Point3d(*xyz[vkey]), Vector3d(*[axis for axis in egi.vertex[vkey]['normal']])) circle = Circle(plane, 1) p_list = [] for nbr_vkey in nbrs: boolean, parameter = ArcCurve(circle).ClosestPoint(Point3d(*xyz[nbr_vkey])) p_list.append(parameter) sorted_nbrs = [key for (param, key) in sorted(zip(p_list, nbrs))] egi.vertex[vkey]['sorted_nbrs'] = sorted_nbrs
def xdraw_cylinders(cylinders, cap=False, **kwargs): guids = [] for c in iter(cylinders): start = c['start'] end = c['end'] radius = c['radius'] name = c.get('name', '') color = c.get('color') layer = c.get('layer') if radius < TOL: continue base = Point3d(*start) normal = Point3d(*end) - base height = normal.Length if height < TOL: continue plane = Plane(base, normal) circle = Circle(plane, radius) cylinder = Cylinder(circle, height) brep = cylinder.ToBrep(cap, cap) if not brep: continue guid = add_brep(brep) if not guid: continue obj = find_object(guid) if not obj: continue attr = obj.Attributes if color: attr.ObjectColor = FromArgb(*color) attr.ColorSource = ColorFromObject else: attr.ColorSource = ColorFromLayer if layer and find_layer_by_fullpath: index = find_layer_by_fullpath(layer, True) if index >= 0: attr.LayerIndex = index attr.Name = name attr.WireDensity = -1 obj.CommitChanges() guids.append(guid) return guids
def xdraw_cylinders(cylinders, cap=False): rg_cylinders = [] for c in iter(cylinders): start = c['start'] end = c['end'] radius = c['radius'] if radius < TOL: continue base = Point3d(*start) normal = Point3d(*end) - base height = normal.Length if height < TOL: continue plane = Plane(base, normal) circle = Circle(plane, radius) cylinder = Cylinder(circle, height) brep = cylinder.ToBrep(cap, cap) if not brep: continue rg_cylinders.append(brep) return rg_cylinders
def DivDist2D(crv, dist): ## 以下を改造しました ## Hiroaki Saito : GH C#_Divide Distance With List ## https://openddl.com/post/166/ ## 閲覧:2021/6/2 pln = Plane.WorldXY points = [] paramList = [] if crv: tmpParam = 0. pt = crv.PointAtStart dummy_out = System.Double(0) tmpParam = crv.ClosestPoint(pt, dummy_out)[1] points.append(pt) paramList.append(tmpParam) for i in range(len(dist)): d = System.Double(dist[i]) circle = Circle(pln, points[i], d) tmpCrv = circle.ToNurbsCurve() ci = Intersection.CurveCurve(crv, tmpCrv, 0, 0) addCheck = False tmpList = sorted(ci, key=lambda x: x.ParameterA) for item in tmpList: tmpParam = item.ParameterA if tmpParam > paramList[i]: points.append(item.PointA) paramList.append(tmpParam) addCheck = True break if not addCheck: break pt = crv.PointAtEnd points.append(pt) return points
def DrawForeground(self, e): radius = self.slider.trackbar.Value circle = Circle(self.plane, radius) cylinder = Cylinder(circle, self.height) brep = cylinder.ToBrep(True, True) e.Display.DrawBrepShaded(brep, self.material)
def draw_cylinders(cylinders, cap=False, **kwargs): """Draw cylinders and optionally set individual name, color, and layer properties. Parameters ---------- cylinders : list of dict A list of cylinder dictionaries. cap : bool, optional Returns ------- list of GUID Notes ----- A cylinder dict has the following schema: .. code-block:: python Schema({ 'start': And(list, lambda x: len(x) == 3), 'end': And(list, lambda x: len(x) == 3), 'radius': And(Or(int, float), lambda x: x > 0.0), Optional('name', default=''): str, Optional('color', default=None): (lambda x: len(x) == 3 and all(0 <= y <= 255 for y in x)), Optional('layer', default=None): str, }) """ guids = [] for c in iter(cylinders): start = c['start'] end = c['end'] radius = c['radius'] name = c.get('name', '') color = c.get('color') layer = c.get('layer') if radius < TOL: continue base = Point3d(*start) normal = Point3d(*end) - base height = normal.Length if height < TOL: continue plane = Plane(base, normal) circle = Circle(plane, radius) cylinder = Cylinder(circle, height) brep = cylinder.ToBrep(cap, cap) if not brep: continue guid = add_brep(brep) if not guid: continue obj = find_object(guid) if not obj: continue attr = obj.Attributes if color: attr.ObjectColor = FromArgb(*color) attr.ColorSource = ColorFromObject else: attr.ColorSource = ColorFromLayer if layer and find_layer_by_fullpath: index = find_layer_by_fullpath(layer, True) if index >= 0: attr.LayerIndex = index attr.Name = name attr.WireDensity = -1 obj.CommitChanges() guids.append(guid) return guids