/// <summary>
        /// This function creates a new support structure
        /// you can specify the:
        /// Foot Bottom Radius  - fbrad
        /// Foot Top Radius     - ftrad
        /// Head Bottom Radius  - hbrad
        /// Head Top Radius     - htrad
        /// 
        /// as well as the segment lengths from bottom to top D1,D2,D3
        /// you can also specify the number of divisions in the circle - divs
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <param name="d3"></param>
        public void Create(SupportConfig SC, Object3d supporting, float d1, float d2, float d3)
        {
            try
            {
                mSC = SC.Clone();
                m_tipheight = 2;// d3;
                m_baseheight = d1;

                m_supporting = supporting;
                float zlev = 0.0f; // start at the bottom of the cylinder
                s1i = 0; // set 0 to be the starting index for the bottom of the foot
                GenerateCirclePoints(mSC.fbrad, mSC.cdivs, zlev, true); // foot bottom
                zlev += d1;
                //now the top of the foot
                s2i = m_lstpoints.Count;
                GenerateCirclePoints(mSC.ftrad, mSC.cdivs, zlev, false); // foot top

                //zlev += d1;
                s3i = m_lstpoints.Count;
                GenerateCirclePoints(mSC.ftrad, mSC.cdivs, zlev, false); // foot top

                zlev += d2;

                //now the bottom of the shaft
                s4i = m_lstpoints.Count;
                GenerateCirclePoints(mSC.hbrad, mSC.cdivs, zlev, false); // bottom of head
                zlev += d3;
                //now the top of the shaft, bottom of the head
                s5i = m_lstpoints.Count;
                GenerateCirclePoints(mSC.htrad, mSC.cdivs, zlev, true); // top of head
                psi_base = m_lstpolys.Count; // should be 0 index
                MakeTopBottomFace(s1i, mSC.cdivs, false);// bottom
                //MakeTopBottomFace(s5i, mSC.cdivs, true);// top
                makeWalls(s1i, s2i, mSC.cdivs);
                pei_base = m_lstpolys.Count; // should be top index of

                makeWalls(s2i, s3i - mSC.cdivs - 1, mSC.cdivs);
                makeWalls(s3i, s4i - (2*mSC.cdivs) - 1, mSC.cdivs);

                psi_tip = m_lstpolys.Count;
                makeWalls(s4i, s5i - (3 * mSC.cdivs) - 1, mSC.cdivs);
                MakeTopBottomFace(s5i, mSC.cdivs, true);// top
                pei_tip = m_lstpolys.Count;

                Update(); // update should only be called for new objects, otherwise, use the move/scale/rotate functions
                SetColor(Color.Yellow);
                ScaleToHeight(d1 + d2 + d3);
            }
            catch (Exception ex)
            {
                DebugLogger.Instance().LogError(ex.Message);

            }
        }