Макропараметризация

Автор Vitalij Lysanov, 27.01.20, 03:01:23

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

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

Vitalij Lysanov




Макропараметризация
Была тема про эскизы с полным определением (знаком "+" пред эскизом). Сразу можно сказать, что получить плюс это тяжелая работа.
 Требования Нормоконтроля также обусловлены обеспокоенностью администрации о будущем изделия, когда в эскизе достаточно изменить одну цифру и все перестроится.  Это понятно, но тяжело выполнимо. Эскизы также хранятся, как и все документы.

Альтернативой как всегда может быть Макро. И нужно сказать спасибо Аскон, что помогает развивать это направление.
Там все просто, как в школе. Из точки в этом направлении отмерили расстояние и поставили новую точку. И т.д. И никаких уравнений, недо и пере определений эскиза.
Тексты Макро могут также храниться, как и сами эскизы, еще и занимают намного меньше места.

Пример сварного бака со сложным профилем.
Берем две точки (-300,0) и (-300,100).
    t1=complex(-300,0)
    t2=complex(-300,100)
Можно даже по-другому, как в школе
t2=t1+rect(100,90)100 - это расстояние
90 - это угол, вверх на 100

В баке есть еще толщина листа, которую нужно по-разному учитывать. Для учета толщины листа, Начало новой точки отрезка можно сместить аналогичным способом с учетом толщины листа.
Дальше вторую точку аналогично
 t4=t3+rect(68,180)На расстояние 68 влево.

Координаты каждого отрезка и толщину материала передаем в функцию.
    def pr4(t1,t2,tol):

    ug1=(cmath.polar(t1-t2)[1])
    print(ug1)
    t3=t1+cmath.rect(tol,ug1+0.5*math.pi)
    t4=t2+cmath.rect(tol,ug1+0.5*math.pi)

    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t4.real, t4.imag, 2)
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t3.real, t3.imag, 2)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 2)
В функции имена уже свои, так что повторы имен — это  не страшно. 
Вычисляем угол отрезка, из точек проводим нормали и на расстоянии толщины ставим новые точки. 
По четырем точкам строим прямоугольник, который пойдет в эскиз.
Если в эскизе оставить координаты прямоугольника, никаких сопряжений, все будет на своих местах.
Все


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

здесь получается макро объект, который для эскиза нужно разрушить.

Теперь уже можно включать параметризацию, чтобы зафиксировать результаты. Параметризировать все и зафиксировать отдельные точки.

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


# -*- 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 math
import cmath

def pr4(t1,t2,tol):


    ug1=(cmath.polar(t1-t2)[1])
    print(ug1)
    t3=t1+cmath.rect(tol,ug1+0.5*math.pi)
    t4=t2+cmath.rect(tol,ug1+0.5*math.pi)


    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t4.real, t4.imag, 2)
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t3.real, t3.imag, 2)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 2)





u=0.2
tol=5

p1=100

for n in range(20):
    u=u+0.05
    p1=p1+4
    tol=tol+1

    iDocument2D.ksMacro(0)


    t1=complex(-300,0)
    t2=complex(-300,100)
    pr4(t2,t1,tol)


    t3=t2-tol
    t4=t3-100
    pr4(t4,t3,tol)


    t5=t4+cmath.rect(120,(math.pi-u))
    pr4(t5,t4,tol)


#    t6=t5+120*1j
    t6=t5+p1*1j
    pr4(t6,t5,tol)


    t7=t6-tol
    t8=t7+230
    pr4(t8,t7,tol)


    t9=t8+tol
    t10=t9+100*1j
    pr4(t10,t9,tol)


    t11=t10-tol
    t12=t11-p1
#    t12=t11-140
    pr4(t12,t11,tol)


    diam=(t12-t11)/2+t11

    print (diam)
    diam1=diam-68*1j
    diam2=diam+86*1j


    obj = iDocument2D.ksLineSeg(diam1.real, diam1.imag, diam2.real, diam2.imag, 3)

    pRect = iDocument2D.ksEndObj()


    import time
    time.sleep(1)

    iDocument2D.ksDeleteObj(pRect)




 




           

p3452

Полностью солидарен с идеей.
Реализуем же ее в упрошенном варианте (для "блондинок"):
Программа контролер -> Дерево операций(текстовый файл) -> Пользователь.

