Beispiel #1
0
        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);
             * }
             */
        }