Привет Всем, кто хоть иногда пишет!
Дайте, pls, пример макроса результатом которого будет 3D тело вращения.
Дайте, pls, пример макроса результатом которого будет 3D тело вращения.
06.12.2010 08:52:18
Привет Всем, кто хоть иногда пишет!
Дайте, pls, пример макроса результатом которого будет 3D тело вращения. |
|
|
|
07.12.2010 12:45:08
Добрый день.
Тоже разбираюсь с этим вопросом. со справки по API видно: сама операция вращения RotateGenerator(ProxyObject3D * object, BaseAxis * axis, Body * profile, double angle); в нее нужно передать 1. ProxyObject3D * object - "3D объект внешнего приложения, для которого генерируется результат", этот метод вернет ProxyObject3D - тело вращения просто передаем пустой объект ProxyObject3D po3d; RotateGenerator rg = new RotateGenerator(po3d,"задать ось вращения","по идее эскиз",360); осталось сделать как то эскиз и указать ось =) |
|
|
|
07.12.2010 13:10:43
Осталось разобраться что такое "Body * profile"
В описании "RotateGenerator Конструктор" написано что profile это Вращаемый контур. Этот контур превращается во вращение и возращается в списке резльтирующих тел или удаляется А в описании типа Body написано что это Класс хранения геометрических тел И как туда засунуть контур? Да и с BaseAxis * axis тоже ничего не ясно. |
|
|
|
07.12.2010 13:23:06
по поводу BaseAxis * axis
Point3D p3d = new Point3D(0,0,0); Direction bd = new Direction(0,0,10); Axis ax = new Axis(p3d,bd); |
|
|
|
07.12.2010 13:59:04
кажется мы не там копаем,
вот операция вращения TFlex::Model::Model3D::Rotation вот ее и нада ковырять. |
|
|
|
07.12.2010 15:52:35
Ну да, играем в угадайку....
Свойство Описание Angle Угол вращения FirstAnglePoint Начальная точка вращения FirstAxisPoint Первая точка, задающую ось вращения GroupType Свойство GroupType, член класса Rotation. RotationAxis Ось вращения SecondAnglePoint Конечная точка вращения SecondAxisPoint Вторая точка, задающая ось вращения StartAngle Начальный угол вращения Со свойствами Rotation понятно. А как создается само вращение и где профиль? |
|
|
|
07.12.2010 16:09:43
по идее нада выбрать плоскость и на ней сделать эскиз потом этот эскиз подсунуть операции)
есть клас SketchProfile это поидее профиль эскиза. |
|
|
|
10.12.2010 15:59:54
Вот наковырял , но как для операции вращения выбрать ось вращения или как заштриховать не знаю
doc = TFlex.Application.NewDocument("C:\\Program Files\\T-FLEX\\T-FLEX CAD 11\\Program\\Прототипы\\3D Модель"); doc.BeginChanges("Пример использования API"); StandardWorkplane pl1 = new StandardWorkplane(doc, StandardWorkplane.StandardType.Front); FreeNode newNode1 = new FreeNode(doc, 0, 0); FreeNode newNode2 = new FreeNode(doc, System.Convert.ToDouble(L1.Text), 0); ConstructionOutline newOutline1 = new ConstructionOutline(doc, newNode1, newNode2); FreeNode newNode3 = new FreeNode(doc, System.Convert.ToDouble(L1.Text), System.Convert.ToDouble(D5.Text) - System.Convert.ToDouble(a.Text)); ConstructionOutline newOutline2 = new ConstructionOutline(doc, newNode2, newNode3); FreeNode newNode4 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(a.Text), System.Convert.ToDouble(D5.Text)); ConstructionOutline newOutline3 = new ConstructionOutline(doc, newNode3, newNode4); FreeNode newNode5 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L7.Text), System.Convert.ToDouble(D5.Text)); ConstructionOutline newOutline4 = new ConstructionOutline(doc, newNode4, newNode5); FreeNode newNode6 = new FreeNode(doc, System.Convert.ToDouble(L1.Text)- System.Convert.ToDouble(a.Text), System.Convert.ToDouble(D5.Text)); ConstructionOutline newOutline5 = new ConstructionOutline(doc, newNode5, newNode6); FreeNode newNode7 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L7.Text), System.Convert.ToDouble(D5.Text)); ConstructionOutline newOutline6 = new ConstructionOutline(doc, newNode6, newNode7); FreeNode newNode8 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L7.Text), System.Convert.ToDouble(D4.Text)); ConstructionOutline newOutline7 = new ConstructionOutline(doc, newNode7, newNode8); FreeNode newNode9 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L6.Text), System.Convert.ToDouble(D4.Text)); ConstructionOutline newOutline8 = new ConstructionOutline(doc, newNode8, newNode9); FreeNode newNode10 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L6.Text), System.Convert.ToDouble(D3.Text)); ConstructionOutline newOutline9 = new ConstructionOutline(doc, newNode9, newNode10); FreeNode newNode11 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L6.Text) - System.Convert.ToDouble(L5.Text), System.Convert.ToDouble(D3.Text)); ConstructionOutline newOutline10 = new ConstructionOutline(doc, newNode10, newNode11); FreeNode newNode12 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L6.Text) - System.Convert.ToDouble(L5.Text), System.Convert.ToDouble(D2.Text)); ConstructionOutline newOutline11 = new ConstructionOutline(doc, newNode11, newNode12); FreeNode newNode13 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L3.Text) , System.Convert.ToDouble(D2.Text)); ConstructionOutline newOutline12 = new ConstructionOutline(doc, newNode12, newNode13); FreeNode newNode14 = new FreeNode(doc, System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L3.Text), System.Convert.ToDouble(D1.Text)); ConstructionOutline newOutline13 = new ConstructionOutline(doc, newNode13, newNode14); FreeNode newNode15 = new FreeNode(doc, System.Convert.ToDouble(a.Text), System.Convert.ToDouble(D1.Text)); ConstructionOutline newOutline14 = new ConstructionOutline(doc, newNode14, newNode15); FreeNode newNode16 = new FreeNode(doc, 0, System.Convert.ToDouble(D1.Text) - System.Convert.ToDouble(a.Text)); ConstructionOutline newOutline15 = new ConstructionOutline(doc, newNode15, newNode16); FreeNode newNode17 = new FreeNode(doc, 0,0); ConstructionOutline newOutline18 = new ConstructionOutline(doc, newNode16, newNode17); //FreeNode newNode17 = new FreeNode(doc, System.Convert.ToDouble(a.Text), System.Convert.ToDouble(D1.Text)); doc.EndChanges(); doc.SaveAs("D:\\Default1.grb"); |
|
|
|
14.12.2010 14:52:59
Пример создания тела вращения в API:
docTF.BeginChanges("Create"); FreeNode n1 = new FreeNode(docTF,(Parameter)1,(Parameter)1); FreeNode n2 = new FreeNode(docTF,(Parameter)1,(Parameter)11); FreeNode n3 = new FreeNode(docTF,(Parameter)7,(Parameter)6); FreeNode ax1 = new FreeNode(docTF,(Parameter)0,(Parameter)1); FreeNode ax2 = new FreeNode(docTF,(Parameter)0,(Parameter)15); ConstructionOutline g1 = new ConstructionOutline (docTF, n1,n2); ConstructionOutline g2 = new ConstructionOutline (docTF, n2,n3); ConstructionOutline g3 = new ConstructionOutline (docTF, n3,n1); Area ar = new Area (docTF); Contour cn = ar.AppendContour(); ConstructionContourSegment seg1 = new ConstructionContourSegment(cn); seg1.StartNode = n1; seg1.EndNode = n2; ConstructionContourSegment seg2 = new ConstructionContourSegment(cn); seg2.StartNode = n2; seg2.EndNode = n3; ConstructionContourSegment seg3 = new ConstructionContourSegment(cn); seg3.StartNode = n3; seg3.EndNode = n1; StandardWorkplane swp = new StandardWorkplane(docTF, StandardWorkplane.StandardType.Top); AreaProfile pr3D =new AreaProfile(docTF); pr3D.Area = ar; pr3D.WorkSurface = swp; WorkplaneNode3D ax1_3D = new WorkplaneNode3D(docTF); ax1_3D.FirstProjection.Node = ax1; ax1_3D.FirstProjection.WorkSurface = swp; WorkplaneNode3D ax2_3D = new WorkplaneNode3D(docTF); ax2_3D.FirstProjection.Node = ax2; ax2_3D.FirstProjection.WorkSurface = swp; Rotation RT = new Rotation(docTF); RT.FirstAxisPoint = ax1_3D.Geometry.Point; RT.SecondAxisPoint = ax2_3D.Geometry.Point; RT.Profile.Add(pr3D.Geometry.SheetContour); docTF.EndChanges();
Изменено: |
|
|
|
15.12.2010 08:06:33
Огромное спасибо!
Не всё так старшно, но сам я эти пятнашки скорее всего не сложил бы..... |
|
|
|
15.12.2010 23:14:09
Спасибо большое,
очень познавательный пример. |
|
|
|
18.12.2010 10:41:07
Я это уже сделал, теперь вот мучаюсь как построить отверстие
на теле вращения Построил 3Д узел CoordinateNode3D N3 = new CoordinateNode3D(doc); N3.X = -(System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L3.Text) + System.Convert.ToDouble(L2.Text)); N3.Y = System.Convert.ToDouble(D2.Text) / 2; N3.Z = 0; Создал отверстие и указал какое Hole Hole1 = new Hole("Oblong hole for fasteners.GRB", doc); Есть метод Hole1.AddHole(тип ModelFace, 3Д узел) Где брать эту грань (ModelFace), в каде понятно , мышью выделил и поставил, а как указать какую именно грань на теле вращения через апи ? |
|
|
|
18.12.2010 14:13:08
Не знаю правильно ли добрася до грани , но выдает ошибку :"Ошибка регенерации отверстия"
Rotation rotation1 = new Rotation(doc); rotation1.Angle = 360; rotation1.Profile.Add(Pr1.Geometry.SheetContour); rotation1.FirstAxisPoint = N1.Geometry.Point; rotation1.SecondAxisPoint = N2.Geometry.Point; ModelFace Gran = null; System.Collections.IEnumerator B = rotation1.Profile.GetEnumerator(); while (B.MoveNext()) { System.Collections.IEnumerator C = ((ModelContour)B.Current).GetEnumerator(); while (C.MoveNext()) { System.Collections.IEnumerator F = ((ModelBody)C.Current).Faces.GetEnumerator(); while (F.MoveNext()) { Gran = ((ModelFace)F.Current).Body.Faces[0].Surface; } } } CoordinateNode3D N3 = new CoordinateNode3D(doc); N3.X = -(System.Convert.ToDouble(L1.Text) - System.Convert.ToDouble(L3.Text) + System.Convert.ToDouble(L2.Text)); N3.Y = System.Convert.ToDouble(D2.Text) / 2; N3.Z = 0; Hole Hole1 = new Hole("Oblong hole for fasteners.GRB", doc); Hole1.AddHole(Gran, N1); |
|
|
|
18.12.2010 14:17:43
Немного не так , вот последнее , но все равно не работает
ModelFace Gran = null; System.Collections.IEnumerator B = rotation1.Profile.GetEnumerator(); while (B.MoveNext()) { System.Collections.IEnumerator C = ((ModelContour)B.Current).GetEnumerator(); while (C.MoveNext()) { System.Collections.IEnumerator F = ((ModelBody)C.Current).Faces.GetEnumerator(); while (F.MoveNext()) { Gran = (ModelFace)F.Current; // break; } } |
||||
|
|
|||