Любая Операция в Дереве операций может быть:
- текстовым файлом с набором команд и параметров (упрощенный "макрос"),
- полноценным макросом,
- специальной командой, из перечня команд программы контролера,
- ссылкой на другое Дерево операций,
- любым файлом операционной системы.

Удобно, компактно, ничего не рассыпается и не теряется.

IgorT

Круто! Только макрописание оно не для простых смертных ...

p3452

Цитата: IgorT от 27.01.20, 14:53:15Круто! Только макрописание оно не для простых смертных ...

Ну почему же?
Вот пример использования команды LineSegment:
#Отрезок
0.0   0.0   0.0   200.0
400.0   200.0
400.0   0.0
0.0   0.0

Будет построен прямоугольник/

Andrei 72

Смертный: ЖЕСТЬ БЛИН :o  :o  :o  :o  :o  :o  :o  :o  :o

IgorT

Автокадом повеяло... Команда, цифры точек.... скрипт-файл можно организовать...
Интересно, а как дальнейшее поведение модели? Это я про Компас... Эскиз ведь по новой строится. Всё построенное с него улетает в небытие и ваяй по новой? Так что ли?

Vitalij Lysanov


К программе, которая создает эскиз, можно еще добавить функцию, которая по эскизу сформирует деталь.
Эту функцию Компас сам может сформировать Макро рекордером, только точки привязки подправить




 

# -*- 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 math
import cmath


nomer_d=0


#______________________________________________________
def nd(t1,t2,t3,t4):

    t1=t1/10
    t2=t2/10
    t3=t3/10
    t4=t4/10


    ts=(t1+t2)/2
    print("ts=",ts)
    nomer_d=nomer_d+1
    global nomer_d

    print ("__nomer_d__",nomer_d)

    #  Создаем новый документ
    kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentPart, True)

    kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
    iDocument3D = kompas_object.ActiveDocument3D()

    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)
    iDefinition = iSketch.GetDefinition()
    iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOZ)
    iDefinition.SetPlane(iPlane)
    iSketch.Create()
    iDocument2D = iDefinition.BeginEdit()
    kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
    iDocument2D = kompas_object.ActiveDocument2D()

    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag,1)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 1)
    obj = iDocument2D.ksLineSeg(t4.real, t4.imag, t3.real, t3.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t1.real, t1.imag, 1)
    iDefinition.EndEdit()
    iDocument2D = iDefinition.BeginEdit()
    kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
    iDocument2D = kompas_object.ActiveDocument2D()

    iDefinition.EndEdit()
    iDocument2D = iDefinition.BeginEdit()
    kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
    iDocument2D = kompas_object.ActiveDocument2D()

    obj = iDocument2D.ksLineSeg(0, -68, 0, -86, 3)
    iDefinition.EndEdit()
    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossRotated)
    iDefinition = obj.GetDefinition()
    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
    iCollection.SelectByPoint(float(ts.real), 0, float(-ts.imag))
    iEdge = iCollection.Last()
    iEdgeDefinition = iEdge.GetDefinition()
    iSketch = iEdgeDefinition.GetOwnerEntity()
    iDefinition.SetSketch(iSketch)
    iRotatedParam = iDefinition.RotatedParam()
    iRotatedParam.direction = kompas6_constants_3d.dtNormal
    iRotatedParam.angleNormal = 360
    iRotatedParam.angleReverse = 0
    iRotatedParam.toroidShape = True
    iRotated = kompas_object.TransferInterface(obj, kompas6_constants.ksAPI7Dual, 0)
    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
    iCollection.SelectByPoint(0, 0, 68)
    iEdge = iCollection.Last()
    iRotatedAxis = kompas_object.TransferInterface(iEdge, kompas6_constants.ksAPI7Dual, 0)
    iRotated.Axis = iRotatedAxis
    iThinParam = iDefinition.ThinParam()
    iThinParam.thin = False
    obj.name = "Элемент вращения:1"
    iColorParam = obj.ColorParam()
    iColorParam.ambient = 0.5
    iColorParam.color = 9474192
    iColorParam.diffuse = 0.6
    iColorParam.emission = 0.5
    iColorParam.shininess = 0.8
    iColorParam.specularity = 0.8
    iColorParam.transparency = 1
    obj.Create()

    import time
    time.sleep(2)

    kompas_document.SaveAs("D:\Деталь "+str(nomer_d)+".m3d")




