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); }
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); } }
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); }