AddPolyline
Rhino.DocObjects.Tables.ObjectTable
Back to AddPolyline on ObjectTable
Examples
using Rhino;
using Rhino.Commands;
using System.Linq;
using Rhino.Geometry;
using Rhino.Input;
using Rhino.DocObjects;
using System.Collections.Generic;
namespace examples_cs
{
public class TightBoundingBoxCommand : Command
{
public override string EnglishName { get { return "csTightBoundingBox"; } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
ObjRef obj_ref;
var rc = RhinoGet.GetOneObject(
"Select surface to split", true, ObjectType.Surface, out obj_ref);
if (rc != Result.Success)
return rc;
var surface = obj_ref.Surface();
if (surface == null)
return Result.Failure;
obj_ref = null;
rc = RhinoGet.GetOneObject(
"Select cutting curve", true, ObjectType.Curve, out obj_ref);
if (rc != Result.Success)
return rc;
var curve = obj_ref.Curve();
if (curve == null)
return Result.Failure;
var brep_face = surface as BrepFace;
if (brep_face == null)
return Result.Failure;
var split_brep = brep_face.Split(
new List<Curve> {curve}, doc.ModelAbsoluteTolerance);
if (split_brep == null)
{
RhinoApp.WriteLine("Unable to split surface.");
return Result.Nothing;
}
var meshes = Mesh.CreateFromBrep(split_brep);
foreach (var mesh in meshes)
{
var bbox = mesh.GetBoundingBox(true);
switch (bbox.IsDegenerate(doc.ModelAbsoluteTolerance))
{
case 3:
case 2:
return Result.Failure;
case 1:
var rectangle_corners = bbox.GetCorners().Distinct().ToList();
rectangle_corners.Add(rectangle_corners[0]);
doc.Objects.AddPolyline(rectangle_corners);
doc.Views.Redraw();
break;
case 0:
var brep_box = new Box(bbox).ToBrep();
doc.Objects.AddBrep(brep_box);
doc.Views.Redraw();
break;
}
}
return Result.Success;
}
}
}
from scriptcontext import doc
import rhinoscriptsyntax as rs
from Rhino.Geometry import *
from Rhino.Input import *
from Rhino.DocObjects import *
from Rhino.Commands import *
from System.Collections.Generic import *
def RunCommand():
rc, obj_ref = RhinoGet.GetOneObject(
"Select surface to split", True, ObjectType.Surface)
if rc != Result.Success:
return rc
brep_face = obj_ref.Surface()
if brep_face == None:
return Result.Failure
rc, obj_ref = RhinoGet.GetOneObject(
"Select cutting curve", True, ObjectType.Curve)
if rc != Result.Success:
return rc
curve = obj_ref.Curve()
if curve == None:
return Result.Failure
curves = List[Curve]([curve])
split_brep = brep_face.Split(
curves, doc.ModelAbsoluteTolerance)
if split_brep == None:
RhinoApp.WriteLine("Unable to split surface.")
return Result.Nothing
meshes = Mesh.CreateFromBrep(split_brep)
print type(meshes)
for mesh in meshes:
bbox = mesh.GetBoundingBox(True)
bbox_type = bbox.IsDegenerate(doc.ModelAbsoluteTolerance)
if bbox_type == 1:
box_corners = bbox.GetCorners()
rectangle_corners = []
for corner_point in box_corners:
if corner_point not in rectangle_corners:
rectangle_corners.append(corner_point)
rectangle_corners.append(rectangle_corners[0])
doc.Objects.AddPolyline(rectangle_corners)
doc.Views.Redraw()
elif bbox_type == 0:
brep_box = Box(bbox).ToBrep()
doc.Objects.AddBrep(brep_box)
doc.Views.Redraw()
else:
return Result.Failure
return Result.Success
if __name__ == "__main__":
RunCommand()
Imports Rhino
Imports Rhino.Commands
Imports System.Linq
Imports Rhino.Geometry
Imports Rhino.Input
Imports Rhino.DocObjects
Imports System.Collections.Generic
Namespace examples_vb
Public Class TightBoundingBoxCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbTightBoundingBox"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Dim obj_ref As ObjRef = Nothing
Dim rc = RhinoGet.GetOneObject("Select surface to split", True, ObjectType.Surface, obj_ref)
If rc <> Result.Success Then
Return rc
End If
Dim surface = obj_ref.Surface()
If surface Is Nothing Then
Return Result.Failure
End If
obj_ref = Nothing
rc = RhinoGet.GetOneObject("Select cutting curve", True, ObjectType.Curve, obj_ref)
If rc <> Result.Success Then
Return rc
End If
Dim curve = obj_ref.Curve()
If curve Is Nothing Then
Return Result.Failure
End If
Dim brep_face = TryCast(surface, BrepFace)
If brep_face Is Nothing Then
Return Result.Failure
End If
Dim split_brep = brep_face.Split(New List(Of Curve)() From { _
curve _
}, doc.ModelAbsoluteTolerance)
If split_brep Is Nothing Then
RhinoApp.WriteLine("Unable to split surface.")
Return Result.[Nothing]
End If
Dim meshes = Mesh.CreateFromBrep(split_brep)
For Each mesh__1 As Mesh In meshes
Dim bbox = mesh__1.GetBoundingBox(True)
Select Case bbox.IsDegenerate(doc.ModelAbsoluteTolerance)
Case 3, 2
Return Result.Failure
Exit Select
Case 1
Dim rectangle_corners = bbox.GetCorners().Distinct().ToList()
rectangle_corners.Add(rectangle_corners(0))
doc.Objects.AddPolyline(rectangle_corners)
doc.Views.Redraw()
Exit Select
Case 0
Dim brep_box = New Box(bbox).ToBrep()
doc.Objects.AddBrep(brep_box)
doc.Views.Redraw()
Exit Select
End Select
Next
Return Result.Success
End Function
End Class
End Namespace