public void generateModel() { //TODO-simplify the curve and pass to model function simplifyCurve(ref ((Geometry.GeometryStroke)(stroke_g)).mPoints); //result curve is simplifiedCurve if (dynamicRender == "none" || simplifiedCurve == null) { return; } else if (dynamicRender == "Revolve") { if (mScene.iCurveList.Count == 0) { if (drawnType != DrawnType.In3D && curveOnObjRef != null) { simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), curveOnObjRef.ObjectId.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), curvePlane.Origin.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), curvePlane.Normal.ToString()); } mScene.iCurveList.Add(simplifiedCurve); } else { //get the curve info for later update use oldCurveOnObjID = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString()); oldPlaneOrigin = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneOrigin.ToString()); oldPlaneNormal = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneNormal.ToString()); simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), oldCurveOnObjID); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), oldPlaneOrigin); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), oldPlaneNormal); mScene.iCurveList[0] = simplifiedCurve; } dynamicBrep = UtilOld.RevolveFunc(ref mScene, ref mScene.iCurveList); } //TODO- fix the bug that when release, it accidently assign the old plane id to the curve. else if (dynamicRender == "Loft") { if (mScene.iCurveList.Count == 1) { if (drawnType != DrawnType.In3D && curveOnObjRef != null) { simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), curveOnObjRef.ObjectId.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), curvePlane.Origin.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), curvePlane.Normal.ToString()); } mScene.iCurveList.Add(simplifiedCurve); } else { oldCurveOnObjID = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString()); oldPlaneOrigin = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneOrigin.ToString()); oldPlaneNormal = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneNormal.ToString()); simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), oldCurveOnObjID); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), oldPlaneOrigin); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), oldPlaneNormal); mScene.iCurveList[1] = simplifiedCurve; } dynamicBrep = UtilOld.LoftFunc(ref mScene, ref mScene.iCurveList); } else if (dynamicRender == "Extrude") { //Rhino.Geometry.Vector3d heightVector = simplifiedCurve.PointAtEnd - simplifiedCurve.PointAtStart; Rhino.Geometry.Vector3d heightVector = simplifiedCurve.PointAtEnd - snapPointsList[0]; Rhino.Geometry.Vector3d planeNormal = UtilOld.getVectorfromString(localListCurve[0].GetUserString(CurveData.PlaneNormal.ToString())); planeNormal.Unitize(); double height = Rhino.Geometry.Vector3d.Multiply(heightVector, planeNormal) / planeNormal.Length; List <Point3d> extrudeCurveP = new List <Point3d>(); Point3d startP = snapPointsList[0]; extrudeCurveP.Add(startP); Point3d endP = new Point3d(startP.X + height * planeNormal.X, startP.Y + height * planeNormal.Y, startP.Z + height * planeNormal.Z); extrudeCurveP.Add(endP); //update the edit curve editCurve = Rhino.Geometry.NurbsCurve.Create(false, 1, extrudeCurveP.ToArray()); if (localListCurve.Count == 1) { if (drawnType != DrawnType.In3D && curveOnObjRef != null) { editCurve.SetUserString(CurveData.CurveOnObj.ToString(), curveOnObjRef.ObjectId.ToString()); editCurve.SetUserString(CurveData.PlaneOrigin.ToString(), curvePlane.Origin.ToString()); editCurve.SetUserString(CurveData.PlaneNormal.ToString(), curvePlane.Normal.ToString()); } localListCurve.Add(editCurve); } else { oldCurveOnObjID = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString()); oldPlaneOrigin = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneOrigin.ToString()); oldPlaneNormal = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneNormal.ToString()); editCurve.SetUserString(CurveData.CurveOnObj.ToString(), oldCurveOnObjID); editCurve.SetUserString(CurveData.PlaneOrigin.ToString(), oldPlaneOrigin); editCurve.SetUserString(CurveData.PlaneNormal.ToString(), oldPlaneNormal); localListCurve[1] = editCurve; } dynamicBrep = UtilOld.ExtrudeFunc(ref mScene, ref localListCurve); } else if (dynamicRender == "Sweep") { if (localListCurve.Count == 1) { if (drawnType != DrawnType.In3D && curveOnObjRef != null) { simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), curveOnObjRef.ObjectId.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), curvePlane.Origin.ToString()); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), curvePlane.Normal.ToString()); } localListCurve.Add(simplifiedCurve); } else { oldCurveOnObjID = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString()); oldPlaneOrigin = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneOrigin.ToString()); oldPlaneNormal = mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneNormal.ToString()); simplifiedCurve.SetUserString(CurveData.CurveOnObj.ToString(), oldCurveOnObjID); simplifiedCurve.SetUserString(CurveData.PlaneOrigin.ToString(), oldPlaneOrigin); simplifiedCurve.SetUserString(CurveData.PlaneNormal.ToString(), oldPlaneNormal); localListCurve[1] = simplifiedCurve; } dynamicBrep = UtilOld.SweepFun(ref mScene, ref localListCurve); } /* * mScene.iCurveList.Clear(); * //mScene.iCurveList = localListCurve; * foreach (Curve c in localListCurve) * { * mScene.iCurveList.Add(c); * } */ }