public BeamData(double height, double width, double maxlength, _AcGe.Point3d p0, _AcGe.Point3d p1, _AcGe.Point3d pSide = new _AcGe.Point3d()) { BeamStartPoint = p0; BeamEndPoint = p1; BeamSidePoint = pSide; Height = height; Width = width; Length = BeamStartPoint.GetVectorTo(BeamEndPoint).Length; MaxLength = maxlength; if (Length > MaxLength) { MessageBox.Show("WARNING! - picked beam length is greater than maximum length for selected beam type."); } // // We need to check the incoming pSide var to see if we need to offset our beam to one side // or draw it on the centre line (the picked points form the centre line). // if (pSide.GetAsVector().Length == 0) { OffsetFactor = 0.5; // no offset so set offset factor to half width to draw on centre line } else { OffsetFactor = 1.0; // full offset required } }
public static double GetProjectionOnLine(AcGe.Point3d startPointLine, AcGe.Point3d endPointLine, AcGe.Point3d point) { double dirAngleLine = GetDirAngle(startPointLine, endPointLine); double dirAngleToPoint = GetDirAngle(startPointLine, point); double a = dirAngleToPoint - dirAngleLine; return(Math.Cos(a) * startPointLine.GetVectorTo(point).Convert2d(new AcGe.Plane()).Length); }