#_______________________________________________________
def pr4(t1,t2,tol):


    ug1=(cmath.polar(t1-t2)[1])
    print(ug1)
    t3=t1+cmath.rect(tol,ug1+0.5*math.pi)
    t4=t2+cmath.rect(tol,ug1+0.5*math.pi)


    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t4.real, t4.imag, 2)
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t3.real, t3.imag, 2)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 2)

    nd(t1,t2,t3,t4)

#_____________________________________________________________________



#____________________________________________________________________



























u=0.2
tol=5

p1=100

for n in range(1):
    u=u+0.05
    p1=p1+4
    tol=tol+1

    iDocument2D.ksMacro(0)


    t1=complex(-300,0)
    t2=complex(-300,100)
    pr4(t2,t1,tol)


    t3=t2-tol
    t4=t3-100
    pr4(t4,t3,tol)


    t5=t4+cmath.rect(120,(math.pi-u))
    pr4(t5,t4,tol)


#    t6=t5+120*1j
    t6=t5+p1*1j
    pr4(t6,t5,tol)


    t7=t6-tol
    t8=t7+230
    pr4(t8,t7,tol)


    t9=t8+tol
    t10=t9+100*1j
    pr4(t10,t9,tol)


    t11=t10-tol
    t12=t11-p1
#    t12=t11-140
    pr4(t12,t11,tol)


    diam=(t12-t11)/2+t11

    print (diam)
    diam1=diam-68*1j
    diam2=diam+86*1j


    obj = iDocument2D.ksLineSeg(diam1.real, diam1.imag, diam2.real, diam2.imag, 3)

    pRect = iDocument2D.ksEndObj()


    import time
    time.sleep(0.2)

    #iDocument2D.ksDeleteObj(pRect)





         

IgorT

Конечно можно! Но надо ли? Ведь при вставке детали, созданной макрорекордером, в сборку по новой придётся накладывать сборочные зависимости. :(
Может все же удобнее и доступнее пользоваться параметрическими моделями?

Vitalij Lysanov

29.01.20, 00:07:53 #8 Последнее редактирование: 29.01.20, 03:23:14 от Vitalij Lysanov


При больших проектах применяют программирование:
https://drive.google.com/open?id=0B63y14wkcLqgNlVMZ0w4R0o0RVE

И сразу еще немного про программирование:
https://drive.google.com/open?id=1puM9SxDXwv02DadG2iV78mxSZFUWOZtVl2Au4_mwHK8

На сложные эскизы при параметризации просто смотреть трудно , еще и прозрачную заливку убрали для замкнутых контуров. В фрагменте хоть можно  контур залить.
Может в этом и есть смысл, чтобы враг не прошел. Дороги еще застал с грунтовым покрытием.
 
Тесты и отладка — таких слов в параметризации - вообще?

Спецификации и чертежи только программа сформирует.

Желательно изучать более общее, которое может пригодится в другой деятельности.
 
Это уже сборка из деталей.  Можно еще немного собрать:
 
 
https://drive.google.com/open?id=1tmt2fOpIl2o9_qaybUmmeSXp-XjOHN-4
10 килобайт кода всегда можно развернуть в 10 мегабайт моделей и чертежей. И маленький объем намного легче хранить, с дублированием и пр.
 
Функции — это как кнопки в меню, если хорошо настроить функцию, туда можно долго не заглядывать, только вызывать текстом или перетаскивая кубики


   

# -*- 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



import datetime

datetime.datetime.now()

from time import gmtime, strftime



im_fil=strftime("%Y-%m-%d %H:%M:%S", gmtime())
im_fil=im_fil.replace(":","_")
im_fil=im_fil.replace(" ","_")
im_fil=im_fil.replace("-","_")



im_fil="D:\detal_ "+im_fil+"_"

im_fil_st=im_fil




nomer_d=0




Documents = application.Documents

kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()


import math
import cmath








#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________

def get_kompas_api7():
    module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
    api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
    const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0)
    return module, api, const.constants
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________





def get_kompas_api5():
        module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
        api = module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(module.KompasObject.CLSID, pythoncom.IID_IDispatch))
        const = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0)
        return module, api, const.constants


module_5, iKompasObject, LDefin3D =  get_kompas_api5()






