CadQuery / CadQuery/cadquery

STEP export: Support overriding header metadata

Open
#1,396 1 comment 1 reaction 0 assignees View on GitHub
enhancement OCC feature
Dominant language
Python
Stars
5.8k
Forks
541
Avg merge
3d 2h
Merged PRs (30d)
5

Description

When exporting STEP files like that (an assembly in my case):

```python
assembly = cq.Assembly(name='foo')
# assembly.add(...)
assembly.save('out.step', 'STEP')
```

The exported file contains some metadata in the header:

```
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2023-09-01T11:49:38',('Author'),(
'Open CASCADE'),'Open CASCADE STEP processor 7.7','Open CASCADE 7.7'
,'Unknown');
```

It would be nice to make this medatada configurable. The most important part for us is the timestamp to allow generating deterministic output from [`librepcb-parts-generator`](https://github.com/LibrePCB/librepcb-parts-generator), but of course it would also make sense to override other metadata.

In C++ I do it like that (it works for me, but I'm not an OCC expert):

```cpp
STEPCAFControl_Writer writer;
writer.SetColorMode(Standard_True);
writer.SetNameMode(Standard_True);

APIHeaderSection_MakeHeader hdr(writer.ChangeWriter().Model());
hdr.SetDescriptionValue(1, new TCollection_HAsciiString("PCB Assembly"));
hdr.SetName(new TCollection_HAsciiString("my project"));
hdr.SetAuthorValue(1, new TCollection_HAsciiString(""));
hdr.SetOrganizationValue(1, new TCollection_HAsciiString(""));
hdr.SetOriginatingSystem(new TCollection_HAsciiString("LibrePCB"));
hdr.SetTimeStamp(new TCollection_HAsciiString("2000-01-01T00:00:00"));
```

Links to OCCT documentation:
* [`APIHeaderSection_MakeHeader`](https://old.opencascade.com/doc/occt-7.5.0/refman/html/class_a_p_i_header_section___make_header.html)
* [`STEPCAFControl_Writer`](https://old.opencascade.com/doc/occt-7.5.0/refman/html/class_s_t_e_p_c_a_f_control___writer.html)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.