Point clouds: attach dialog, crop toolbar, stylize, palette rows

POINTCLOUDATTACH opens the Attach Point Cloud dialog after the file is
chosen; its Attach button lives in the Attach Underlay list instead of a
separate Insert panel. A selected cloud brings the crop tools to the
right-edge toolbar. POINTCLOUDSTYLIZE sets the stylization with the
reference's prompts, the External References palette lists point clouds
(unload, reload, detach, path), and definitions keep the header extents.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
ramox81andClaude Opus 5.5 committed 2026-09-30 10:14:44 +03:00
1 parent 3afd547e28
commit c2d9ac5ae2
48 files changed
+1711 -83

No files matched your search

+18 -14
View File
@@ -1273,20 +1273,7 @@ fn apply_point_cloud_ex_prop(data: &mut PointCloudExData, field: &str, value: &s
.iter()
.find(|(name, _)| value == t!(*name).as_ref() || value.eq_ignore_ascii_case(name))
{
data.stylization_type = *stylization;
// Intensity and elevation start from their default schemes,
// Spectrum and Earth.
let default = match stylization {
5 => Some(POINT_CLOUD_RAMPS[6].1),
4 => Some(POINT_CLOUD_RAMPS[1].1),
_ => None,
};
if let Some(default) = default {
let slot = point_cloud_scheme_slot(data);
if slot.is_empty() {
*slot = default.to_string();
}
}
set_point_cloud_stylization(data, *stylization);
}
}
"ext_pcx_color_scheme" => {
@@ -1326,6 +1313,23 @@ fn apply_point_cloud_ex_prop(data: &mut PointCloudExData, field: &str, value: &s
}
}
/// Sets a cloud's stylization (its stored value); intensity and elevation
/// start from their default schemes, Spectrum and Earth.
pub(crate) fn set_point_cloud_stylization(data: &mut PointCloudExData, stylization: i16) {
data.stylization_type = stylization;
let default = match stylization {
5 => Some(POINT_CLOUD_RAMPS[6].1),
4 => Some(POINT_CLOUD_RAMPS[1].1),
_ => None,
};
if let Some(default) = default {
let slot = point_cloud_scheme_slot(data);
if slot.is_empty() {
*slot = default.to_string();
}
}
}
/// Rejects what the reference rejects before a point cloud row is written.
pub(crate) fn validate_point_cloud_property(field: &str, value: &str) -> Result<(), &'static str> {
if field == "ext_pcx_scale" && !parse_f64(value).is_some_and(|scale| scale > 0.0) {