重构 Autocal 采集页:单一队列与控制器驱动的主按钮
选点、对准、加载与录像分散在两个面板,状态靠隐藏相位判断。现改由不依赖 Qt 的采集控制器驱动,并加入录像选项、汇总平铺副本、保持到时自动结束、会话结束回到空闲,以及无设备时的模拟采集。已运行 Autocal 非 Qt 测试并通过范围内门禁;界面测试待 Windows 复核,未做实机验收。
This commit is contained in:
@@ -230,7 +230,7 @@
|
||||
"workspace": {
|
||||
"tab_axes": "Axis debug",
|
||||
"tab_sequence": "Test sequence",
|
||||
"tab_finger": "Finger debug",
|
||||
"tab_finger": "Geometry & mounting",
|
||||
"tab_sensor": "Calibration capture",
|
||||
"tab_records": "Calibration records",
|
||||
"not_built": "Not built yet",
|
||||
@@ -338,7 +338,6 @@
|
||||
"remove": "Delete selected",
|
||||
"up": "Move up",
|
||||
"down": "Move down",
|
||||
"import_points": "Import from finger debug",
|
||||
"align": "Align normal",
|
||||
"reacquire": "Record selected again",
|
||||
"source": "Reference source",
|
||||
@@ -410,7 +409,7 @@
|
||||
"capture_wait": "recording is not ready; the hold cannot be confirmed yet"
|
||||
},
|
||||
"finger": {
|
||||
"title": "Finger calibration-point debug",
|
||||
"title": "Geometry & mounting",
|
||||
"bundle_path": "Export bundle",
|
||||
"load": "Load bundle…",
|
||||
"reset_view": "Reset view",
|
||||
@@ -421,8 +420,7 @@
|
||||
"flat_title": "Flat image (click to pick)",
|
||||
"readout_title": "Readouts",
|
||||
"preview_title": "3D preview",
|
||||
"points_title": "Picked points",
|
||||
"select_hint": "Click a point on the flat image to pick a calibration point.",
|
||||
"select_hint": "Click a point on the flat map to try that point's pose.",
|
||||
"no_bundle": "No export bundle loaded.",
|
||||
"no_surface": "Pixel ({x}, {y}) is not on the sensing surface (UV gap).",
|
||||
"row_sensor_point": "Sensor point (mm)",
|
||||
@@ -453,14 +451,7 @@
|
||||
"sensor_xy": "Sensor X / Y",
|
||||
"sensor_zy": "Sensor Z / yaw",
|
||||
"setup_hint": "How the sensor actually sits on the stack with the machine at zero: X/Y/Z translation and a yaw about Z. Z is the mounting-plate thickness. The plate on this bench is 8 mm.",
|
||||
"clear_points": "Clear points",
|
||||
"remove_selected": "Remove selected",
|
||||
"move_up": "Move up",
|
||||
"move_down": "Move down",
|
||||
"selected_count": "{count} selected",
|
||||
"table_hint": "Tick a row to select it, double-click a sensor coordinate or normal to edit it. The pose columns are solved from those, so they update themselves.",
|
||||
"edit_not_a_number": "That cell needs a number; the previous value was kept.",
|
||||
"point_count": "{count} points",
|
||||
"residual_value": "{residual}° — {verdict}",
|
||||
"reachable": "this normal can be aligned with Z",
|
||||
"unreachable": "this normal cannot be aligned with Z (yaw travel limit)",
|
||||
@@ -482,28 +473,9 @@
|
||||
"preview_no_gl": "No OpenGL context: {error}",
|
||||
"preview_draw_failed": "Drawing failed: {error}",
|
||||
"preview_solve_failed": "Solve failed: {error}",
|
||||
"col_x": "x",
|
||||
"col_y": "y",
|
||||
"col_z": "z",
|
||||
"col_nx": "nx",
|
||||
"col_ny": "ny",
|
||||
"col_nz": "nz",
|
||||
"col_X": "X",
|
||||
"col_Y": "Y",
|
||||
"col_Z": "Z",
|
||||
"col_yaw": "yaw",
|
||||
"col_pitch": "pitch",
|
||||
"col_residual": "residual(°)",
|
||||
"loaded": "Bundle loaded: {vertices} vertices · {triangles} triangles · {extent} mm · {scale} mm per unit",
|
||||
"load_failed": "Load failed: {error}",
|
||||
"picked": "Picked: residual {residual}° · yaw {yaw}° · pitch {pitch}°",
|
||||
"export_sites": "Export operator site list…",
|
||||
"export_sites_tip": "Export all points in displayed order, with UV pixels and sensor/platform millimetres. UV origin matches calibration.",
|
||||
"export_no_points": "Pick UV sites first",
|
||||
"export_edited_point": "Point {order} was edited in 3D and no longer matches its UV pixel; pick it again before exporting",
|
||||
"sites_exported": "Operator site list exported: {path}",
|
||||
"col_u_px": "U (px)",
|
||||
"col_v_px": "V (px)"
|
||||
"picked": "Picked: residual {residual}° · yaw {yaw}° · pitch {pitch}°"
|
||||
},
|
||||
"sequence": {
|
||||
"title": "Test sequence design",
|
||||
@@ -671,7 +643,8 @@
|
||||
"guide_incomplete": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: inspect the stop reason and recorded signal. Incomplete attempts are excluded from fitting.",
|
||||
"guide_check": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: select a trial and Check hold windows; adjust the time interval if needed.",
|
||||
"guide_save": "1 Check identity → 2 Select site / trial → 3 Check stable windows → 4 Save\nNext: inspect remaining holds or save current analysis.",
|
||||
"video": "View recording"
|
||||
"video": "View recording",
|
||||
"video_not_recorded": "Video not recorded, per the session settings"
|
||||
},
|
||||
"quality": {
|
||||
"open": "Repeatability and validation…",
|
||||
@@ -780,6 +753,163 @@
|
||||
"retry": "Publish summary again",
|
||||
"done": "Summary published again: {path}",
|
||||
"reason_hold_not_found": "This hold attempt is not in the record",
|
||||
"reason_hold_not_complete": "This hold attempt was discarded by a remeasure"
|
||||
"reason_hold_not_complete": "This hold attempt was discarded by a remeasure",
|
||||
"copy_failed": "The summary was published, but the readable copy was not written: {detail}. The pointer still names the published summary and the recording is unchanged."
|
||||
},
|
||||
"cap": {
|
||||
"check": {
|
||||
"bundle": "Calibration bundle",
|
||||
"frames": "Input frames",
|
||||
"bus": "Bus and axis mapping",
|
||||
"output": "Output folder writable",
|
||||
"sn": "Sensor SN",
|
||||
"max_force": "Maximum force"
|
||||
},
|
||||
"action": {
|
||||
"start": "Start capture",
|
||||
"align": "Align this point",
|
||||
"confirm_target": "At the target — begin the hold",
|
||||
"confirm_hold": "Hold finished — record this level",
|
||||
"confirm_liftoff": "Confirm the probe has left the sensor",
|
||||
"finish": "Finish the session",
|
||||
"remeasure": "Measure this level again",
|
||||
"skip": "Skip this point",
|
||||
"stop": "Stop and keep the data",
|
||||
"open_session": "Open session folder",
|
||||
"open_summary": "Open summary",
|
||||
"copy_path": "Copy path",
|
||||
"settings": "Change input / bundle…"
|
||||
},
|
||||
"block": {
|
||||
"closing": "Still writing to disk — wait for the close to finish",
|
||||
"align_while_recording": "Recording: the platform cannot move to align another point",
|
||||
"skip_live": "This level is already being recorded and cannot be skipped",
|
||||
"no_directory": "There is no session folder yet",
|
||||
"no_summary": "No summary has been published yet",
|
||||
"not_ready": "Some checks are still unmet — see the Ready list above",
|
||||
"no_sites": "The queue has no points yet",
|
||||
"no_session": "The session settings are incomplete (output folder, model, SN, …)",
|
||||
"no_solver": "No pose solver is connected, so the platform cannot be aligned",
|
||||
"no_pose": "This point has no usable solved pose",
|
||||
"hold_running": "The hold time has not elapsed",
|
||||
"remeasure_unavailable": "No level can be measured again right now",
|
||||
"stop_unavailable": "There is no running session to stop",
|
||||
"finish_unavailable": "The session is not finished yet",
|
||||
"skip_unavailable": "This build has no way to skip the current point, so it cannot be skipped",
|
||||
"busy": "This action is not available in the current step",
|
||||
"no_bundle": "No calibration bundle (export) is loaded",
|
||||
"no_uv": "Click a position on the UV map first",
|
||||
"no_output": "Choose the output directory first",
|
||||
"no_sn": "Enter the sensor SN first",
|
||||
"no_max_force": "Enter the maximum force (N) first",
|
||||
"queue_busy": "The session is running; the point queue cannot be edited",
|
||||
"bundle_busy": "The session is running; the calibration bundle cannot be changed",
|
||||
"no_worker": "The input is not running, so recording cannot start",
|
||||
"bad_levels": "Load levels must be strictly increasing, above zero and within the maximum force",
|
||||
"bad_reference": "The measured reference force is not a valid number",
|
||||
"align_running": "An alignment move is still running; wait for it to finish",
|
||||
"pose_unreachable": "This point cannot be reached under the current mounting and travel, so aligning is disabled"
|
||||
},
|
||||
"session": {
|
||||
"active": "Session: {sites} site(s) · {done}/{total} holds\n{path}",
|
||||
"none": "No session yet. Align the first point, then press Start capture.",
|
||||
"settings_hint": "Input source, bundle, session parameters and recording options are in \"Change input / bundle…\"; starting a capture does not switch pages."
|
||||
},
|
||||
"queue": {
|
||||
"title": "Point queue",
|
||||
"empty": "The queue is empty: click a position on the UV map, set the levels, then press Add current point.",
|
||||
"add": "Add current point",
|
||||
"update": "Update selected",
|
||||
"remove": "Remove selected",
|
||||
"up": "Move up",
|
||||
"down": "Move down",
|
||||
"site_id": "Site id",
|
||||
"repeats": "Repeats",
|
||||
"current_uv": "Current UV",
|
||||
"col_id": "Site",
|
||||
"col_position": "Sensor position (mm)",
|
||||
"col_repeats": "Repeats",
|
||||
"col_reachable": "Reachable",
|
||||
"col_state": "State",
|
||||
"reachable": "reachable",
|
||||
"unreachable": "unreachable",
|
||||
"state_pending": "pending",
|
||||
"state_partial": "in progress",
|
||||
"state_complete": "complete",
|
||||
"state_skipped": "skipped",
|
||||
"selected": "Selected: {site}",
|
||||
"update_short": "Update",
|
||||
"remove_short": "Remove",
|
||||
"export": "Export point sheet…",
|
||||
"export_tip": "Exports U/V, sensor coordinates, platform targets and the mapping identity in queue order; refuses when a coordinate no longer matches the mapping.",
|
||||
"export_saved": "Point sheet exported: {path}",
|
||||
"export_no_points": "The queue has no points yet",
|
||||
"export_no_map": "No UV map is loaded, so the point sheet cannot be exported",
|
||||
"export_missing_uv": "Point {order} has no UV coordinates, so the point sheet cannot be exported",
|
||||
"export_no_pose": "Point {order} has no solved pose, so the point sheet cannot be exported",
|
||||
"export_edited_point": "Point {order}'s sensor coordinates no longer match the current UV map; take the point again before exporting."
|
||||
},
|
||||
"card": {
|
||||
"title": "Current point",
|
||||
"no_point": "The queue is empty: add a point first.",
|
||||
"no_progress": "Progress appears once the session starts.",
|
||||
"next_site": "Next point: {site}"
|
||||
},
|
||||
"step": {
|
||||
"align_point": "1. Align the current point",
|
||||
"start_session": "2. Start capture",
|
||||
"confirm_target": "3. Target reached - start the hold",
|
||||
"confirm_hold": "4. Hold finished - record this step",
|
||||
"confirm_liftoff": "5. Confirm liftoff, go to the next point",
|
||||
"finish_session": "6. Finish the session",
|
||||
"closing": "Writing to disk"
|
||||
},
|
||||
"hint": {
|
||||
"align_point": "Align first: the primary button asks for the move plan; Start capture only appears after the move has been confirmed complete.",
|
||||
"start_session": "This point is aligned. The primary button opens the session and records the first point step by step.",
|
||||
"not_ready": "The ✗ checks must pass before starting; hover them to see why.",
|
||||
"confirm_target": "Load to the current target, enter the measured reference force (or the six-axis components), then press the primary button.",
|
||||
"confirm_hold": "Holding: {seconds:.1f} s left; do not change the load.",
|
||||
"confirm_liftoff": "This repeat is recorded. Lift the indenter, confirm it has left the sensor, then press the primary button to go to the next point.",
|
||||
"finish_session": "Every record is written. Press the primary button to finish the session and publish the summary.",
|
||||
"closing": "Closing the recording and checking it; nothing else runs until it finishes."
|
||||
},
|
||||
"message": {
|
||||
"aligning": "Alignment requested for {site}. Start capture stays unavailable until the move completes and is confirmed.",
|
||||
"aligned": "Alignment confirmed: {site}",
|
||||
"align_failed": "Alignment did not finish: {detail}. The platform is not confirmed in place; align again.",
|
||||
"started": "Session started: {path}",
|
||||
"attach_failed": "Could not start recording: {detail}",
|
||||
"queue_added": "Point added: {site}",
|
||||
"queue_removed": "Point removed: {site}",
|
||||
"skipped": "Point skipped: {site}",
|
||||
"stopped": "Stopped; the data already written is kept.",
|
||||
"done": "Session finished: {path}"
|
||||
},
|
||||
"recording": {
|
||||
"title": "Recording",
|
||||
"video": "Record video",
|
||||
"codec": "Video codec",
|
||||
"lossless": "Also store lossless frames",
|
||||
"unavailable": "{codec}: unavailable on this machine, disabled",
|
||||
"probe_failed": "The codec probe did not run: {detail}",
|
||||
"off": "Video off, per the session settings",
|
||||
"estimate": "Estimated {size} ({seconds}); {free} free on disk",
|
||||
"disk_short": "Less than twice the estimated size is free on disk",
|
||||
"no_plan": "The queue is empty, so no size can be estimated yet",
|
||||
"locked": "Recording options are locked once the session has started",
|
||||
"summary": "Recording: {codec}"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Capture settings",
|
||||
"input": "Input source",
|
||||
"bundle": "Calibration bundle (export)",
|
||||
"bundle_none": "not loaded",
|
||||
"bundle_load": "Load export bundle…",
|
||||
"session": "Session parameters",
|
||||
"simulate": "Simulate (no camera, no platform motion)",
|
||||
"close": "Close",
|
||||
"max_required": "Required; the program does not assume a value"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user