Skip to content

Commit 4a7c982

Browse files
committed
Add ellipse artists for rhino/gh
1 parent b1c7276 commit 4a7c982

File tree

7 files changed

+107
-0
lines changed

7 files changed

+107
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
* Added `EllipseArtist` to `compas_rhino` and `compas_ghpython`.
13+
1214
### Changed
1315

1416
* Changed `Network.is_planar` to rely on `NetworkX` instead `planarity` for planarity checking.

docs/reference/compas_ghpython.artists.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Classes
2525
ConeArtist
2626
CurveArtist
2727
CylinderArtist
28+
EllipseArtist
2829
FrameArtist
2930
LineArtist
3031
MeshArtist

docs/reference/compas_rhino.artists.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Classes
1919
ConeArtist
2020
CurveArtist
2121
CylinderArtist
22+
EllipseArtist
2223
FrameArtist
2324
LineArtist
2425
MeshArtist

src/compas_ghpython/artists/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from compas.geometry import Cone
1010
from compas.geometry import Curve
1111
from compas.geometry import Cylinder
12+
from compas.geometry import Ellipse
1213
from compas.geometry import Frame
1314
from compas.geometry import Line
1415
from compas.geometry import Point
@@ -32,6 +33,7 @@
3233
from .coneartist import ConeArtist
3334
from .curveartist import CurveArtist
3435
from .cylinderartist import CylinderArtist
36+
from .ellipseartist import EllipseArtist
3537
from .frameartist import FrameArtist
3638
from .lineartist import LineArtist
3739
from .meshartist import MeshArtist
@@ -56,6 +58,7 @@ def register_artists():
5658
Artist.register(Cone, ConeArtist, context="Grasshopper")
5759
Artist.register(Curve, CurveArtist, context="Grasshopper")
5860
Artist.register(Cylinder, CylinderArtist, context="Grasshopper")
61+
Artist.register(Ellipse, EllipseArtist, context="Grasshopper")
5962
Artist.register(Frame, FrameArtist, context="Grasshopper")
6063
Artist.register(Line, LineArtist, context="Grasshopper")
6164
Artist.register(Mesh, MeshArtist, context="Grasshopper")
@@ -81,6 +84,7 @@ def register_artists():
8184
"ConeArtist",
8285
"CurveArtist",
8386
"CylinderArtist",
87+
"EllipseArtist",
8488
"FrameArtist",
8589
"LineArtist",
8690
"MeshArtist",
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from __future__ import print_function
2+
from __future__ import absolute_import
3+
from __future__ import division
4+
5+
from compas_rhino import conversions
6+
7+
from compas.artists import GeometryArtist
8+
from .artist import GHArtist
9+
10+
11+
class EllipseArtist(GHArtist, GeometryArtist):
12+
"""Artist for drawing ellipses.
13+
14+
Parameters
15+
----------
16+
ellipse : :class:`~compas.geometry.Ellipse`
17+
A COMPAS ellipse.
18+
**kwargs : dict, optional
19+
Additional keyword arguments.
20+
21+
"""
22+
23+
def __init__(self, ellipse, **kwargs):
24+
super(EllipseArtist, self).__init__(geometry=ellipse, **kwargs)
25+
26+
def draw(self):
27+
"""Draw the ellipse.
28+
29+
Returns
30+
-------
31+
:rhino:`Rhino.Geometry.Ellipse`
32+
33+
"""
34+
ellipse = conversions.ellipse_to_rhino(self.geometry)
35+
36+
if self.transformation:
37+
transformation = conversions.transformation_to_rhino(self.transformation)
38+
ellipse.Transform(transformation)
39+
40+
return ellipse

src/compas_rhino/artists/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from compas.artists import Artist
55

66
from compas.geometry import Circle
7+
from compas.geometry import Ellipse
78
from compas.geometry import Frame
89
from compas.geometry import Line
910
from compas.geometry import Plane
@@ -32,20 +33,23 @@
3233

3334
from .artist import RhinoArtist
3435
from .circleartist import CircleArtist
36+
from .ellipseartist import EllipseArtist
3537
from .frameartist import FrameArtist
3638
from .lineartist import LineArtist
3739
from .planeartist import PlaneArtist
3840
from .pointartist import PointArtist
3941
from .polygonartist import PolygonArtist
4042
from .polylineartist import PolylineArtist
4143
from .vectorartist import VectorArtist
44+
4245
from .boxartist import BoxArtist
4346
from .capsuleartist import CapsuleArtist
4447
from .coneartist import ConeArtist
4548
from .cylinderartist import CylinderArtist
4649
from .polyhedronartist import PolyhedronArtist
4750
from .sphereartist import SphereArtist
4851
from .torusartist import TorusArtist
52+
4953
from .meshartist import MeshArtist
5054
from .networkartist import NetworkArtist
5155
from .volmeshartist import VolMeshArtist
@@ -68,6 +72,7 @@ def redraw_rhino():
6872
@plugin(category="factories", requires=["Rhino"])
6973
def register_artists():
7074
Artist.register(Circle, CircleArtist, context="Rhino")
75+
Artist.register(Ellipse, EllipseArtist, context="Rhino")
7176
Artist.register(Frame, FrameArtist, context="Rhino")
7277
Artist.register(Line, LineArtist, context="Rhino")
7378
Artist.register(Plane, PlaneArtist, context="Rhino")
@@ -94,6 +99,7 @@ def register_artists():
9499
__all__ = [
95100
"RhinoArtist",
96101
"CircleArtist",
102+
"EllipseArtist",
97103
"FrameArtist",
98104
"LineArtist",
99105
"PlaneArtist",
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from __future__ import print_function
2+
from __future__ import absolute_import
3+
from __future__ import division
4+
5+
import scriptcontext as sc # type: ignore
6+
7+
from compas.artists import GeometryArtist
8+
from compas.colors import Color
9+
from compas_rhino.conversions import ellipse_to_rhino
10+
11+
from compas_rhino.conversions import transformation_to_rhino
12+
from .artist import RhinoArtist
13+
from ._helpers import attributes
14+
15+
16+
class EllipseArtist(RhinoArtist, GeometryArtist):
17+
"""Artist for drawing ellipses.
18+
19+
Parameters
20+
----------
21+
ellipse : :class:`~compas.geometry.Ellipse`
22+
A COMPAS ellipse.
23+
**kwargs : dict, optional
24+
Additional keyword arguments.
25+
26+
"""
27+
28+
def __init__(self, ellipse, **kwargs):
29+
super(EllipseArtist, self).__init__(geometry=ellipse, **kwargs)
30+
31+
def draw(self, color=None):
32+
"""Draw the ellipse.
33+
34+
Parameters
35+
----------
36+
color : rgb1 | rgb255 | :class:`~compas.colors.Color`, optional
37+
The RGB color of the ellipse.
38+
39+
Returns
40+
-------
41+
System.Guid
42+
The GUID of the created Rhino object.
43+
44+
"""
45+
color = Color.coerce(color) or self.color
46+
attr = attributes(name=self.geometry.name, color=color, layer=self.layer)
47+
48+
geometry = ellipse_to_rhino(self.geometry)
49+
50+
if self.transformation:
51+
geometry.Transform(transformation_to_rhino(self.transformation))
52+
53+
return sc.doc.Objects.AddEllipse(geometry, attr)

0 commit comments

Comments
 (0)