Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Visual Basic (VB, VBA, VB.NET) => Тема начата: mlhzv2204 от 07.02.20, 10:20:20

Название: Сплайн по точкам VBA + Excel + Компас
Отправлено: mlhzv2204 от 07.02.20, 10:20:20
Здравствуйте форумчане!
Есть вопрос по автоматизации построения сплайна по точкам из исходных данных Excel таблицы в Компасе.
Я уже разобрался как строить обычные отрезки, в них нет ничего сложного так как параметры передаются явно, но для сплайна не могу разобраться

Мой код выглядит так, как мне построить 2D сплайн по трем и более точкам?
Sub Ascon()
    Set kompas = New Kompas6API5.Application
        kompas.Visible = True
   
    Set ksdoc = kompas.Document2D 'чертеж
        ksdoc.ksOpenDocument ("C:\Users\mlhzv\Documents\ptr.frw"), False
   
    Set doc = kompas.ActiveDocument2D

    ksdoc = doc.ksLineSeg(10,20,10,60,1) ' так построить отрезок
    ksdoc = doc.ksText(30,40,0,7,0,100, "Какой-то текст") 'так вставить текст
End Sub
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: Николай от 07.02.20, 10:48:21
А кривая Безье не подойдёт?
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: mlhzv2204 от 07.02.20, 15:24:00
Думаю даже лучше будет
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: ACiD от 07.02.20, 16:29:50
Если это графики функций, но можно обойтись без программирования:
построение графиков (https://forum.ascon.ru/index.php/topic,14253.msg79679.html#msg79679)
xls->ftt->ftdraw

Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: mlhzv2204 от 07.02.20, 18:40:17
В ответ я получил это сообщение (2016 года Excel):
13213.png

Проблема ещё в том, что я уже автоматизировал создание трех графиков и они все линейные, а четвертый точно должен быть криволинейным
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: Николай от 08.02.20, 21:07:38
   Dim T As Double
     'Кривая Безье
ksDocument2D.ksBezier 0, 1 '0-незамкнутая ;1-замкнутая
  For T = ti To td Step 0.01
    X = (0.5 * ddn / Cos(T)) * Cos(Tan(T) - T)
    Y = (0.5 * ddn / Cos(T)) * Sin(Tan(T) - T)
ksDocument2D.ksPoint X, Y, 1
Next T
ksDocument2D.ksEndObj 'Завершить вызов Безье

Это- из программы на VB6. Конечно, X, Y и зависимости должны быть своими.
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: mlhzv2204 от 09.02.20, 10:51:53
Спасибо большое, Николай, это то, что нужно!
Приспособил ваш код к своему проекту и все заработало как надо

Кому интересно, вот живой пример работы кода:
Sub TestCode()
   Set kompas = New Kompas6API5.Application
   kompas.Visible = True

   Set ksdoc = kompas.Document2D
   ksdoc.ksOpenDocument ("C:\Users\mlhzv\Documents\ptr.frw"), False

   Set doc = kompas.ActiveDocument2D

   ksdoc = doc.ksLineSeg(10, 20, 5, 60, 1) ' x, y, x, y, стиль линии
   ksdoc = doc.ksText(30, 40, 0, 7, 0, 100, "текст") 'x, y, угол наклона текста, высота символов, сужение текста, битовый вектор, задающий признаки начертания текста, строка символов

   ksdoc = doc.ksBezier(0, 1) '0 - незамкнутая 1 - замкнутая
   ksdoc = doc.ksPoint(30, 10, 1) '1 точка
   ksdoc = doc.ksPoint(50, 30, 1) '2 точка
   ksdoc = doc.ksPoint(120, -10, 1) '3 точка
   ksdoc = doc.ksEndObj 'завершение вызова Безье
End Sub
kompas.png
Название: Re: Сплайн по точкам VBA + Excel + Компас
Отправлено: nikolay9878 от 25.01.22, 13:53:27
Цитата: mlhzv2204 от 07.02.20, 10:20:20Я уже разобрался как строить обычные отрезки, в них нет ничего сложного так как параметры передаются явно, но для сплайна не могу разобраться


А подскажите как вы строите обычные отрезки через таблицу Excel ?