def nsb2():


    kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentAssembly, True)

    kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
    iDocument3D = kompas_object.ActiveDocument3D()


    partFileName1 = im_fil_st+ "8.a3d"
    partFileName2 = im_fil+ "8.a3d"


    module_7, api_7, const_7 = get_kompas_api7()
    app = api_7.Application
    doc = module_7.IKompasDocument3D(app.ActiveDocument) #Активная сборка


    topPart = doc.TopPart
    parts = topPart.Parts

    print(partFileName1)
    print(partFileName2)
    print("im_fil_st===",im_fil_st)
    print("im_fil==",im_fil)


    part = parts.AddFromFile(partFileName1, False, False)

    part = parts.AddFromFile(partFileName2, False, False)


    iDocument3D.RebuildDocument()



    global nomer_d
    nomer_d=nomer_d+1

    iDocument3D.fileName ="Сборка"+ im_fil+str(nomer_d)+".a3d"
    iDocument3D.Save()




    print()
    iPart = module_5.ksPart(iDocument3D.GetPart(1))
    print(iPart)



    iplac = module_5.ksPlacement(iPart.GetPlacement())
    print(iplac)


    nnn=0
    for ug160 in range(-90,100,10):
        x=0
        y=0
        z=(-55.2-40.2)*nnn/18
        nnn=nnn+1

        iplac.SetOrigin(x, y, z)

        u=math.radians(ug160)

                                                                                #        iplac.SetAxis(x+math.cos(u),    y+math.sin(u),          z,               0)
        iplac.SetAxis(x,    y+math.cos(u),          z+math.sin(u),               1)
                                                                                                    #        iplac.SetAxis(x,                y+1,                    z,               1)
        iplac.SetAxis(x,    y-math.sin(u),          z+math.cos(u),               2)

        iPart.SetPlacement(iplac)
        iPart.UpdatePlacement()
        iPart.Update()
        import time

        iDocument3D.RebuildDocument()
        time.sleep(0.5)









#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
def nsb():


    kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentAssembly, True)

    kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
    iDocument3D = kompas_object.ActiveDocument3D()


    partFileName1 = im_fil+ "1.m3d"
    partFileName2 = im_fil+ "2.m3d"
    partFileName3 = im_fil+ "3.m3d"
    partFileName4 = im_fil+ "4.m3d"
    partFileName5 = im_fil+ "5.m3d"
    partFileName6 = im_fil+ "6.m3d"
    partFileName7 = im_fil+ "7.m3d"


    module_7, api_7, const_7 = get_kompas_api7()
    app = api_7.Application
    doc = module_7.IKompasDocument3D(app.ActiveDocument)


    topPart = doc.TopPart
    parts = topPart.Parts


    part = parts.AddFromFile(partFileName1, False, False)

    part = parts.AddFromFile(partFileName2, False, False)

    part = parts.AddFromFile(partFileName3, False, False)

    part = parts.AddFromFile(partFileName4, False, False)

    part = parts.AddFromFile(partFileName5, False, False)

    part = parts.AddFromFile(partFileName6, False, False)

    part = parts.AddFromFile(partFileName7, False, False)
    iDocument3D.RebuildDocument()

    global nomer_d
    nomer_d=nomer_d+1

    iDocument3D.fileName = im_fil+str(nomer_d)+".a3d"
    iDocument3D.Save()

#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________









#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
def nd(t1,t2,t3,t4):


    ts=(t1+t2)/2

    global nomer_d
    nomer_d=nomer_d+1

    print ("__nomer_d__",nomer_d)

    kompas_document = Documents.AddWithDefaultSettings(kompas6_constants.ksDocumentPart, True)

    kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
    iDocument3D = kompas_object.ActiveDocument3D()

    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)
    iDefinition = iSketch.GetDefinition()
    iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOZ)
    iDefinition.SetPlane(iPlane)
    iSketch.Create()
    iDocument2D = iDefinition.BeginEdit()






    iDocument2D = kompas_object.ActiveDocument2D()
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag,1)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 1)
    obj = iDocument2D.ksLineSeg(t4.real, t4.imag, t3.real, t3.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t1.real, t1.imag, 1)






    obj = iDocument2D.ksLineSeg(0, -68, 0, -86, 3)
    iDefinition.EndEdit()






    obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossRotated)
    iDefinition = obj.GetDefinition()
    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
    iCollection.SelectByPoint(float(ts.real), 0, float(-ts.imag))
    iEdge = iCollection.Last()
    iEdgeDefinition = iEdge.GetDefinition()
    iSketch = iEdgeDefinition.GetOwnerEntity()
    iDefinition.SetSketch(iSketch)
    iRotatedParam = iDefinition.RotatedParam()
    iRotatedParam.direction = kompas6_constants_3d.dtNormal
    iRotatedParam.angleNormal = 360
    iRotatedParam.angleReverse = 0
    iRotatedParam.toroidShape = True
    iRotated = kompas_object.TransferInterface(obj, kompas6_constants.ksAPI7Dual, 0)
    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
    iCollection.SelectByPoint(0, 0, 68)
    iEdge = iCollection.Last()
    iRotatedAxis = kompas_object.TransferInterface(iEdge, kompas6_constants.ksAPI7Dual, 0)
    iRotated.Axis = iRotatedAxis
    iThinParam = iDefinition.ThinParam()
    iThinParam.thin = False
    obj.name = "Элемент вращения:1"
    iColorParam = obj.ColorParam()
    iColorParam.ambient = 0.5
    iColorParam.color = 9474192
    iColorParam.diffuse = 0.6
    iColorParam.emission = 0.5
    iColorParam.shininess = 0.8
    iColorParam.specularity = 0.8
    iColorParam.transparency = 1
    obj.Create()










    import time
    time.sleep(0)

    kompas_document.SaveAs(im_fil+str(nomer_d)+".m3d")
    print(im_fil+str(nomer_d)+".m3d")
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________



