Анимация сечений STL файлов Группой точек из файла

Автор Vitalij Lysanov, 02.04.19, 14:11:22

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

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

Vitalij Lysanov

При пересечении линий треугольников STL с плоскость получаем точки и применяя отображение Массива точек получим такую картину.

Программе достаточно заменить данные во входном файле массива точек и включить Перестроение
iDocument3D.RebuildDocument()




Можно и лучше сделать.

При сечении треугольника получаем отрезок и записываем только крайние точки отрезка.
Если отрезок длинный, можно записать еще промежуточные точки
Анимация легче получается с точками.




Отрезки можно просто отобразить,
1000 отрезков из программы для Компаса это много.
Отобразить отрезки через STEP файл это
https://forum.ascon.ru/index.php/topic,32252.0.html?PHPSESSID=14nfc646fte8prj0odbu55q0np







+ Благодарностей: 1

Vitalij Lysanov

#1
Если добавить точек, получим такое





   



___

Есть еще интересней

Можно загрузить несколько групп точек.
Каждая группа связана со своим текстовым файлом.
Изменяя текстовые файлы и перестраивая картинку, получим                . Уже фантазии не хватает 


Можно только сказать что это нормальные векторные координаты.
Все двигается и можно рассмотреть подробней любой участок, конечно не такое как
https://drive.google.com/open?id=1kgcMUiFPs3VwesSJ5eAQ4E-9myKXjMzi но все таки




Еще можно задать стиль вершин и цвет



Vitalij Lysanov

С точками Компаса трудно работать, они через все просвечиваются, ни чем не вырезаются и т.д.


Есть возможность применить точки по прямому назначению в растровых шрифтах.








Шрифты можно взять
http://electronics-and-mechanics.azm.su/page59.html

Символы идут с циклом 128 бит для размера 16*8
Дальше по 8 бит идет сам символ

Положение символа соответствует значению ord() символа

В функцию передаем текст и координаты



  # -*- coding: cp1251 -*-


import autopy


#print(ord('A')) chr
# http://electronics-and-mechanics.azm.su/page59.html

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument3D = iKompasObject.ActiveDocument3D()

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

import numpy as np




Bytes = np.fromfile("8X16WIN1251.FNT", dtype = "uint8")

Bits = np.unpackbits(Bytes)





def fil(by,kx,ky):
    global nau
    f2 = open("D:\\shrif.txt", "w")
     
    print by,kx,ky
    for nnn in range(len(by)):
           
     
        ordbu=ord(by[nnn])
        nom=0
        noms=0
   
     
     
     
        for n in range(128*(ordbu),128*(ordbu+1),1):

            nom =nom+1
       
            if Bits[n]>0:
                           
                x=nom
             
                z=noms
                               

                f2.write(str(kx))   
                f2.write("\t")

                f2.write(str(x*0.8+ky+nnn*10))   
                f2.write("\t")
                         
                f2.write(str(-z))   
                f2.write("\n")
                         
                f2.write(str(kx+20))   
                f2.write("\t")

                f2.write(str(x*0.8+ky+nnn*10))   
                f2.write("\t")
                         
                f2.write(str(-z))   
                f2.write("\n")
                         
                f2.write(str(kx-20))   
                f2.write("\t")

                f2.write(str(x*0.8+ky+nnn*10))   
                f2.write("\t")
                         
                f2.write(str(-z))   
                f2.write("\n")
                         


     
            if nom>7:
                nom=0
                                   
                noms=noms+1
               
     



    f2.close()
    iDocument3D.RebuildDocument()#

    nau=nau+1
    zast=autopy.bitmap.capture_screen()
    zast.save("D:/bu/"+str(nau)+".png","png")


t=" Kompas "


nau=0


for n in range(len(t)):
    print t[:n+1]
    fil(t[:n+1],11,-n*8)         

for n in range(len(t)):
    print t[:n+1]
    fil(t[n+1:],11,-55-n*8)         




fil(".",11,-55-n*8)         



         


+ Благодарностей: 1

FuG4s


Николай

Этот вопрос и есть главным в этой "томографии"  :)

Vitalij Lysanov

#5
STL файлы могут долго открываться. Чтобы ускорить, можно уменьшить количество информации с потерей точности воспроизведения.

Сечения строятся быстро для любой версии Компаса, это просто набор отрезков. Сечениями STL файла можно решить задачу установки оборудования. Например коробка и четыре ножки.По размерам проводим сечения. Каждое сечение это набор отрезков с точными координатами. Перемещая сечения находим место для оборудования.

Размер файла STL может быть еще больше, это не критично. Особенно если выводить информацию о отрезках прямой записью в STEP формат. 
При записи отрезков из программы замедление работы идет по нарастающей в зависимости от количества отрезков. При прямой записи в формат STEP, ни нарастающей, ни замедления, обычные текстовые операции с файлами.



Символы 3D можно применить для отображения оперативной информации о объектах под курсором. Например рассказать в 3D о наименовании детали и позиции в спецификации.
Эта картинка может скрываться и отображаться привычными операциями в дереве модели. Это просто массив точек.
Штатно можно задать и цвет точек для отображения информации.

 
Если бы точки скрывались другим объектом, можно было получить информацию о взаимодействии объектов, как булево вычитание. Например рассчитанная идеальная поверхность зуба шестерни и точки измеренные 3D сканером или полученные расчетом движения инструмента.     
Массив точек хорошая операция, легко оперативно изменить картинку, но точки через все просвечиваются. Для практической работы  остались только буквы. Попутно точки можно преобразовать любой математической функцией. если получить информацию о поверхности объекта, то отобразить на поверхности. И это все для оператиной работы. Чтобы отобразить в документах точки, это нужно еще постараться.