0 / 0 / 0
Регистрация: 20.09.2021
Сообщений: 50
1

Создание равностороннего треугольника с использованием API

26.12.2021, 23:07. Показов 435. Ответов 7
Метки c# (Все метки)

Всем доброго времени суток!Недавно я начал делать простую программу с API Компаса-3D,но у никак не могу написать код,который будет строить равносторонний треугольник.
Я пытался что-то сделать с помощью интерфейса KsObject.GetParamStruct,но у меня ничего вышло.
По итогу хочу получить метод,в которой нужно отправлять координату x,y (центров треугольника) и значение стороны треугольника,и чтобы данный метод смог мне построить мой треугольник.

В основном я брал информацию из данной книги:
https://kompas.ru/source/docum... isible.pdf
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2021, 23:07
Ответы с готовыми решениями:

Дана сторона равностороннего треугольника. Найти площадь этого треугольника
:-[ Здравствуйте!!! Прошу помочь с решением в Паскале!!! :confusion: 1. «Программирование...

Дана сторона равностороннего треугольника Найти площадь этого треугольника
3 Дана сторона равностороннего треугольника. Найти площадь этого треугольника

Дана сторона равностороннего треугольника. Найти площадь этого треугольника
using System; namespace ConsoleApp2 { class Program { static void...

Ввести стороны равностороннего треугольника. Найти площадь этого треугольника и его высоту
В универе на первом курсе в первый день сразу задали лабораторную помогите решить на си задачу: ...

7
586 / 818 / 141
Регистрация: 10.08.2015
Сообщений: 4,103
30.12.2021, 14:33 2
Цитата Сообщение от probabilitasT Посмотреть сообщение
координату x,y (центров треугольника) и значение стороны треугольника
этого как минимум недостаточно для постоения треугольника. нужен угол для первой вершины.
добейся, чтоб примеры из книги работали, остальное - дело техники
0
0 / 0 / 0
Регистрация: 20.09.2021
Сообщений: 50
30.12.2021, 15:20  [ТС] 3
vlisp, я смог это сделать с помощью метода построения многоугольника.
У меня есть отдельный класс KompasConnector и класс Builder.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public class KompasConnector
    {
        public KompasObject KsObject { get; }
 
        public ksPart Part { get; set; }
 
        public KompasConnector()
        {
            var progId = "KOMPAS.Application.5";
            try
            {
                KsObject = (KompasObject)Marshal.GetActiveObject(progId);
            }
            catch(COMException)
            {
                KsObject = (KompasObject)Activator.
                    CreateInstance(Type.GetTypeFromProgID(progId));
                Thread.Sleep(300);
            }
            var ksDoc = KsObject.Document3D();
            ksDoc.Create(false, true);
            Part = ksDoc.GetPart((short)Part_Type.pTop_Part);
            KsObject.Visible = true;
            KsObject.ActivateControllerAPI();
        }
    }

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   public class Builder
    {
        private KompasConnector _kompasConnector;
 
        private void BuildTriangle() 
        {
            var sketchDef = CreateSketch(Obj3dType.o3d_planeXOY);
            var doc2D = (ksDocument2D)sketchDef.BeginEdit();
 
            var triangle = (ksRegularPolygonParam)
                        (_kompasConnector.KsObject.GetParamStruct(92));
            triangle.count = 3;
            triangle.xc = 10.5;
            triangle.yc = 10.5;
            triangle.ang = 0;
            triangle.radius = 20.0;
            triangle.describe = false;
            triangle.style = 1;
            doc2D.ksRegularPolygon(triangle, 0);
        }
    }
Добавлено через 12 минут
В классе Builder так же есть этот метод.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
private ksSketchDefinition CreateSketch(Obj3dType planeType)
        {
            // Выбор плоскоти
            var plane = (ksEntity)_kompasConnector.Part.
                GetDefaultEntity((short)planeType);
 
            // Создание эскиза
            var sketch = (ksEntity)_kompasConnector.Part.
                NewEntity((short)Obj3dType.o3d_sketch);
 
            // Устанавливаем эскизу рабочую плоскость
            ksSketchDefinition sketchDef = sketch.GetDefinition();
            sketchDef.SetPlane(plane);
            sketch.Create();
 
            return sketchDef;
        }
0
586 / 818 / 141
Регистрация: 10.08.2015
Сообщений: 4,103
30.12.2021, 15:57 4
Так как это COM, то убедись что все объекты созданы инициализированы и имеют возможность записи. например вот это
Цитата Сообщение от probabilitasT Посмотреть сообщение
var ksDoc = KsObject.Document3D();
            ksDoc.Create(false, true);
как по мне странно
0
0 / 0 / 0
Регистрация: 20.09.2021
Сообщений: 50
30.12.2021, 16:36  [ТС] 5
vlisp, а тогда каким бы образом вы это выполнили бы(желательно ваш пример кода предоставить)?
0
95 / 92 / 21
Регистрация: 30.08.2015
Сообщений: 394
03.01.2022, 07:09 6
Цитата Сообщение от probabilitasT Посмотреть сообщение
var triangle = (ksRegularPolygonParam)
                        (_kompasConnector.KsObject.GetParamStruct(92));
Использование чисел вместо имён - не совсем хорошо
C#
1
var triangle = (ksRegularPolygonParam)(_kompasConnector.KsObject.GetParamStruct((short)StructType2DEnum.ko_RegularPolygonParam));
и ошибка именно в этой строке но я не могу понять почему..

а так работает?

C#
1
2
3
4
5
var triangle = (ksRegularPolygonParam)_kompasConnector.KsObject.GetParamStruct(Convert.ToInt16(Math.Truncate(StructType2DEnum.ko_RegularPolygonParam)));
//
//
//
sketchDef.EndEdit();
0
0 / 0 / 0
Регистрация: 20.09.2021
Сообщений: 50
03.01.2022, 18:21  [ТС] 7
densy, изначально я использовал константу ko_RegularPolygonParam,но у меня тоже появлялась ошибка,потом я просто передавал 92 вместо заданной константы.

Такая же ошибка была в теме этого сообщения:
Кликните здесь для просмотра всего текста


Если что,то я использовал(подключал) библиотеки из Компаса-3D v 19.0.
0
95 / 92 / 21
Регистрация: 30.08.2015
Сообщений: 394
03.01.2022, 20:30 8
у меня работает этот код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Threading;
using Kompas6API5;
using Kompas6Constants;
using Kompas6Constants3D;
 
public class Form1
{
    private void Button1_Click(object sender, EventArgs e)
    {
        KompasObject KsObject;
 
        ksPart Part;
 
        var progId = "KOMPAS.Application.5";
        try
        {
            KsObject = (KompasObject)Marshal.GetActiveObject(progId);
        }
        catch (COMException e1)
        {
            KsObject = (KompasObject)Activator.CreateInstance(Type.GetTypeFromProgID(progId));
            Thread.Sleep(300);
        }
        var ksDoc = KsObject.Document3D();
        ksDoc.Create(false, true);
        Part = ksDoc.GetPart(System.Convert.ToInt16(Math.Truncate(Part_Type.pTop_Part)));
        KsObject.Visible = true;
        KsObject.ActivateControllerAPI();
 
        ksEntity plane = (ksEntity)Part.GetDefaultEntity(System.Convert.ToInt16(Math.Truncate(Obj3dType.o3d_planeXOY)));
        ksEntity sketch = (ksEntity)Part.NewEntity(System.Convert.ToInt16(Math.Truncate(Obj3dType.o3d_sketch)));
 
        ksSketchDefinition sketchDef = (ksSketchDefinition)sketch.GetDefinition();
        sketchDef.SetPlane(plane);
        sketch.Create();
 
        var doc2D = (ksDocument2D)sketchDef.BeginEdit();
 
        var triangle = (ksRegularPolygonParam)KsObject.GetParamStruct(System.Convert.ToInt16(Math.Truncate(StructType2DEnum.ko_RegularPolygonParam)));
 
        triangle.count = 3;
        triangle.xc = 10.5;
        triangle.yc = 10.5;
        triangle.ang = 0;
        triangle.radius = 20.0;
        triangle.describe = false;
        triangle.style = 1;
        doc2D.ksRegularPolygon(triangle, 0);
 
        sketchDef.EndEdit();
 
        Console.WriteLine("Done  ");
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2022, 20:30

Дана сторона равностороннего треугольника. Найти площадь этого треугольника и его высоту
1.) Дана сторона равностороннего треугольника. Найти площадь этого треугольника и его высоту....

Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиус описанной окружности
1. Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиус описанной...

Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиусы вписанной и описанной окружностей
Нужно решить данную задачу. Вот все нужные формулы S = a²√3/4 - Площадь, r = a√3/6 - Радиус...

Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиусы вписанной и описанной окружностей
Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиусы вписанной и...

Дана сторона равностороннего треугольника. Найти площадь этого треугольника, его высоты, радиусы вписанной и описанной окружностей.
Дана сторона равностороннего треугольника. Найти площадь этого треугольника, его высоты, радиусы...

Создание окна с использованием Win APi
Здравствуйте! Уже несколько дней мучаюсь с такой проблемой: Нужно создать окно с горизонтальной и...

Параметры равностороннего треугольника
Помогите составить программу для вычисления параметров графического примитива "равносторонний...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru