Материал: Параметрическое моделирование с использованием NX API. учебно-метод. пособие. Барабанов В.Ф., Нужный А.М

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 3.3. Результат работы программного кода

Создадим ещё один четырехугольник над цилидром, вращая который, получим заготовку под «шляпку» болта (рис. 3.4). Операция «вращение» выполним с параметром Positive, чтобы соединить две части.

Tag[] features2;

UFCurve.Line segment4 = new UFCurve.Line();

UFCurve.Line segment5 = new UFCurve.Line();

UFCurve.Line segment6 = new UFCurve.Line();

UFCurve.Line segment7 = new UFCurve.Line();

segment4.start_point = new double[3]; segment4.start_point[0] = 0.00; segment4.start_point[1] = 0.00; segment4.start_point[2] = height; segment4.end_point = new double[3]; segment4.end_point[0] = Radius * 1.5;

45

segment4.end_point[1] = 0.00; segment4.end_point[2] = height;

segment5.start_point = new double[3]; segment5.start_point[0] = Radius * 1.5; segment5.start_point[1] = 0.00; segment5.start_point[2] = height; segment5.end_point = new double[3]; segment5.end_point[0] = Radius * 1.5; segment5.end_point[1] = 0.00; segment5.end_point[2] = height * 1.25;

segment6.start_point = new double[3]; segment6.start_point[0] = Radius * 1.5; segment6.start_point[1] = 0.00; segment6.start_point[2] = height * 1.25; segment6.end_point = new double[3]; segment6.end_point[0] = 0.00; segment6.end_point[1] = 0.00; segment6.end_point[2] = height * 1.25;

segment7.start_point = new double[3]; segment7.start_point[0] = 0.00; segment7.start_point[1] = 0.00; segment7.start_point[2] = height * 1.25; segment7.end_point = new double[3]; segment7.end_point[0] = 0.00; segment7.end_point[1] = 0.00; segment7.end_point[2] = height;

Tag[] BoltArray1 = new Tag[5]; theUfSession.Curve.CreateLine(ref segment4, out BoltArray1[0]); theUfSession.Curve.CreateLine(ref segment5, out BoltArray1[1]); theUfSession.Curve.CreateLine(ref segment6, out BoltArray1[2]); theUfSession.Curve.CreateLine(ref segment7, out BoltArray1[3]);

46

double[] ref_pt2 = new double[3]; ref_pt1[0] = 0.00;

ref_pt1[1] = 0.00; ref_pt1[2] = height;

double[] direction2 = { 0.00, 0.00, 1.00 }; string[] limit2 = { "0", "360" };

theUfSession.Modl.CreateRevolved(BoltArray1, limit2, ref_pt2, direction2, FeatureSigns.Positive, out features2);

Рис. 3.4. Построенная программно «шляпка» болта

Следующая команда используется для скругления «шляпки» болта (рис. 3.5).

Tag feat1 = features2[0];

Tag cyl_tag, obj_id_camf, blend1; Tag[] Edge_array_cyl, list1, list2; int ecount;

theUfSession.Modl.AskFeatBody(feat1, out cyl_tag); theUfSession.Modl.AskBodyEdges(cyl_tag, out Edge_array_cyl); theUfSession.Modl.AskListCount(Edge_array_cyl, out

47

ecount);

ArrayList arr_list1 = new ArrayList(); ArrayList arr_list2 = new ArrayList();

for (int ii = 0; ii < ecount; ii++)

{

Tag edge;

theUfSession.Modl.AskListItem(Edge_array_cyl, ii, out edge); if (ii == 2)

{

arr_list2.Add(edge);

}

}

list2 = (Tag[])arr_list2.ToArray(typeof(Tag));

int allow_smooth = 0; int allow_cliff = 0; int allow_notch = 0; double vrb_tol = 0.0;

string rad1 = Convert.ToInt32(Radius).ToString(); theUfSession.Modl.CreateBlend(rad1, list2, allow_smooth,

allow_cliff, allow_notch, vrb_tol, out blend1);

Рис. 3.5. Скругление «шляпки» болта

48

Теперь необходимо добавить символическую резьбу на цилидр меньшего радиуса. Для этого добавим следующий код.

Tag feat = features1[0]; Tag[] FeatFaces;

int FacesCount, FaceType, FaceNormDir; Tag face, s_face, c_face, feature_eid; double[] point = new double[3]; double[] dir = new double[3];

double[] box = new double[6]; double radius, rad;

s_face = new Tag(); c_face = new Tag();

theUfSession.Modl.AskFeatFaces(feat, out FeatFaces); theUfSession.Modl.AskListCount(FeatFaces, out

FacesCount);

UFModl.SymbThreadData thread = new

UFModl.SymbThreadData();

for (int i = 0; i < FacesCount; i++)

{

theUfSession.Modl.AskListItem(FeatFaces, i, out face); theUfSession.Modl.AskFaceData(face, out FaceType,

point, dir, box, out radius, out rad, out FaceNormDir);

if (FaceType == 22)

{

s_face = face; //UI.GetUI().NXMessageBox.Show("Message", NXMessageBox.DialogType.Information, "Planar face");

}

if (FaceType == 16)

{

49

Источник: https://studfile.net/preview/16563646/