thanks for the extensive answer. I will have a look at the vb.net code then and see if I can understand...
On Feb 24, 6:36 pm, Rajaa <[email protected]> wrote: > Hi J.R. > > You are right, the C# has a problem. > The VB has a work around if you are able to use VB.NET in this case. > See the following sample of a Grasshopper Sweep1 component done in > VB.NET: > > Class Grasshopper_Custom_Script > #Region "members" > Private app As MRhinoApp > Private doc As MRhinoDoc > > Public Breps As System.Object > #End Region > > Sub RunScript(ByVal Rail As OnCurve, ByVal Shapes As List(Of > OnCurve)) > Dim Sweep1_Breps As New List(Of OnBrep) > > 'Call sweep function > Sweep1(Rail, Shapes, Sweep1_Breps) > > 'Return Breps > Breps = Sweep1_Breps > End Sub > > #Region "Additional methods and Type declarations" > Sub Sweep1( ByVal Rail As IOnCurve, ByVal sCurves As List(Of > OnCurve), ByRef Sweep1_Breps As List(Of OnBrep)) > > 'Define a new class that contains sweep1 arguments > Dim args As New MArgsRhinoSweep1 > > 'Set the 2 rails > Dim Edge As New MRhinoPolyEdge > Edge.Append(Rail.DuplicateCurve()) > 'Add rails to sweep arguments > args.m_rail_curve = Edge > args.m_bUsePivotPoint = False > > Dim curves As New List(Of OnCurve) > > 'Loop through section curves > For Each crv As IOnCurve In sCurves > If (crv IsNot Nothing) Then > Dim dup_crv As OnCurve = crv.DuplicateCurve() > Dim t As Double = 0 > edge.GetClosestPoint(dup_crv.PointAtStart(), t) > curves.Add(dup_crv) > args.m_rail_params.Append(t) > End If > Next > > 'Set shapes > args.m_shape_curves = curves.ToArray() > > 'Set the rest of parameters > args.m_bUsePoints(0) = 0 > args.m_bUsePoints(1) = 0 > args.m_bClosed = False > args.m_style = 0 > args.m_planar_up = New On3dVector(OnUtil.On_zaxis) > args.m_simplify = 0 'Simplify method for shape curves > args.m_rebuild_count = -1 'Sample point count for rebuilding > shapes > args.m_refit_tolerance = doc.AbsoluteTolerance() > args.m_sweep_tolerance = doc.AbsoluteTolerance() > args.m_angle_tolerance = doc.AngleToleranceRadians() > args.m_miter_type = 0 '0: don't miter > > Dim sBreps() As OnBrep = Nothing > If (RhUtil.RhinoSweep1(args, sBreps)) Then > For Each b As OnBrep In sBreps > Sweep1_Breps.Add(b) > Next > End If > > Return > End Sub > #End Region > End Class > > On Feb 24, 4:06 am, "J.R." <[email protected]> wrote: > > > Hi, > > We just try to make a custom C# sweep1 component which wont work. The > > problem we tracked down lies somewhere in the MRhinoObjRef so the > > rail_curve stays invalid. If anyone has an idea it would be helpful. > > The .net example on the Rhinowebsite deals with selected objects, > > where the ObjectId is passed to MRhinoObjRef, so I just tried that too > > in GH: MRhinoObjRef rail_ref = new MRhinoObjRef(rail.ModelObjectId()); > > but something doesnt work: > > > // generate needed Objects > > MRhinoPolyEdge edge = new MRhinoPolyEdge(); > > OnBrep[] srf = new OnBrep[1]; > > MArgsRhinoSweep1 args = new MArgsRhinoSweep1(); > > > // convert the shapecurve into an Array (as there is only one > > here) > > OnCurve[] shapes = new OnCurve[1]; > > shapes[0] = shape; > > > // converting the rail curve > > MRhinoObjRef rail_ref = new MRhinoObjRef(rail.ModelObjectId()); > > IRhinoObject rail_obj = rail_ref.Object(); > > IOnCurve rail_crv = rail_ref.Curve(); > > > // filling the edge with input > > edge.Create(rail_crv, rail_obj); > > > // filling the args with input > > args.m_shape_curves = shapes; > > args.m_rail_curve = edge; > > > // do the sweep > > RhUtil.RhinoSweep1(ref args, out srf); > > > // output the resulting surface > > A = srf;
