Skip to content

Updated Website - #82

Open
alexanderoster wants to merge 319 commits into
Autodesk:developfrom
alexanderoster:develop
Open

alexanderoster wants to merge 319 commits into
Autodesk:developfrom
alexanderoster:develop

Conversation

@alexanderoster

Copy link
Copy Markdown
Contributor

No description provided.

alexanderoster and others added 30 commits January 9, 2026 10:26
…icrovector/recording timing (#58)

### feat(scanlabsmc): expose raw simulation data from SMC jobs
- Added `LoadRawSimulationData` API to SMCJob (ACT, ABI, dynamic bindings, wrappers).
- Implemented raw binary export from the SMC simulation working file and introduced
  `SIMULATIONWORKINGFILEISNOTINITIALIZED` error for missing simulation context.
- Updated simulation-mode job startup to create a managed temp file and start module
  recording via `slsc_job_begin_module`.
- Added SDK support for `slsc_cfg_register_callback_job_calculated` and
  `slsc_job_begin_module` with journal logging.

### fix(scanlab): correct microvector laser on/off delay conversion
- Converted microvector laser delays from seconds to RTC ticks (100 kHz) when calling
  `n_micro_vector_abs`, keeping `-1` as "no delay" sentinel.

### fix(scanlab): improve RTC recording loop progress condition
- Adjusted `executeListWithRecording` to use the card busy state for data-block reads
  and termination instead of measurement busy status to avoid missed blocks / early exit.

These changes enable retrieving raw SMC simulation artifacts for downstream processing,
while improving RTC replay correctness and recording reliability.

Signed-off-by: Yury Rodzikau <y.rodzikau@c1-technologies.com>
alexanderoster and others added 30 commits November 3, 2026 17:22
Upstream's lib3mf update (f785669, 18521dc, 67af441, 1a16bc1)
moved the headers in Libraries/lib3mf/, the lib3mf_win64.dll artifact
and _githash_lib3mf.txt to lib3mf eaff2359, but not the linux64 and
rpi shared libraries. The headers now load 879 lib3mf_* functions. The
old .so files (built from f6a9bb36) lack 52 of them, for example
lib3mf_toolpath_addlasersource and
lib3mf_reader_settoolpathlaserreferencechecks. On Linux, amc_server
therefore failed at startup with COULDNOTFINDLIBRARYEXPORT, whichever
plugin was configured.

Both libraries are rebuilt from lib3mf
eaff23596f7a1d038922d4a1bf4244d8cc367495 (branch toolpath_squashed,
"Toolpath Point Overrides Tests", 2026-11-03). Its
Autogenerated/Bindings/CppDynamic lib3mf_dynamic.h, lib3mf_dynamic.hpp
and lib3mf_types.hpp are byte-identical to the vendored headers.
_githash_linux64_lib3mf.txt and _githash_rpi_lib3mf.txt now name
eaff2359, matching _githash_lib3mf.txt.

Build: the same way as f6ff5ec, in a debian:bookworm-slim container
with build-essential, cmake and crossbuild-essential-arm64 installed.
linux64 uses native gcc 12.2.0 and rpi is cross-compiled with
aarch64-linux-gnu-gcc 12.2.0. Commands:

    cmake -DCMAKE_BUILD_TYPE=Release -DLIB3MF_TESTS=OFF <lib3mf source>
    cmake --build . --target lib3mf

For rpi, the first command also gets:

    -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64
    -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc
    -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++

Everything else uses lib3mf defaults: bundled zlib/libzip, stripped,
and libstdc++ linked dynamically. Both libraries still need at most
GLIBC 2.36 and GLIBCXX 3.4.29, and the NEEDED libraries and the SONAME
(lib3mf.so.2) are unchanged.

Verification: nm -D shows 879 of 879 referenced exports in both
libraries. The 10 exports that disappeared are the lib3mf_binarystream_*
and lib3mf_writer_{assign,create}binarystream functions, which lib3mf
removed and which the new headers no longer reference. The linux64
build dlopens and reports version 2.4.0, and amc_server starts with it.
The rpi build was not run, because the build host has no arm64
emulation.
* Run the upload finish request without a timeout

/upload/finish makes the server hash the whole stream, so its duration
grows with the file size; on slow hardware such as a Raspberry Pi a
large file exceeds the default 10 s request timeout. axios then aborted
the request, the rejection was swallowed, and the upload widget stayed
at 100 % although the upload never completed.

The finish request of build and image uploads now runs without a
timeout, like the chunk POSTs. A failed init, chunk or finish request
calls the new AMCUploadState.failUpload(), which invokes _onError, so
the frontend shows the failure instead of hanging.

* Fail only the active upload after a failed request

An upload widget reuses one AMCUploadState, and the user can start a new
upload while one is still running; the new upload takes over with a new
upload ID. A failing request of the replaced upload (e.g. a finish for a
3MF that does not parse) then reset the upload ID and fired _onError,
which silently stopped the newer upload.

AMCUpload.failUpload() now only acts while its upload is the active one,
as the chunk handlers already check.
A posted form value is written to the session client variable
<entity>.value, which every content poll of a sync:value edit overwrites
with the bound parameter. A poll that lands between the payload write
and the handler's GetUIProperty hands the handler the stored parameter
instead of the value the user submitted, so the event silently runs
with the old value.

handleEvent now also snapshots each posted form value into a per-event
CUIEventFormValues, and CUIEnvironment's GetUIProperty* read "value" of
a posted entity from that snapshot. The snapshot copies the parameter
types from the client variables, so typed reads convert as before.
Writing the value with SetUIProperty* during the event drops the
snapshot, so a handler still reads back what it set. No ACT change.
* Add an execution list seeding and measurement tool

DevTools/executionlist_perf seeds N build jobs and executions into a
scratch MinimalSystem server and measures GET /api/executions: the full
list, concurrent loads, ?since= deltas and the /api/frontend snapshot,
with latency, response size and amc_server CPU. It gives repeatable
before/after numbers for the following execution list changes.
Standard library Python only.

* Load build job execution list values in one query

Every BuildJobExecution getter used by an execution list (status,
description, end time stamp, elapsed time, and the job's thumbnail via
RetrieveJob) runs its own query, so a list of N executions costs about
6N queries.

The execution SELECT now also loads these values, and new getters
return them without querying again: GetLoadedStatus,
GetLoadedStatusString, GetLoadedDescription,
GetLoadedEndTimeStampInMicroseconds,
ComputeLoadedElapsedTimeInMicroseconds, JobHasThumbnailStream and
GetJobThumbnailStreamUUID. The existing getters still read fresh,
because long-lived plugin objects rely on that.

The SELECT was copied into five queries that had to match the column
order by hand. It now lives in
CBuildJobExecution::selectQueryWithoutConditions().

A damaged job row (missing, unparseable status, malformed thumbnail
UUID) used to make the whole list and every ?since= delta throw. It is
now reported as job status Deleted or as no thumbnail, for its own
entry only.

Unit tests: LibMCData_BuildJobs/ListExecs*.

* Build /api/executions entries without per-row queries

/api/executions wrote each entry with fresh getters (GetStatus,
GetStatusString, GetDescription, GetEndTimeStamp, ComputeElapsedTime)
and a RetrieveJob for the thumbnail: about six queries per execution,
for the full list and for every ?since= delta.

Each entry is now written by writeExecutionListEntryToJSON from the
values the list query already loaded, so a list request is one query
whatever its length. The JSON is unchanged, and an execution whose job
row is missing no longer fails the request.

At 2000 executions (DevTools/executionlist_perf, debug build) one full
list drops from 1.2 s to 63 ms, six concurrent loads from 8.3 s to
0.18 s, and a 100-row delta from 65 ms to 5 ms. The response bodies
are byte-identical before and after.

Unit test: LibMCData_BuildJobs/ListExecsJSONEntry.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants