Прямая запись графики в STEP файл

Автор Vitalij Lysanov, 31.03.19, 01:53:42

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

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

Vitalij Lysanov


Обмен информацией через STEP файлы позволит значительно увеличить скорость построения графики из программ.

Постоянную часть текста формата STEP просто переписываем.

В переменной части блоки построения однородных примитивов должны отличаться.




Блок рисующий отрезок.

#40=GEOMETRIC_CURVE_SET('',(#43));
#41=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION('NONE',(#40),#6);
#42=SHAPE_REPRESENTATION_RELATIONSHIP('','',#1,#41);
#43=TRIMMED_CURVE('',#44,(PARAMETER_VALUE(0.)),(PARAMETER_VALUE(39.1535439009038)),  .T.,.PARAMETER.); Длина отрезка





#44=LINE('',#45,#46);


#45=CARTESIAN_POINT('',(70.,-79.,8.));   Координата точки
#46=VECTOR('',#47,1.);
#47=DIRECTION('',(-0.740673694146256,0.102161888847759,0.664052277510436)); направление отрезка


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

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

Большие количества получаются при преобразовании треугольников формата STL в поверхности треугольными заплатками.

Много отрезков также получается при сечении плоскостью формата STL, их также можно вывести через STEP формат.

_
Из откровений Компаса.
Из формата STL берем сечение и точки загружаем в массив точек, (ограничение до 200 000  точек).
Построили картинку.
Теперь изменяем массив точек, другое сечение.
Сразу говорит что нужно перестраиваться. Перестраиваем и другая картина..
Так можно изменять плоскость сечения, программой задать перестроение и мультик получится.
.

__





import math
f1 = open("D:\\toch1.stp", "w")


dfn='''ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('STEP AP214'),
    '1');
FILE_NAME('',
    '',
    ('  '),
    (''),
    '',
    '',
    '');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1}'));
ENDSEC;

DATA;
#1=SHAPE_REPRESENTATION('NONE',(#2),#6);
#2=AXIS2_PLACEMENT_3D('',#3,#4,#5);
#3=CARTESIAN_POINT('',(0.,0.,0.));
#4=DIRECTION('',(0.,0.,1.));
#5=DIRECTION('',(1.,0.,0.));
#6=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#7,#9,#10))REPRESENTATION_CONTEXT('NONE','NONE'));
#7=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#8=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-005),#7,'NONE','NONE');
#9=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#10=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#11=SHAPE_DEFINITION_REPRESENTATION(#12,#1);
#12=PRODUCT_DEFINITION_SHAPE('NONE','NONE',#13);
#13=PRODUCT_DEFINITION('','UNSPECIFIED',#14,#22);
#14=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('ANY','UNSPECIFIED',#15,.NOT_KNOWN.);
#15=PRODUCT('1','NONE','NONE',(#25));
#16=PERSON('UNSPECIFIED',' Userok  ','UNSPECIFIED',('UNSPECIFIED'),('UNSPECIFIED'),
('UNSPECIFIED'));
#17=ORGANIZATION('UNSPECIFIED','UNSPECIFIED','UNSPECIFIED');
#18=PERSON_AND_ORGANIZATION(#16,#17);
#19=PERSON_AND_ORGANIZATION_ROLE('design_owner');
#20=CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT(#18,#19,(#15));
#21=PRODUCT_RELATED_PRODUCT_CATEGORY('detail','',(#15));
#22=DESIGN_CONTEXT('detailed design',#23,'design');
#23=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
#24=APPLICATION_PROTOCOL_DEFINITION('international standard','automotive_design',
2011,#23);
#25=MECHANICAL_CONTEXT('NONE',#23,'mechanical');
#26=CC_DESIGN_DATE_AND_TIME_ASSIGNMENT(#27,#31,(#13));
#27=DATE_AND_TIME(#28,#29);
#28=CALENDAR_DATE(0,1,1);
#29=LOCAL_TIME(0,0,0.,#30);
#30=COORDINATED_UNIVERSAL_TIME_OFFSET(0,0,.AHEAD.);
#31=DATE_TIME_ROLE('creation_date');
#32=CC_DESIGN_APPROVAL(#33,(#13));
#33=APPROVAL(#34,'UNSPECIFIED');
#34=APPROVAL_STATUS('not_yet_approved');
#35=APPROVAL_DATE_TIME(#36,#33);
#36=DATE_AND_TIME(#37,#38);
#37=CALENDAR_DATE(0,1,1);
#38=LOCAL_TIME(0,0,0.,#39);
#39=COORDINATED_UNIVERSAL_TIME_OFFSET(0,0,.AHEAD.);









'''



dfs='''
#44=LINE('',#45,#46);


#45=CARTESIAN_POINT('',(70.,-79.,8.));
#46=VECTOR('',#47,1.);
#47=DIRECTION('',(-0.740673694146256,0.102161888847759,0.664052277510436));

'''


dfk='''
ENDSEC;
END-ISO-10303-21;

'''





f1.write ( dfn )


for n in range(10,1500,1):
    dob=str(n)


    s01="#"+dob+"40=GEOMETRIC_CURVE_SET('',(#"+dob+"43));\n"
    s02="#"+dob+"41=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION('NONE',(#"+dob+"40),#6);\n"
    s03="#"+dob+"42=SHAPE_REPRESENTATION_RELATIONSHIP('','',#1,#"+dob+"41);\n"
    s04="#"+dob+"43=TRIMMED_CURVE('',#"+dob+"44,(PARAMETER_VALUE(0.)),(PARAMETER_VALUE("+str(n)+")),.T.,.PARAMETER.);\n"





    s1= "#"+dob+"44=LINE('',#"+dob+"45,#"+dob+"46);\n"
    s2= "#"+dob+"45=CARTESIAN_POINT('',("+str(n)+",-79.,8.));\n"
    s3= "#"+dob+"46=VECTOR('',#"+dob+"47,1.);\n"


    s4= "#"+dob+"47=DIRECTION('',("+str(-math.sin(n/10.0))+","+str(math.cos(n/1000.0))+","+str(n/100.0)+"));\n\n\n\n\n"



    f1.write(s01)
    f1.write(s02)
    f1.write(s03)
    f1.write(s04)

    f1.write(s1)
    f1.write(s2)
    f1.write(s3)
    f1.write(s4)





f1.write ( dfk )


f1.close()   





Vitalij Lysanov

Пример вывода информации о сечениях STL файла отрезками  формата STEP

https://drive.google.com/open?id=130Sbtp8fjA-S0OsLX6lGF0Z1IkY_UfMt