示例#1
0
        private AcadGeo.Point3d GetMainTeePos(AcadGeo.Point3d pos, AcadGeo.Point3d pos1, AcadGeo.Point3d pos2, AcadGeo.Point3d pos3)
        {
            AcadGeo.Vector3d vec1 = AcadFuncs.GetVec(pos, pos1);
            AcadGeo.Vector3d vec2 = AcadFuncs.GetVec(pos, pos2);
            AcadGeo.Vector3d vec3 = AcadFuncs.GetVec(pos, pos3);

            if (vec1.IsParallelTo(vec2))
            {
                return(pos3);
            }
            if (vec1.IsParallelTo(vec3))
            {
                return(pos2);
            }
            return(pos1);
        }
示例#2
0
        public void Rotate(AcadGeo.Vector3d vec)
        {
            AcadGeo.Vector3d axe = vec.CrossProduct(normal_vector);
            axe = axe.GetNormal();
            if (axe.IsEqualTo(new AcadGeo.Vector3d(0.0, 0.0, 0.0)))
            {
                return;
            }

            double angle = normal_vector.GetAngleTo(vec, axe);

            if (angle > AcadFuncs.kPI)
            {
                angle -= AcadFuncs.kPI;
            }
            if (angle > AcadFuncs.kPI * 0.5)
            {
                angle -= AcadFuncs.kPI;
            }
            AcadGeo.Tolerance tol = new AcadGeo.Tolerance(0.01, 0.01);
            if (!up_vector.IsParallelTo(axe, tol))
            {
                up_vector = up_vector.RotateBy(angle, axe);
            }
            if (!normal_vector.IsParallelTo(axe, tol))
            {
                normal_vector = normal_vector.RotateBy(angle, axe);
            }
        }
示例#3
0
        public void CalculateAngle()
        {
            AcadGeo.Vector3d vec1 = AcadFuncs.GetVec(branch_positions[0], position);
            AcadGeo.Vector3d vec2 = AcadFuncs.GetVec(branch_positions[1], position);

            if (vec1.IsParallelTo(vec2))
            {
                throw new Exception("Failed parse elbow");
            }
            angle = vec1.GetAngleTo(vec2);
        }