Построение поверхностей по данным программы Matplotlib

Автор Vitalij Lysanov, 11.09.21, 16:54:55

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

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

Vitalij Lysanov


Построение поверхностей по данным программы Matplotlib

В Компас 20 работает:

import matplotlib.pyplot as plt
Программа много что может и можно ее применять для задания исходных данных при построении.
Это все в одной среде с Python Компаса и просто нужно передать данные в программу построения.

Получим поверхности 3D c возможностью довести документацию до чертежей.


Остановимся на примере построения поверхностей по формуле.

import numpy as np
import matplotlib.pyplot as plt


xm, ym = np.mgrid[-5*np.pi:5*np.pi:100j,
                -5*np.pi:5*np.pi:100j]

zm = np.sin(xm) + np.cos(ym)

fig, ax = plt.subplots()

ax.imshow(zm)

fig.set_figwidth(12)   
fig.set_figheight(12)   

plt.show()

Это дает картинку:



И можно рассмотреть подробней:




В Компасе таблицу будем загружать кривыми эскиза.
Эскиз строим в ЛСК, смещение ЛСК и углы поворота обеспечат дополнительное управление выходной поверхностью.



     


# -*- coding: utf-8 -*-
#|ЛСК Компас 3д


#   Продолжение  https://forum.ascon.ru/index.php?topic=26313.msg193227#msg193227



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_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()



##_______________________________________________________________________________________________

import numpy as np
import matplotlib.pyplot as plt


xm, ym = np.mgrid[-5*np.pi:5*np.pi:100j,
                -5*np.pi:5*np.pi:100j]

zm = np.sin(xm) + np.cos(ym)

fig, ax = plt.subplots()

ax.imshow(zm)

fig.set_figwidth(12)
fig.set_figheight(12)

plt.show()
##________________________________________________________________________________________________

























m=[]

kompas_document_3d.CreateObjectsInCurrentLocalCS=True

#global im

##_____________________________________________________________
def imna():

    import datetime

    now = datetime.datetime.now()
    dd=str(now).replace(":","")
    dd=dd.replace(" ","")
    dd=dd.replace("-","")
    dd=dd.replace(".","")
    dd=dd[-8:]
    dd=dd[:5]

    return(dd)
##____________________________________________________________

im=int(imna()) # Исходное имя для ЛСК


n=0

##_____________________________________________________________
def V(x,y,z,   u1,u2,u3,  nz ):

    vid=0
    napr=2


    global n
    global zm

    print (nz)

    print(zm)

    n=n+1
    print(u1,u2,u3)


    global im
    global PartCollection

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

    iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(kompas_api7_module.IAuxiliaryGeomContainer.CLSID, pythoncom.IID_IDispatch)
    iAuxiliaryGeomContainer = kompas_api7_module.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
    iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
    iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
    iPoint3D = iLocalCoordinateSystem._oleobj_.QueryInterface(kompas_api7_module.IPoint3D.CLSID, pythoncom.IID_IDispatch)
    iPoint3D = kompas_api7_module.IPoint3D(iPoint3D)
    iPoint3D.ParameterType = kompas6_constants_3d.ksPParamCoord
    iPoint3D.X = x
    iPoint3D.Y = y
    iPoint3D.Z = z
    iLocalCoordinateSystem.OrientationType = kompas6_constants_3d.ksEulerCorners
    iLocalCoordinateSystem.Update()

    iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
    iLocalCSEulerParam = iLocalCSParameters._oleobj_.QueryInterface(kompas_api7_module.ILocalCSEulerParam.CLSID, pythoncom.IID_IDispatch)
    iLocalCSEulerParam = kompas_api7_module.ILocalCSEulerParam(iLocalCSEulerParam)
    iLocalCSEulerParam.NutationAngle = u1
    iLocalCSEulerParam.PrecessionAngle = u2
    iLocalCSEulerParam.RotationAngle = u3
  #  iLocalCoordinateSystem.Update()



    rr1=iLocalCoordinateSystem.DefaultObject(1)
    rr1.Name=str(im)
    im=im+1

    rr2=iLocalCoordinateSystem.DefaultObject(2)
    rr2.Name=str(im)
    im=im+1

    rr3=iLocalCoordinateSystem.DefaultObject(3)
    rr3.Name=str(im)
    im=im+1
    iLocalCoordinateSystem.Update()













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

    iSketch = iPart.NewEntity(kompas6_constants_3d.o3d_sketch)

    iDefinition = iSketch.GetDefinition()

    #_______________________________________________________________________________________________________
    PartCollection=iPart.EntityCollection(0) # все объекты
  #  print(PartCollection.GetCount())

    if napr==1:
        Plane = PartCollection.GetByName(str(im-1), True,True )
        #Plane = iLocalCoordinateSystem.DefaultObject(1)

    if napr==2:
        Plane = PartCollection.GetByName(str(im-2), True,True )
