public static ISegment MakeOneHatch(IPolyline pSubPL, double dist, double m, double numhatch, double dTxtInterval, double dHatchLen, double dHatchOffset) { ILine pL = new LineClass(); int result; ISegmentM pSegM; Math.DivRem((int)numhatch, (int)dTxtInterval, out result); if (!(result == 0)) { if (dHatchOffset == 0) pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, dist, false, (dHatchLen * 0.5), pL); else if (dHatchOffset > 0) pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, dist, false, (dHatchLen * 0.5) + dHatchOffset, pL); else if (dHatchOffset < 0) { pSubPL.ReverseOrientation(); pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, pSubPL.Length - dist, false, dHatchLen + Math.Abs(dHatchOffset), pL); pSubPL.ReverseOrientation(); } } ICurve pCurve; if (dHatchOffset != 0) { pL.GetSubcurve(Math.Abs(dHatchOffset), pL.Length, false, out pCurve); pSegM = pCurve as ISegmentM; } else pSegM = pL as ISegmentM; pSegM.SetMs(m, m); return pSegM as ISegment; }