public override bool TryGet(string name, out IXDimension ent) { var dimNameParts = name.Split('@'); if (dimNameParts.Length != 2) { throw new Exception("Invalid dimension name. Name must be specified in the following format: DimName@FeatureName"); } var dimName = dimNameParts[0]; var featName = dimNameParts[1]; IXDimension dim = null; if (m_FeatMgr.TryGet(featName, out IXFeature feat)) { dim = feat.Dimensions.FirstOrDefault( d => string.Equals(d.Name, $"{dimName}@{featName}", StringComparison.CurrentCultureIgnoreCase)); } if (dim != null) { ent = dim; return(true); } else { ent = null; return(false); } }
public override bool TryGet(string name, out IXDimension ent) { var dimNameParts = name.Split('@'); var dimName = dimNameParts[0]; var featName = ""; if (dimNameParts.Length == 2) { featName = dimNameParts[0]; if (!string.Equals(featName, m_Feat.Name, StringComparison.CurrentCultureIgnoreCase)) { throw new Exception("Specified dimension does not belong to this feature"); } } var dim = this.FirstOrDefault( d => string.Equals(d.Name, dimName, StringComparison.CurrentCultureIgnoreCase)); if (dim != null) { ent = dim; return(true); } else { ent = null; return(false); } }
public void Init(IXApplication app, IXDocument model) { m_Model = model; m_DescPrp = m_Model.Properties["Description"]; m_D1Dim = m_Model.Dimensions["D1@Sketch1"]; m_Model.Closing += OnModelClosing; m_Model.Selections.NewSelection += OnNewSelection; m_DescPrp.ValueChanged += OnPropertyValueChanged; m_D1Dim.ValueChanged += OnDimensionValueChanged; }
/// <summary> /// /// </summary> /// <typeparam name="TParams"></typeparam> /// <param name="featDef"></param> /// <param name="dim"></param> /// <param name="centerPt">Point at the center of the radiam dimension (fixed point)</param> /// <param name="refPt">Reference point of the radial dimension (fixed point)</param> /// <param name="rotVec">Vector, normal to the radial dimension extension line</param> public static void AlignAngularDimension <TParams>(this IXCustomFeatureDefinition <TParams> featDef, IXDimension dim, Point centerPt, Point refPt, Vector rotVec) where TParams : class, new() { var angle = dim.GetValue(); var dirVec = new Vector(refPt.X - centerPt.X, refPt.Y - centerPt.Y, refPt.Z - centerPt.Z); var contLegLenth = dirVec.GetLength(); var alignDir = rotVec.Cross(dirVec); var oppLegLength = contLegLenth * Math.Tan(angle); var midPt = refPt.Move(alignDir, oppLegLength); featDef.AlignDimension(dim, new Point[] { refPt, midPt, centerPt }, null, null); }
protected override IXDimension[] GetDimensions(IXCustomFeature feat) { var dispDimsObj = ((SwMacroFeature)feat).FeatureData.GetDisplayDimensions() as object[]; if (dispDimsObj != null) { var dimensions = new IXDimension[dispDimsObj.Length]; for (int i = 0; i < dispDimsObj.Length; i++) { dimensions[i] = new SwDimension(dispDimsObj[i] as IDisplayDimension); dispDimsObj[i] = null; } return(dimensions); } else { return(null); } }
private void OnDimensionValueChanged(IXDimension dim, double newVal) { //TODO: handle dimension change }
private static Point CalculateEndPoint(IXDimension dim, Point startPt, Vector dir) { var length = dim.GetValue(); return(startPt.Move(dir, length)); }
public static void AlignLinearDimension <TParams>(this IXCustomFeatureDefinition <TParams> featDef, IXDimension dim, Point originPt, Vector dir) where TParams : class, new() { var yVec = new Vector(0, 1, 0); Vector extDir; if (dir.IsSame(yVec)) { extDir = new Vector(1, 0, 0); } else { extDir = yVec.Cross(dir); } var endPt = CalculateEndPoint(dim, originPt, dir); featDef.AlignDimension(dim, new Point[] { originPt, endPt }, dir, extDir); }
public static void AlignRadialDimension <TParams>(this IXCustomFeatureDefinition <TParams> featDef, IXDimension dim, Point originPt, Vector normal) where TParams : class, new() { Vector dir = null; Vector extDir = null; var yVec = new Vector(0, 1, 0); if (normal.IsSame(yVec)) { dir = new Vector(1, 0, 0); } else { dir = normal.Cross(yVec); } extDir = normal.Cross(dir); var endPt = CalculateEndPoint(dim, originPt, normal); featDef.AlignDimension(dim, new Point[] { originPt, endPt }, dir, extDir); }
public abstract bool TryGet(string name, out IXDimension ent);