#        Plane = iLocalCoordinateSystem.DefaultObject(2)
    if napr==3:
        Plane = PartCollection.GetByName(str(im-3), True,True )
  #      Plane = iLocalCoordinateSystem.DefaultObject(3)

    iDefinition.SetPlane(Plane)

    iSketch.Create()


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

    iDocument2D.ksBezier(0, 1)
    for i in range(100):
            y=zm[nz,i]
            obj = iDocument2D.ksPoint(i, y, 0)



    iDocument2D.ksEndObj()
    iDefinition.EndEdit()
    m.append(iSketch)

   # iLocalCoordinateSystem.Update()



##    if vid==1:
##      #  iPart7 = kompas_document_3d.TopPart
##        iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
##        obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossExtrusion)
##        iDefinition = obj.GetDefinition()
##
##
##
##        iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_edge)
##
##        #iCollection.SelectByPoint(-58, 40.907157022394, 54.31460351552)
##        iEdge = iCollection.Last()
##
##        iEdgeDefinition = iEdge.GetDefinition()
##        iSketch = iEdgeDefinition.GetOwnerEntity()
##        iDefinition.SetSketch(iSketch)
##        iExtrusionParam = iDefinition.ExtrusionParam()
##        iExtrusionParam.direction = kompas6_constants_3d.dtNormal
##        iExtrusionParam.depthNormal = dl
##        iExtrusionParam.depthReverse = 0
##        iExtrusionParam.draftOutwardNormal = False
##        iExtrusionParam.draftOutwardReverse = False
##        iExtrusionParam.draftValueNormal = 0
##        iExtrusionParam.draftValueReverse = 0
##        iExtrusionParam.typeNormal = kompas6_constants_3d.etBlind
##        iExtrusionParam.typeReverse = kompas6_constants_3d.etBlind
##        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()
    n=n+1


##_____________________________________________________________


u1=0
u2=0


import math

for nz in range(0,100,2):



    V(nz,0,0,       -nz/3,  0,  90+nz/3,          nz)    #   u3 z


# https://commons.wikimedia.org/wiki/File:Euler2a.gif?uselang=ru углы эйлера
# https://ru.wikipedia.org/wiki/%D0%A3%D0%B3%D0%BB%D1%8B_%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%B0








def pos():
    ####________________________________________________________________
    #iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    #obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossLoft)


    obj = iPart.NewEntity(30)
    #obj = iPart.NewEntity(31)
    #obj = iPart.NewEntity(62)


    iDefinition = obj.GetDefinition()
    iSketches = iDefinition.Sketchs()

    for mn in m:
         iSketches.Add(mn)


    obj.name = "Элемент по сечениям:5"
    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()
    ##____________________________________________________________






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

    #obj = iPart.NewEntity(kompas6_constants_3d.o3d_bossLoft)


    #obj = iPart.NewEntity(30)
    #obj = iPart.NewEntity(31)
    obj = iPart.NewEntity(62)


    iDefinition = obj.GetDefinition()
    iSketches = iDefinition.Sketchs()

    for mn in m:
         iSketches.Add(mn)


    obj.name = "Поверхность по сечениям:3"
    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()








def sm():
    sm1=0
    sm2=0

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

    obj = iPart.NewEntity(kompas6_constants_3d.o3d_planeOffset)
    iDefinition = obj.GetDefinition()

    iDefinition.direction = True
 #   iDefinition.direction = False

    iDefinition.offset = sm1
    iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOZ)
    iDefinition.SetPlane(iPlane)
    obj.name = "Смещенная плоскость:1"
    iColorParam = obj.ColorParam()
    iColorParam.color = 16776960
    obj.Create()
    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    obj = iPart.NewEntity(kompas6_constants_3d.o3d_cutByPlane)
    iDefinition = obj.GetDefinition()

    iDefinition.direction = True
    iDefinition.direction = False


    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_planeOffset)
    iCollection.SelectByPoint(0, sm1, 0)
    iPlane = iCollection.First()
    iDefinition.SetPlane(iPlane)
    obj.name = "Сечение:3"
    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()
    ##_______________________________________________________________


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

    obj = iPart.NewEntity(kompas6_constants_3d.o3d_planeOffset)
    iDefinition = obj.GetDefinition()
    iDefinition.direction = False
    iDefinition.offset = sm2
    iPlane = iPart.GetDefaultEntity(kompas6_constants_3d.o3d_planeXOY)
    iDefinition.SetPlane(iPlane)
    obj.name = "Смещенная плоскость:1"
    iColorParam = obj.ColorParam()
    iColorParam.color = 16776960
    obj.Create()
    iPart7 = kompas_document_3d.TopPart
    iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)

    obj = iPart.NewEntity(kompas6_constants_3d.o3d_cutByPlane)
    iDefinition = obj.GetDefinition()
    iDefinition.direction = True
    iCollection = iPart.EntityCollection(kompas6_constants_3d.o3d_planeOffset)
    iCollection.SelectByPoint(0, 0, -sm2)
    iPlane = iCollection.First()
    iDefinition.SetPlane(iPlane)
    obj.name = "Сечение:3"
    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()

##___________________________________________________________




pos()


#sm()