using Rhino;
using Rhino.Commands;
using System.IO;
using System.Collections.Generic;
using System;
namespace test
{
[System.Runtime.InteropServices.Guid("60B9CFA5-8C02-4AF2-A6EA-0A4BECA5D2F9"), Rhino.Commands.CommandStyle(Rhino.Commands.Style.ScriptRunner)]
public class test : Command
{
static test _instance;
public test()
{
_instance = this;
}
///The only instance of the test command.
public static test Instance
{
get
{
return _instance;
}
}
public override string EnglishName
{
get
{
return "test";
}
}
protected override Result RunCommand(RhinoDoc doc,RunMode mode)
{
//select srf0 and srf1
#region
Rhino.Geometry.Surface srf0 = null, srf1 = null;
Rhino.RhinoDoc.ActiveDoc.Objects.UnselectAll();
var getsrf0 = new Rhino.Input.Custom.GetObject();
getsrf0.SetCommandPrompt("Select Surface 0");
getsrf0.GeometryFilter = Rhino.DocObjects.ObjectType.Surface;
getsrf0.GetMultiple(1,1);
if(getsrf0.CommandResult() != Rhino.Commands.Result.Success)
{
return Result.Failure;
}
var objrefs = getsrf0.Objects();
for(int i = 0;i < objrefs.Length;i++)
{
var objref = objrefs[i];
srf0 = objref.Surface();
if(srf0 == null)
{
continue;
}
}
Rhino.RhinoDoc.ActiveDoc.Objects.UnselectAll();
Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
var getsrf1 = new Rhino.Input.Custom.GetObject();
getsrf1.SetCommandPrompt("Select Surface 1");
getsrf1.DisablePreSelect();
getsrf1.GeometryFilter = Rhino.DocObjects.ObjectType.Surface;
getsrf1.GetMultiple(1,1);
if(getsrf1.CommandResult() != Rhino.Commands.Result.Success)
{
return Result.Failure;
}
var objrefs1 = getsrf1.Objects();
for(int i = 0;i < objrefs1.Length;i++)
{
var objref = objrefs1[i];
srf1 = objref.Surface();
if(srf1 == null)
{
continue;
}
}
if(srf0==null||srf1==null)
{ return Result.Failure; }
#endregion
var pt0 = srf0.PointAt(srf0.Domain(0).Min,srf0.Domain(1).Min);
var pt1 = srf1.PointAt(srf1.Domain(0).Min,srf1.Domain(1).Min);
var pt_2d_0 = new Rhino.Geometry.Point2d(pt0);
var pt_2d_1 = new Rhino.Geometry.Point2d(pt1);
var pts = new List();
var getpts = new Rhino.Input.Custom.GetObject();
getpts.SetCommandPrompt("Select points on srf 0)");
getpts.GeometryFilter = Rhino.DocObjects.ObjectType.Point;
getpts.DisablePreSelect();
getpts.GetMultiple(1,0);
if(getpts.CommandResult() != Rhino.Commands.Result.Success)
{ return Result.Failure; }
var num_oggetti = getpts.ObjectCount;
if(num_oggetti==0)
{ return Result.Failure; }
var ids = new List();
for(int i = 0;i < num_oggetti;i++)
{
var pt = getpts.Object(i);
var punto_rhobj = pt.Object();
if(pt == null ||punto_rhobj == null)
{
continue;
}
Rhino.Geometry.Point3d punto_stack = pt.SelectionPoint();
pts.Add(punto_stack);
ids.Add(punto_rhobj.Id);
}
Rhino.Geometry.Morphs.SporphSpaceMorph morph_srf_up_srf_down = new Rhino.Geometry.Morphs.SporphSpaceMorph(
srf0,
srf1,
pt_2d_0,
pt_2d_1
);
morph_srf_up_srf_down.PreserveStructure=true;
if(!morph_srf_up_srf_down.IsValid)
{
System.Windows.Forms.MessageBox.Show("Unvalid morph");
}
for(int i = 0;i < ids.Count;i++)
{
Rhino.RhinoDoc.ActiveDoc.Objects.Hide(ids[i],true);
}
for(int i = 0;i < pts.Count;i++)
{
var pt = new Rhino.Geometry.Point3d(pts[i]);
var pt_morph = morph_srf_up_srf_down.MorphPoint(pt);
var id_pt_morph = Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(pt_morph);
if(id_pt_morph!=Guid.Empty)
{
Rhino.RhinoDoc.ActiveDoc.Objects.Select(id_pt_morph,true);
Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
System.Threading.Thread.Sleep(300);
Rhino.RhinoDoc.ActiveDoc.Objects.UnselectAll();
Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
Rhino.RhinoDoc.ActiveDoc.Objects.Delete(id_pt_morph,true);
}
}
for(int i = 0;i < ids.Count;i++)
{
Rhino.RhinoDoc.ActiveDoc.Objects.Show(ids[i],true);
}
return Result.Success;
}
}
}