public CONSTRAINT(NXOpen.Positioning.Constraint nxConstraint, ASSEMBLY assemManager) { assemManager_ = assemManager; nxConstraintRefGeoms = nxConstraint.GetReferences(); //get number of reference geometry related with current constraint numRefGeoms = nxConstraintRefGeoms.Length; //Make array to save reference geometries and their corresponding parts in TransCAD tcad_refGeomRelatedParts = new TransCAD.Part[numRefGeoms]; tcad_RefGeoms = new TransCAD.Reference[numRefGeoms]; refGeomPartPositions = new Point3d[numRefGeoms]; refGeomPartOrientations = new Matrix3x3[numRefGeoms]; nx_RefGeoms = new NXObject[numRefGeoms]; //for each reference geometry in constraint for (int i = 0; i < numRefGeoms; i++) { ConstraintReference nxConstraintRefGeom = nxConstraintRefGeoms[i]; nx_RefGeoms[i] = nxConstraintRefGeom.GetGeometry(); //identify reference related part's index by name from NX int refGeomPartIdx = 0; string refCompName = nx_RefGeoms[i].OwningComponent.DisplayName; for (int k = 0; k < assemManager_.numComponents; k++) { if (assemManager_.nxCompNames[k] == refCompName) { refGeomPartIdx = k; } } //get TransCAD part info related with current reference geometry tcad_refGeomRelatedParts[i] = assemManager_.tcad_PartList[refGeomPartIdx]; //get current TransCAD part's position and orientation to convert world coordinate(from NX) to local coordinate(in TransCAD) refGeomPartPositions[i] = assemManager_.componentPositions[refGeomPartIdx]; refGeomPartOrientations[i] = assemManager_.componentOrientations[refGeomPartIdx]; } }
public CONSTRAINTCoaxial(NXOpen.Positioning.Constraint nxConstraint, ASSEMBLY assemManager) : base(nxConstraint, assemManager) { }
static void Main(string[] args) { nxSession = Session.GetSession(); ufSession = UFSession.GetUFSession(); PartLoadStatus partLoadStatus1; //ArrayList tcad_PartList = new ArrayList(); string fileName = args[0]; //"D:\\UG_MACRO\\TEST MODEL\\Amodels\\A1\\Pre\\A1.prt"; NXOpen.Part assemblyFilePart = nxSession.Parts.OpenDisplay(fileName, out partLoadStatus1); ASSEMBLY assemManager = new ASSEMBLY(); assemManager.InitializeTransCAD(); assemManager.loadAssemblyInfo(assemblyFilePart); int numConstraints = assemManager.nxConstraints.Length; List <CONSTRAINT> preConstraints = new List <CONSTRAINT>(); //for each constraint for (int i = 0; i < numConstraints; i++) { NXOpen.Positioning.Constraint nxConstraint = assemManager.nxConstraints[i]; Constraint.Type constraintType = nxConstraint.ConstraintType; System.Console.WriteLine(constraintType.ToString()); ConstraintReference[] nxConstraintRefGeoms = nxConstraint.GetReferences(); if (constraintType == Constraint.Type.Touch) { //validation if (nxConstraintRefGeoms.Length != 2) { System.Console.WriteLine("Touch Align Constraint should have only 2 reference geometries!"); continue; } //Coaxial /* * if (nxConstraintRefGeoms[0].GetUsesGeometryAxis() && nxConstraintRefGeoms[1].GetUsesGeometryAxis()) * { * preConstraints.Add(new CONSTRAINTCoaxial(nxConstraint, assemManager)); * } */ //Incidence?? else { preConstraints.Add(new CONSTRAINTIncidence(nxConstraint, assemManager)); } } //coaxial-edge-based-fit-Constraint in NX else if (constraintType == Constraint.Type.Fit) { preConstraints.Add(new CONSTRAINTCoaxial(nxConstraint, assemManager)); } else if (constraintType == Constraint.Type.Fix) { } else if (constraintType == Constraint.Type.Distance) { } else if (constraintType == Constraint.Type.Angle) { } } //for each constraint for (int i = 0; i < preConstraints.Count(); i++) { preConstraints[i].getNXInfo(); } //for each constraint for (int i = 0; i < preConstraints.Count(); i++) { preConstraints[i].toTransCAD(); } assemManager.UninitializeTransCAD(); }
public CONSTRAINTIncidence(NXOpen.Positioning.Constraint nxConstraint, ASSEMBLY assemManager) : base(nxConstraint, assemManager) { nxConst = nxConstraint; }