#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
def pr4(t1,t2,tol):


    ug1=(cmath.polar(t1-t2)[1])

    t3=t1+cmath.rect(tol,ug1+0.5*math.pi)
    t4=t2+cmath.rect(tol,ug1+0.5*math.pi)


    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t2.real, t2.imag, 1)
    obj = iDocument2D.ksLineSeg(t3.real, t3.imag, t4.real, t4.imag, 2)
    obj = iDocument2D.ksLineSeg(t1.real, t1.imag, t3.real, t3.imag, 2)
    obj = iDocument2D.ksLineSeg(t2.real, t2.imag, t4.real, t4.imag, 2)

    nd(t1,t2,t3,t4)

#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________




#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
def sborka(vis):


    global im_fil
    global nomer_d

    im_fil=strftime("%Y-%m-%d %H:%M:%S", gmtime())
    im_fil=im_fil.replace(":","_")
    im_fil=im_fil.replace(" ","_")
    im_fil=im_fil.replace("-","_")

    im_fil="D:\detal_ "+im_fil+"_"
    nomer_d=0







    u=0.9
    tol=1

    p1=10

    for n in range(1):
        u=u+0.05
        p1=p1+0.4
        tol=tol+1

       # iDocument2D.ksMacro(0)


        t1=complex(-30,0)
        t2=complex(-30,vis)
        pr4(t2,t1,tol)


        t3=t2-tol
        t4=t3-10
        pr4(t4,t3,tol)


        t5=t4+cmath.rect(12,(math.pi-u))
        pr4(t5,t4,tol)


    #    t6=t5+120*1j
        t6=t5+p1*1j
        pr4(t6,t5,tol)


        t7=t6-tol
        t8=t7+23
        pr4(t8,t7,tol)


        t9=t8+tol
        t10=t9+10*1j
        pr4(t10,t9,tol)


        t11=t10-tol
        t12=t11-p1
    #    t12=t11-140
        pr4(t12,t11,tol)


        diam=(t12-t11)/2+t11

        print (diam)
        diam1=diam-7*1j
        diam2=diam+7*1j


        obj = iDocument2D.ksLineSeg(diam1.real, diam1.imag, diam2.real, diam2.imag, 3)

      #  pRect = iDocument2D.ksEndObj()


        import time
        time.sleep(0.2)

        #iDocument2D.ksDeleteObj(pRect)



    nsb()

#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________
#__________________________________________________________________________________________________________________________________________________________________________________

def pr():
    iPart = module_5.ksPart(iDocument3D.GetPart(0))
    iplac = module_5.ksPlacement(iPart.GetPlacement())
    x=30
    y=0
    z=0
    iplac.SetOrigin(x, y, z)

    u=math.radians(-15)

    iplac.SetAxis(x+math.cos(u),    y+math.sin(u),          z,               0)
    iplac.SetAxis(x,                y+1,                    z,               1)

    iPart.SetPlacement(iplac)
    iPart.UpdatePlacement()
    iPart.Update()
    if zashvattt==1: zachvat()







sborka(25)
sborka(10)

nsb2()





IgorT

Не верным путём идёте. Надо избавляться от необходимости что-то программировать простому конструктору при работе с CAD.

p3452

