为相机网格笔画增加双视图导出

沿用彩色纹理的视图归属、接缝留白和自动页面尺寸。
已验证双视图与单视图 Blender 导出、相关测试及文档门禁。
This commit is contained in:
ykcheungab
2026-10-06 11:01:45 +08:00
parent e8d231ec39
commit afe1ce39cb
16 changed files with 197989 additions and 86 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1,403 @@
{
"schema": "orisys-sensor-design/print-views-v1",
"mesh": "sensing_surface",
"units": "mm",
"angle_convention": "TWO frames are reported per camera, because they answer different questions. `world` is measured against the scene axes: that is the frame Blender's Transform panel shows for the camera's location and rotation, so check the numbers here against Blender. `object_local` is measured against the mesh object's own axes, which is the physically meaningful frame when the part is a body of revolution. They differ whenever the mesh object carries a rotation. In both: azimuth = atan2(y, x) in the frame's XY plane from +X, wrapped to [0, 360); elevation = signed angle from that plane; polar_from_z_deg = angle from that frame's +Z. The flat azimuth_deg/elevation_deg keys are the WORLD frame.",
"centroid_world_mm": [
0.000793,
-17.867939,
-5.954863
],
"centroid_object_mm": [
0.000793,
0.515454,
18.827053
],
"part_transform": {
"rotation_euler_deg": [
110.0,
-0.0,
0.0
],
"scale": [
1.0,
1.0,
1.0
]
},
"settings": {
"nx": 80,
"ny": 80,
"default_raster": [
3700,
3280
],
"default_page_mm": [
18.5,
16.4
],
"page": {
"mode": "auto",
"px_per_mm": 200.0
},
"seed": 7
},
"ownership": {
"mode": "authored",
"incidence_limit_deg": 70.0,
"min_footprint_mm2": 0.002,
"min_triangle_coverage": 0.6,
"max_hole_fraction": 0.02,
"triangles": 5007,
"owned_mm2": 616.533224,
"hole_mm2": 0.091787,
"total_mm2": 616.625011,
"hole_fraction": 0.00014885,
"inked_mm2": null,
"inked_fraction": null
},
"seam_margin": {
"enabled": false,
"apply": "post_process",
"treatment": "no_print",
"inset_mm": 0.1,
"total_mm": 0.2,
"alignment_tolerance_mm": 0.1
},
"views": [
{
"name": "cam_uv_1",
"type": "ORTHO",
"world": {
"position_mm": [
18.384392,
-41.181198,
-19.463104
],
"view_direction": [
0.563601971,
-0.714734852,
-0.414133906
],
"distance_to_centroid_mm": 32.618052,
"azimuth_deg": 308.2574,
"elevation_deg": -24.4648,
"polar_from_z_deg": 114.4648
},
"object_local": {
"position_mm": [
18.384392,
-4.204537,
45.354443
],
"view_direction": [
0.563601971,
-0.144704893,
0.813273251
],
"distance_to_centroid_mm": 32.618053,
"azimuth_deg": 345.6003,
"elevation_deg": 54.417,
"polar_from_z_deg": 35.583
},
"camera_transform": {
"rotation_euler_deg": [
45.0,
135.0,
-0.0
],
"scale": [
0.014988,
0.014988,
0.014988
],
"parent": null
},
"part_transform": {
"rotation_euler_deg": [
110.0,
-0.0,
0.0
],
"scale": [
1.0,
1.0,
1.0
]
},
"ortho_scale_mm": 27.0,
"lens_mm": null,
"sensor_width_mm": 36.0,
"clip_start_mm": 0.1,
"clip_end_mm": 1000.0,
"position_mm": [
18.384392,
-41.181198,
-19.463104
],
"view_direction": [
0.563601971,
-0.714734852,
-0.414133906
],
"distance_to_centroid_mm": 32.618052,
"azimuth_deg": 308.2574,
"elevation_deg": -24.4648,
"polar_from_z_deg": 114.4648,
"azimuth_deg_frame": "world",
"id": "uv_1",
"uv_map": "uv_1",
"region_camera": "cam_uv_1",
"pattern_camera": "cam_sensor",
"page_source": "auto",
"page_mm": [
17.67,
23.565
],
"raster_px": [
3534,
4713
],
"page_residual": [
1.2885921574223858e-07,
1.0443071318810837e-07
],
"page_slope": [
0.05659285670700212,
0.04243635765680492
],
"owned_triangles": 2471,
"owned_mm2": 308.2663995595292,
"inked_triangles": 2471,
"inked_mm2": null,
"emitted_fragments": 8292,
"total_fragments": 32593,
"gap_enabled": false,
"gap_apply": null,
"gap_requested_total_mm": 0.0,
"gap_achieved_total_mm": null,
"gap_removed_fragments": 0,
"gap_clipped_polygons": 0,
"gap_trimmed_polygons": 0,
"base_triangles": 2471,
"seed": 7,
"artifacts": {
"png": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.png",
"svg": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.svg",
"pdf": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.pdf"
}
},
{
"name": "cam_uv_2",
"type": "ORTHO",
"world": {
"position_mm": [
-18.384399,
-41.181198,
-19.463104
],
"view_direction": [
-0.563635349,
-0.714715183,
-0.414122522
],
"distance_to_centroid_mm": 32.618951,
"azimuth_deg": 231.7401,
"elevation_deg": -24.4641,
"polar_from_z_deg": 114.4641
},
"object_local": {
"position_mm": [
-18.384399,
-4.204537,
45.354443
],
"view_direction": [
-0.56363529,
-0.1447009,
0.81325078
],
"distance_to_centroid_mm": 32.618952,
"azimuth_deg": 194.3985,
"elevation_deg": 54.4148,
"polar_from_z_deg": 35.5852
},
"camera_transform": {
"rotation_euler_deg": [
45.0,
-135.0,
-0.0
],
"scale": [
0.014988,
0.014988,
0.014988
],
"parent": null
},
"part_transform": {
"rotation_euler_deg": [
110.0,
-0.0,
0.0
],
"scale": [
1.0,
1.0,
1.0
]
},
"ortho_scale_mm": 27.0,
"lens_mm": null,
"sensor_width_mm": 36.0,
"clip_start_mm": 0.1,
"clip_end_mm": 1000.0,
"position_mm": [
-18.384399,
-41.181198,
-19.463104
],
"view_direction": [
-0.563635349,
-0.714715183,
-0.414122522
],
"distance_to_centroid_mm": 32.618951,
"azimuth_deg": 231.7401,
"elevation_deg": -24.4641,
"polar_from_z_deg": 114.4641,
"azimuth_deg_frame": "world",
"id": "uv_2",
"uv_map": "uv_2",
"region_camera": "cam_uv_2",
"pattern_camera": "cam_sensor",
"page_source": "auto",
"page_mm": [
17.67,
23.565
],
"raster_px": [
3534,
4713
],
"page_residual": [
1.0079875600865762e-07,
9.84046944485506e-08
],
"page_slope": [
0.056592803427866885,
0.04243927082965147
],
"owned_triangles": 2488,
"owned_mm2": 308.2668241740881,
"inked_triangles": 2488,
"inked_mm2": null,
"emitted_fragments": 8334,
"total_fragments": 32593,
"gap_enabled": false,
"gap_apply": null,
"gap_requested_total_mm": 0.0,
"gap_achieved_total_mm": null,
"gap_removed_fragments": 0,
"gap_clipped_polygons": 0,
"gap_trimmed_polygons": 0,
"base_triangles": 2488,
"seed": 7,
"artifacts": {
"png": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.png",
"svg": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.svg",
"pdf": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.pdf"
}
}
],
"seam": {
"boundary": "use_seam",
"edges": 45,
"components": 2,
"component_owner": {
"0": "uv_2",
"1": "uv_1"
}
},
"pattern_camera": {
"name": "cam_sensor",
"type": "PERSP",
"world": {
"position_mm": [
0.0,
-9.29984,
4.357839
],
"view_direction": [
-5.912e-05,
0.639047205,
0.769167483
],
"distance_to_centroid_mm": 13.407615,
"azimuth_deg": 90.0053,
"elevation_deg": 50.2792,
"polar_from_z_deg": 39.7208
},
"object_local": {
"position_mm": [
0.0,
7.275762,
7.248523
],
"view_direction": [
-5.912e-05,
0.504214048,
-0.863578737
],
"distance_to_centroid_mm": 13.407614,
"azimuth_deg": 90.0067,
"elevation_deg": -59.7208,
"polar_from_z_deg": 149.7208
},
"camera_transform": {
"rotation_euler_deg": [
30.0,
-0.0,
-179.9999
],
"scale": [
4.671241,
4.671243,
4.671243
],
"parent": null
},
"part_transform": {
"rotation_euler_deg": [
110.0,
-0.0,
0.0
],
"scale": [
1.0,
1.0,
1.0
]
},
"ortho_scale_mm": null,
"lens_mm": 0.396041,
"sensor_width_mm": 1.4,
"clip_start_mm": 0.01,
"clip_end_mm": 100.0,
"position_mm": [
0.0,
-9.29984,
4.357839
],
"view_direction": [
-5.912e-05,
0.639047205,
0.769167483
],
"distance_to_centroid_mm": 13.407615,
"azimuth_deg": 90.0053,
"elevation_deg": 50.2792,
"polar_from_z_deg": 39.7208,
"azimuth_deg_frame": "world"
}
}
@@ -0,0 +1,7 @@
{
"length_ratio": 0.84,
"orientation_mode": "random",
"proposals": 100000,
"seed": 7,
"width_ratio": 0.42
}
@@ -0,0 +1,77 @@
{
"schema": "orisys-sensor-design/stroke-texture-manifest-v2",
"revision_dir": "D:\\orisys_ws\\orisys-sensor-design\\sensors\\finger-xynova\\r01",
"views": true,
"source_job": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\_texture_views_job.json",
"sha256": "7259df462de85a86ec575a6296592bf78c008d44ae531d7efd233118686b194f"
},
"source_blend": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\sensors\\finger-xynova\\r01\\source\\geometry.blend",
"sha256": "2a48957a88c760775582e4dc4780d98bf9fc94348918cff8efd82e840217530c"
},
"settings": {
"mode": "camera_grid_capsules",
"resolved": {
"seed": 7,
"width_ratio": 0.42,
"length_ratio": 0.84,
"orientation_mode": "random",
"proposals": 100000
},
"design_yaml": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\sensors\\finger-xynova\\r01\\design.yaml",
"sha256": "711ad69649ef0d771e8f68295bea129af0f13c0e003d9aaf361e25ea5ab8c34e"
},
"params": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\_stroke_pattern_params.json",
"sha256": "823639aa72706b1d47d0c531e704cb99f36517e87fcad7de707417cb474e6993"
}
},
"outputs": [
{
"id": "uv_1",
"artifacts": {
"png": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.png",
"sha256": "53a8af45eecedd370a152223d32fa0ff3b42cbf6d5729953ac04bcb20db7a393"
},
"svg": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.svg",
"sha256": "392363d18ff980e3f698ebb2e745a0f0e5efa3870c9af966671b19d39831420e"
},
"pdf": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_1.pdf",
"sha256": "11956e5dc65963334b9277797270cb28b1a0d6d5b80d8b927122d04dce3ff6cb"
}
}
},
{
"id": "uv_2",
"artifacts": {
"png": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.png",
"sha256": "25ca871f39de3d7380289b825021e5f555182be63b1809857de38952121a0fec"
},
"svg": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.svg",
"sha256": "76a72e09a2d7ff22972b99b14b5849d500be9060208f875719360d1cb45321c1"
},
"pdf": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\stroke_texture_uv_2.pdf",
"sha256": "09e7cee75d459aaae234362350046af1bdbc6557d5ef950c87462e48e2b907fa"
}
}
}
],
"auxiliary": {
"_multiview_ground_truth.json": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\_multiview_ground_truth.json",
"sha256": "a54e3ecc696471bf2e64b8e9693aa006538292954bc7dd8d2309b4f31447a160"
},
"_print_views.json": {
"path": "D:\\orisys_ws\\orisys-sensor-design\\build\\textures\\finger-xynova\\r01\\strokes-views\\_print_views.json",
"sha256": "abd5938d35fc8863b91753b2915fb5b39d261f0920286ef3eca2cc4e6a6c89bf"
}
}
}
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 705 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.8 MiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 704 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.8 MiB