• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Конические кривые

Автор Vitalij Lysanov, 25.07.21, 09:37:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vitalij Lysanov






Конические кривые
При ручном построении кривых линий желательно использовать как можно меньше точек, иначе можно потерять плавность кривой.

Меньше точек - меньше вариантов построения - и в основном параболы.

Конические кривые позволяют при минимуме точек получить сложные кривые. Парабола, эллипс, гипербола - просто идут как частные случаи. 
И обеспечивается соединение кривых по касательной.

Чтобы конические кривые соединились по касательной, можно построить каркас. Все точки идут по каркасу (кроме точки на кривой).




Рис      Каркас и две конические кривые.

Для задания конической кривой нужны:
  • Начальная точка
  • Конечная точка
  • Точка пересечения касательных
  • Точка на кривой
Точка на кривой как раз и определяет вид кривой – парабола, эллипс или гипербола.
Тоже самое в программе.





Рис      Каркас для построений.  Внизу видны конические кривые, построенные по новым точкам



Задание на построение: 
shi=76           Ширина кривой
vis_n=53       Высота нижних кривых
vis_v=47        Высота верхних кривых

dt1=10          Смещение для точки на нижних кривых
dt2=3            Смещение для точки на вурхних кривых
sm=-35         Общее смещение по вертикали
korp_sm(shi,   vis_n,vis_v,       dt1,dt2,     sm )          Функция для построения



Числа для функции можно взять из таблицы, а можно задать и графически, аналогично:
 https://forum.ascon.ru/index.php?topic=29797.msg229643#msg229643

Само собой что можно сразу и модель по сечениям построить.

Это построения для сечений корпуса лодки.

Аналогично можно добавить рули и все остальное, новые построения объединятся в одну деталь, если в настройках стоит объединение

Код программы:
# -*- coding: utf-8 -*-
#|Примеры

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application








Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()






import cmath


def otr(t1,t2):
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag, 3)





iViewsAndLayersManager = kompas_document_2d.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
iView = iViews.ActiveView



iDrawingContainer = iView._oleobj_.QueryInterface(kompas_api7_module.IDrawingContainer.CLSID, pythoncom.IID_IDispatch)
iDrawingContainer = kompas_api7_module.IDrawingContainer(iDrawingContainer)


iMultilines = iDrawingContainer.Multilines
iccMultilines = iDrawingContainer.ConicCurves



icc = iccMultilines.Add()



def cc(tn,tk,tp,t_na_kr):
    icc = iccMultilines.Add()

    d1=icc.SetPoint(0,  tn.real,        tn.imag         )
    d2=icc.SetPoint(1,  tk.real,        tk.imag         )
    d3=icc.SetPoint(2,  tp.real,        tp.imag         )
    d4=icc.SetPoint(3,  t_na_kr.real,   t_na_kr.imag    )

   # obj = iDocument2D.ksPoint(tp.real,          tp.imag,        0)
    obj = iDocument2D.ksPoint(t_na_kr.real,     t_na_kr.imag,   0)



    otr(tn,tp)
    otr(tk,tp)


    icc.Update()

def korp(shi,   vis_n,vis_v,       dt1,dt2,   sm ):
    tn=complex(0,0)
    tk=complex(shi,vis_n)
    tp=complex(shi,0)
    t_na_kr=complex(shi/2,                          dt1)
    cc(tn,tk,tp,t_na_kr)

    tn=complex(0,   vis_n+vis_v)
    tk=complex(shi,vis_n)
    tp=complex(shi,vis_n+vis_v)
    t_na_kr=complex(shi/2,     vis_n+vis_v          -dt2)
    cc(tk,tn,tp,t_na_kr)





    tn=complex(0,0)
    tk=complex(-shi,vis_n)
    tp=complex(-shi,0)
    t_na_kr=complex(-shi/2,                  dt1)
    cc(tn,tk,tp,t_na_kr)

    tn=complex(0,   vis_n+vis_v)
    tk=complex(-shi,vis_n)
    tp=complex(-shi,vis_n+vis_v)
    t_na_kr=complex(-shi/2,     vis_n+vis_v- dt2)
    cc(tk,tn,tp,t_na_kr)

def korp_sm(shi,   vis_n,vis_v,       dt1,dt2,   sm ):
    tn=complex(0,+sm)
    tk=complex(shi,vis_n+sm)
    tp=complex(shi,0+sm)
    t_na_kr=complex(shi/2,                          dt1+sm)
    cc(tn,tk,tp,t_na_kr)

    tn=complex(0,   vis_n+vis_v+sm)
    tk=complex(shi,vis_n+sm)
    tp=complex(shi,vis_n+vis_v+sm)
    t_na_kr=complex(shi/2,     vis_n+vis_v          -dt2+sm)
    cc(tk,tn,tp,t_na_kr)





    tn=complex(0,0+sm)
    tk=complex(-shi,vis_n+sm)
    tp=complex(-shi,0+sm)
    t_na_kr=complex(-shi/2,                  dt1+sm)
    cc(tn,tk,tp,t_na_kr)

    tn=complex(0,   vis_n+vis_v+sm)
    tk=complex(-shi,vis_n+sm)
    tp=complex(-shi,vis_n+vis_v+sm)
    t_na_kr=complex(-shi/2,     vis_n+vis_v- dt2+sm)
    cc(tk,tn,tp,t_na_kr)




shi=76
vis_n=53
vis_v=47

dt1=7
dt2=3
sm=-35


korp_sm(shi,   vis_n,vis_v,       dt1,dt2,     sm )