Цитата: IgorT от 29.01.20, 08:13:44.. Надо избавляться от необходимости что-то программировать простому конструктору при работе с CAD.
- Возможно, но вот в чем парадокс:
чтобы "избавить" от программирования "простого конструктора", нужно вначале его научить программировать, потом помочь ему в программировании умной программы (супер-CAD), которая уже избавит его от необходимости программировать.

IgorT

Цитата: p3452 от 29.01.20, 13:06:52- Возможно, но вот в чем парадокс:
чтобы "избавить" от программирования "простого конструктора", нужно вначале его научить программировать, потом помочь ему в программировании умной программы (супер-CAD), которая уже избавит его от необходимости программировать.
Чиво? Не понял. Вы на чем настаиваете? Хотите сказать, что пока нету CAD без необходимости программирования?

p3452

Цитата: IgorT от 29.01.20, 13:11:31Чиво? Не понял. Вы на чем настаиваете? Хотите сказать, что пока нету CAD без необходимости программирования?
Ну, продолжайте!

IgorT

Че продолжать? Говорю же не понял о чём Вы хотите сказать.

Elaeagnus

Цитата: p3452 от 29.01.20, 13:40:43Ну, продолжайте!
Прикольно!
"Программеры" Шлиссельбург завоевали! :-)))

p3452

Для тех, кто "в танке"...
1. Большинство нынешних CAD - низкоинтеллектуальные (в том числе и КОМПАС).
2. Возможностей этих CAD для "простых конструкторов", достаточно, они довольны.
3. Есть продвинутые конструкторы, которых угнетает(тормозит) низкоинтеллектуальность CAD.
4. Разработчики CAD будучи простыми кодерами не в состоянии понять хотелки "продвинутых", их попытки усовершенствовать CAD-ы редко бывают удачными.
5. Как компенсация для "продвинутых" в CAD-ы стали добавлять API, для местных программистов (вам там не месте виднее, что хотят ваши конструкторы...).
6. Но оказалось (так было и 10 лет, и 20 лет назад), что продвинутому конструктору легче самому освоить программирование, чем добиться от кодера реализации своих идей.
7. Только программирующий конструктор(или при его непосредственном участии и руководстве) можно создать интеллектуальный CAD, а в идеале BIM (мне это ближе).
8. Стоит задача - найти способ облегчить программирование для продвинутого конструктора!!! 

IgorT

29.01.20, 15:45:45 #16 Последнее редактирование: 29.01.20, 15:56:03 от IgorT
Это Вы про большенство. По ходу есть и меньшенство? Может бывают такие, где программировать ничего не надо. Функционал позволяет сделать "че хошь". Или че, совсем нету?
К стати... AutoCAD на счет программирования под самого себя впереди планеты всей! Уж там раздолье творческим конструкторам! Хоть обпрограммируйся! Ну че? Назад в Автокад?

И ещё. А какие задачи Вы наметили для себя решать программированием в К?

Elaeagnus

"Вашество"!
Древний русский город Коломна.
https://ascon.ru/

Цитата: undefined8. Стоит задача - найти способ облегчить программирование для продвинутого конструктора!!! 
Продвинутого конструктора рожает "подвинутая мама от продвинутого папы-конструктора"?

p3452

Цитата: IgorT от 29.01.20, 15:45:45К стати... AutoCAD на счет программирования под самого себя впереди планеты всей! Уж там раздолье творческим конструкторам! Хоть обпрограммируйся! Ну че? Назад в Автокад?
Не надо ругать программу, которую вы, очевидно, не знаете...
Простой пример - на форуме есть пару тем по КМД, ознакомитесь, а потом погуглите словосочетание "Advance Steel"(на сегодняшний день, это то же AutoCAD).

Цитата: Elaeagnus от 29.01.20, 15:46:55Продвинутого конструктора рожает "подвинутая мама от продвинутого папы-конструктора"?
Нет "продвинутыми" становятся после многократного общения с СТП конкретного CAD...

Мы ушли с темы поста и скатились до флуда из-за этого:
Цитата: IgorT от 29.01.20, 08:13:44Не верным путём идёте. Надо избавляться от необходимости что-то программировать простому конструктору при работе с CAD.

Предлагаю продолжить по теме или не продолжать вообще!

Elaeagnus

Цитата: p3452 от 29.01.20, 16:33:08Нет "продвинутыми" становятся после многократного общения с СТП конкретного CAD...
Однократное общение с СТП с положительным ответом (рекомендацией) делает пользователя "лохом"? :embarrassed: