forked from 1b-agent/opencadstudio-upstream
chore: rename H7CAD to Open CAD Studio
Joining the OpenAEC Foundation (open-aec.com). Crate/struct become OpenCADStudio, user-facing strings use the spaced "Open CAD Studio" form, repo URLs point to HakanSeven12/open-cad-studio. Logo (window icon + assets/logo.svg) redrawn with OCS initials. Drop examples/ binaries — unused. Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
1 parent
e2bc8c29eb
commit
ef1f9a08d6
57 files changed
+159
-1301
No files matched your search
@@ -1,9 +1,9 @@
|
||||
use super::{Message, H7CAD};
|
||||
use super::{Message, OpenCADStudio};
|
||||
use crate::command::CmdResult;
|
||||
use acadrust::Handle;
|
||||
use iced::Task;
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub(super) fn apply_cmd_result(&mut self, result: CmdResult) -> Task<Message> {
|
||||
let i = self.active_tab;
|
||||
match result {
|
||||
|
||||
+5
-5
@@ -1,10 +1,10 @@
|
||||
use super::{Message, H7CAD};
|
||||
use super::{Message, OpenCADStudio};
|
||||
use crate::command::CadCommand;
|
||||
use crate::scene::Scene;
|
||||
use iced::Task;
|
||||
use std::path::PathBuf;
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub(super) fn dispatch_command(&mut self, cmd: &str) -> Task<Message> {
|
||||
let i = self.active_tab;
|
||||
// Cancel any running command before starting a new one.
|
||||
@@ -2524,7 +2524,7 @@ impl H7CAD {
|
||||
}
|
||||
|
||||
"REPORT" => {
|
||||
let _ = open::that("https://github.com/HakanSeven12/H7CAD/issues/new");
|
||||
let _ = open::that("https://github.com/HakanSeven12/open-cad-studio/issues/new");
|
||||
self.command_line.push_info("Opening GitHub issue page...");
|
||||
}
|
||||
|
||||
@@ -2533,7 +2533,7 @@ impl H7CAD {
|
||||
}
|
||||
|
||||
"CHANGELOG" => {
|
||||
let _ = open::that("https://github.com/HakanSeven12/H7CAD/releases");
|
||||
let _ = open::that("https://github.com/HakanSeven12/open-cad-studio/releases");
|
||||
self.command_line.push_info("Opening release notes...");
|
||||
}
|
||||
|
||||
@@ -4831,7 +4831,7 @@ impl H7CAD {
|
||||
}
|
||||
}
|
||||
"SET" => {
|
||||
let app = parts.get(1).copied().unwrap_or("H7CAD");
|
||||
let app = parts.get(1).copied().unwrap_or("OpenCADStudio");
|
||||
let val = parts.get(2).copied().unwrap_or("");
|
||||
self.push_undo_snapshot(i, "XDATA SET");
|
||||
for sh in &selected_handles {
|
||||
|
||||
+16
-9
@@ -229,7 +229,7 @@ pub(super) fn title_case_word(value: &str) -> String {
|
||||
|
||||
// ── Window icon ────────────────────────────────────────────────────────────
|
||||
|
||||
/// Builds a 32×32 RGBA icon: red background with H7 drawn in white pixels.
|
||||
/// Builds a 32×32 RGBA icon: red background with OCS drawn in white pixels.
|
||||
pub(super) fn build_window_icon() -> Vec<u8> {
|
||||
const W: usize = 32;
|
||||
const SZ: usize = W * W * 4;
|
||||
@@ -261,14 +261,21 @@ pub(super) fn build_window_icon() -> Vec<u8> {
|
||||
}
|
||||
}
|
||||
|
||||
// H
|
||||
stroke(&mut px, 4, 5, 4, 26, fg);
|
||||
stroke(&mut px, 13, 5, 13, 26, fg);
|
||||
stroke(&mut px, 4, 15, 13, 15, fg);
|
||||
// 7
|
||||
stroke(&mut px, 17, 5, 27, 5, fg);
|
||||
stroke(&mut px, 27, 5, 20, 26, fg);
|
||||
stroke(&mut px, 20, 16, 26, 16, fg);
|
||||
// O
|
||||
stroke(&mut px, 3, 6, 9, 6, fg);
|
||||
stroke(&mut px, 3, 25, 9, 25, fg);
|
||||
stroke(&mut px, 3, 6, 3, 25, fg);
|
||||
stroke(&mut px, 9, 6, 9, 25, fg);
|
||||
// C
|
||||
stroke(&mut px, 12, 6, 18, 6, fg);
|
||||
stroke(&mut px, 12, 25, 18, 25, fg);
|
||||
stroke(&mut px, 12, 6, 12, 25, fg);
|
||||
// S
|
||||
stroke(&mut px, 21, 6, 27, 6, fg);
|
||||
stroke(&mut px, 21, 6, 21, 15, fg);
|
||||
stroke(&mut px, 21, 15, 27, 15, fg);
|
||||
stroke(&mut px, 27, 15, 27, 25, fg);
|
||||
stroke(&mut px, 21, 25, 27, 25, fg);
|
||||
|
||||
px
|
||||
}
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
use super::{document::HistorySnapshot, H7CAD};
|
||||
use super::{document::HistorySnapshot, OpenCADStudio};
|
||||
use std::collections::HashSet;
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub(super) fn history_label_from_active_cmd(&self, i: usize, fallback: &'static str) -> String {
|
||||
self.tabs[i]
|
||||
.active_cmd
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
use super::H7CAD;
|
||||
use super::OpenCADStudio;
|
||||
use crate::ui;
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub(super) fn sync_ribbon_layers(&mut self) {
|
||||
let i = self.active_tab;
|
||||
let active = self.tabs[i].active_layer.clone();
|
||||
|
||||
+9
-9
@@ -44,7 +44,7 @@ pub struct OpenProgress {
|
||||
|
||||
// ── Application state ──────────────────────────────────────────────────────
|
||||
|
||||
pub(super) struct H7CAD {
|
||||
pub(super) struct OpenCADStudio {
|
||||
start: Instant,
|
||||
tabs: Vec<DocumentTab>,
|
||||
active_tab: usize,
|
||||
@@ -697,7 +697,7 @@ pub enum Message {
|
||||
ObjImportPath(Option<std::path::PathBuf>),
|
||||
}
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
fn new() -> Self {
|
||||
// Boot with only the Welcome/Start tab. The user creates drawings
|
||||
// explicitly (File → New); we never auto-spawn Drawing1.
|
||||
@@ -855,9 +855,9 @@ impl H7CAD {
|
||||
use std::path::PathBuf;
|
||||
|
||||
pub fn run() -> iced::Result {
|
||||
iced::daemon(H7CAD::boot, H7CAD::update, H7CAD::view)
|
||||
.subscription(H7CAD::subscription)
|
||||
.title(|state: &H7CAD, window_id: window::Id| {
|
||||
iced::daemon(OpenCADStudio::boot, OpenCADStudio::update, OpenCADStudio::view)
|
||||
.subscription(OpenCADStudio::subscription)
|
||||
.title(|state: &OpenCADStudio, window_id: window::Id| {
|
||||
if Some(window_id) == state.layer_window {
|
||||
return "Layer Properties Manager".into();
|
||||
}
|
||||
@@ -886,7 +886,7 @@ pub fn run() -> iced::Result {
|
||||
return "Keyboard Shortcuts".into();
|
||||
}
|
||||
if Some(window_id) == state.about_window {
|
||||
return "About H7CAD".into();
|
||||
return "About Open CAD Studio".into();
|
||||
}
|
||||
if Some(window_id) == state.update_notice_window {
|
||||
return "Update Available".into();
|
||||
@@ -900,11 +900,11 @@ pub fn run() -> iced::Result {
|
||||
if let Some(tab) = state.tabs.get(state.active_tab) {
|
||||
let dot = if tab.dirty { "● " } else { "" };
|
||||
let name = tab.tab_display_name();
|
||||
format!("{}H7CAD — {}", dot, name)
|
||||
format!("{}Open CAD Studio — {}", dot, name)
|
||||
} else {
|
||||
"H7CAD".to_string()
|
||||
"Open CAD Studio".to_string()
|
||||
}
|
||||
})
|
||||
.theme(|state: &H7CAD, _| state.active_theme.clone())
|
||||
.theme(|state: &OpenCADStudio, _| state.active_theme.clone())
|
||||
.run()
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
use super::helpers::{entity_type_key, entity_type_label, title_case_word};
|
||||
use super::{H7CAD, VARIES_LABEL};
|
||||
use super::{OpenCADStudio, VARIES_LABEL};
|
||||
use crate::linetypes;
|
||||
use crate::scene::dispatch;
|
||||
use crate::ui;
|
||||
use acadrust::{EntityType, Handle};
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
/// Rebuild the PropertiesPanel from the current entity selection.
|
||||
/// Preserves UI state (open pickers, edit buffer) across refreshes.
|
||||
pub(super) fn refresh_properties(&mut self) {
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
use super::helpers::{
|
||||
angle_close, ortho_constrain, parse_coord, polar_constrain, ucs_to_wcs, ucs_z_axis,
|
||||
};
|
||||
use super::{Message, H7CAD, POLY_START_DELAY_MS};
|
||||
use super::{Message, OpenCADStudio, POLY_START_DELAY_MS};
|
||||
use crate::modules::ModuleEvent;
|
||||
use crate::scene::grip::{find_hit_grip, find_hit_grip_paper, GripEdit};
|
||||
use crate::scene::object::GripApply;
|
||||
@@ -31,7 +31,7 @@ fn format_size(bytes: u64) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub fn update(&mut self, msg: Message) -> Task<Message> {
|
||||
match msg {
|
||||
Message::Tick(t) => {
|
||||
@@ -3414,7 +3414,7 @@ impl H7CAD {
|
||||
|
||||
Message::AboutCopyInfo => {
|
||||
let info = format!(
|
||||
"H7CAD v{}\nOS: {}\nArch: {}",
|
||||
"Open CAD Studio v{}\nOS: {}\nArch: {}",
|
||||
env!("CARGO_PKG_VERSION"),
|
||||
std::env::consts::OS,
|
||||
std::env::consts::ARCH,
|
||||
@@ -4826,7 +4826,7 @@ impl H7CAD {
|
||||
|
||||
// ── DimStyle dialog helpers ─────────────────────────────────────────────────
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
/// Populate all edit buffers from the currently selected dim style.
|
||||
fn load_dimstyle_bufs(&mut self, tab: usize) {
|
||||
let doc = &self.tabs[tab].scene.document;
|
||||
|
||||
+8
-8
@@ -1,7 +1,7 @@
|
||||
use super::document::DocumentTab;
|
||||
use super::helpers::grid_plane_from_camera;
|
||||
use super::history::history_dropdown_labels;
|
||||
use super::{Message, H7CAD};
|
||||
use super::{Message, OpenCADStudio};
|
||||
use crate::scene::grip::{grips_to_screen, grips_to_screen_paper};
|
||||
use crate::scene::paper_canvas::PaperCanvas;
|
||||
use crate::scene::viewport_pane::{PaperViewportPane, ViewportPane};
|
||||
@@ -16,7 +16,7 @@ use iced::{keyboard, Background, Border, Color, Element, Fill, Subscription, Tas
|
||||
|
||||
const VIEWCUBE_HIT_SIZE: f32 = VIEWCUBE_DRAW_PX;
|
||||
|
||||
impl H7CAD {
|
||||
impl OpenCADStudio {
|
||||
pub fn view(&self, window_id: window::Id) -> Element<'_, Message> {
|
||||
// ── Floating panel windows ─────────────────────────────────────────
|
||||
if Some(window_id) == self.layer_window {
|
||||
@@ -1594,7 +1594,7 @@ fn unsaved_changes_dialog_window(name: &str) -> Element<'static, Message> {
|
||||
// is the public welcome screen and stays consistent across locales.
|
||||
//
|
||||
// The page picks up the application icon's red-brown (#B03020) as a tint so
|
||||
// it visually belongs to H7CAD without overpowering the dark workspace.
|
||||
// it visually belongs to OpenCADStudio without overpowering the dark workspace.
|
||||
|
||||
const BRAND: Color = Color { r: 0.690, g: 0.188, b: 0.125, a: 1.0 }; // #B03020
|
||||
const BRAND_DARK: Color = Color { r: 0.45, g: 0.12, b: 0.08, a: 1.0 };
|
||||
@@ -1605,16 +1605,16 @@ pub(super) fn start_page_view<'a>() -> Element<'a, Message> {
|
||||
const CARD_BG: Color = Color { r: 0.12, g: 0.12, b: 0.13, a: 1.0 };
|
||||
const CARD_BORDER: Color = Color { r: 0.20, g: 0.20, b: 0.22, a: 1.0 };
|
||||
|
||||
// Brand-tinted "Welcome to" — the "H7CAD" word takes the accent colour
|
||||
// Brand-tinted "Welcome to" — the "OpenCADStudio" word takes the accent colour
|
||||
// (Thunderbird-style coloured headline split).
|
||||
let headline = row![
|
||||
text("Welcome to ").size(40).color(TEXT),
|
||||
text("H7CAD").size(40).color(BRAND),
|
||||
text("Open CAD Studio").size(40).color(BRAND),
|
||||
]
|
||||
.align_y(iced::Center);
|
||||
|
||||
let subtitle = text(
|
||||
"H7CAD is an open-source CAD viewer and editor — a gift from contributors like you. \
|
||||
"Open CAD Studio is an open-source CAD viewer and editor — a gift from contributors like you. \
|
||||
Open a DWG/DXF file, start a new drawing, or help shape what comes next.",
|
||||
)
|
||||
.size(13)
|
||||
@@ -1728,9 +1728,9 @@ pub(super) fn start_page_view<'a>() -> Element<'a, Message> {
|
||||
let cards = row![
|
||||
card_section(
|
||||
"Free and open source",
|
||||
"H7CAD belongs to its users.",
|
||||
"Open CAD Studio belongs to its users.",
|
||||
"Source is openly developed and distributed under a permissive licence. \
|
||||
You are free to use, study, modify, and share H7CAD.",
|
||||
You are free to use, study, modify, and share Open CAD Studio.",
|
||||
),
|
||||
card_section(
|
||||
"Community driven",
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ pub fn parse_obj(src: &str, color: [f32; 4]) -> Option<MeshModel> {
|
||||
"v" => {
|
||||
let vals: Vec<f32> = parts.filter_map(|s| s.parse().ok()).collect();
|
||||
if vals.len() >= 3 {
|
||||
// OBJ: Y-up right-handed. H7CAD viewport is also Y-up → keep as-is.
|
||||
// OBJ: Y-up right-handed. OpenCADStudio viewport is also Y-up → keep as-is.
|
||||
positions.push([vals[0], vals[1], vals[2]]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ fn build_pdf(
|
||||
rotation_deg: i32,
|
||||
plot_style: Option<&PlotStyleTable>,
|
||||
) -> Vec<u8> {
|
||||
let mut doc = PdfDocument::new("H7CAD Export");
|
||||
let mut doc = PdfDocument::new("Open CAD Studio Export");
|
||||
let mut ops: Vec<Op> = Vec::new();
|
||||
|
||||
// White page background.
|
||||
|
||||
@@ -28,7 +28,7 @@ pub async fn print_wires(
|
||||
plot_style: Option<PlotStyleTable>,
|
||||
) -> Result<String, String> {
|
||||
// ── 1. Write to a named temp file ─────────────────────────────────────
|
||||
let tmp_path = std::env::temp_dir().join("h7cad_print.pdf");
|
||||
let tmp_path = std::env::temp_dir().join("open_cad_studio_print.pdf");
|
||||
pdf_export::export_pdf(
|
||||
&wires,
|
||||
&hatches,
|
||||
|
||||
+3
-3
@@ -199,7 +199,7 @@ pub fn build_step(meshes: &[&MeshModel]) -> Option<String> {
|
||||
let msb_id = alloc();
|
||||
writeln!(
|
||||
data,
|
||||
"#{} = MANIFOLD_SOLID_BREP('H7CAD_Solid',#{});",
|
||||
"#{} = MANIFOLD_SOLID_BREP('OpenCADStudio_Solid',#{});",
|
||||
msb_id, shell_id
|
||||
)
|
||||
.ok();
|
||||
@@ -217,7 +217,7 @@ pub fn build_step(meshes: &[&MeshModel]) -> Option<String> {
|
||||
writeln!(data, "#{} = GEOMETRIC_REPRESENTATION_CONTEXT(3);", gc_id).ok();
|
||||
writeln!(
|
||||
data,
|
||||
"#{sr_id} = SHAPE_REPRESENTATION('H7CAD_Shape',(#{}),#{gc_id});",
|
||||
"#{sr_id} = SHAPE_REPRESENTATION('OpenCADStudio_Shape',(#{}),#{gc_id});",
|
||||
msb_id
|
||||
)
|
||||
.ok();
|
||||
@@ -227,7 +227,7 @@ pub fn build_step(meshes: &[&MeshModel]) -> Option<String> {
|
||||
let file = format!(
|
||||
"ISO-10303-21;\n\
|
||||
HEADER;\n\
|
||||
FILE_DESCRIPTION(('H7CAD STEP export'),'2;1');\n\
|
||||
FILE_DESCRIPTION(('Open CAD Studio STEP export'),'2;1');\n\
|
||||
FILE_NAME('{ts}','','',(''),'',' ',' ');\n\
|
||||
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));\n\
|
||||
ENDSEC;\n\
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ pub fn build_stl(meshes: &[&MeshModel]) -> Option<Vec<u8>> {
|
||||
|
||||
// 80-byte header.
|
||||
let mut header = [0u8; 80];
|
||||
let title = b"H7CAD STL export";
|
||||
let title = b"Open CAD Studio STL export";
|
||||
header[..title.len()].copy_from_slice(title);
|
||||
buf.extend_from_slice(&header);
|
||||
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
//! H7CAD linetype catalog — loaded from `assets/linetypes/H7CAD.lin`.
|
||||
//! OpenCADStudio linetype catalog — loaded from `assets/linetypes/OpenCADStudio.lin`.
|
||||
//!
|
||||
//! Call [`populate_document`] to add all standard linetypes to a new document.
|
||||
//! Linetypes that already exist in the document are skipped.
|
||||
@@ -68,7 +68,7 @@ pub fn complex_lt(name: &str) -> Option<&'static ComplexLt> {
|
||||
.get(&name.to_ascii_uppercase())
|
||||
}
|
||||
|
||||
const LIN_SOURCE: &str = include_str!("../assets/linetypes/H7CAD.lin");
|
||||
const LIN_SOURCE: &str = include_str!("../assets/linetypes/OpenCADStudio.lin");
|
||||
|
||||
// ── Pattern art extraction ────────────────────────────────────────────────
|
||||
|
||||
@@ -93,7 +93,7 @@ pub fn extract_pattern(desc: &str) -> String {
|
||||
|
||||
// ── Public API ────────────────────────────────────────────────────────────
|
||||
|
||||
/// Add all standard H7CAD linetypes to `doc`, skipping existing ones.
|
||||
/// Add all standard OpenCADStudio linetypes to `doc`, skipping existing ones.
|
||||
pub fn populate_document(doc: &mut CadDocument) {
|
||||
for mut lt in parse(LIN_SOURCE) {
|
||||
if !doc.line_types.contains(<.name) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Arc tool — ribbon dropdown + all H7CAD arc creation methods.
|
||||
// Arc tool — ribbon dropdown + all OpenCADStudio arc creation methods.
|
||||
//
|
||||
// Methods:
|
||||
// ARC — Center, Start, End (CSE — default)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Circle tool — ribbon dropdown + all H7CAD circle creation methods.
|
||||
// Circle tool — ribbon dropdown + all OpenCADStudio circle creation methods.
|
||||
//
|
||||
// Methods:
|
||||
// CIRCLE — Center, Radius (default)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Ellipse tool — ribbon dropdown + all H7CAD ellipse creation methods.
|
||||
// Ellipse tool — ribbon dropdown + all OpenCADStudio ellipse creation methods.
|
||||
//
|
||||
// Commands:
|
||||
// ELLIPSE — Center, Axes (center → major endpoint → minor distance)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Hatch/Gradient/Boundary commands — H7CAD Home > Draw > Hatch dropdown.
|
||||
// Hatch/Gradient/Boundary commands — OpenCADStudio Home > Draw > Hatch dropdown.
|
||||
//
|
||||
// Commands:
|
||||
// HATCH — ANSI31: 45° hatch lines (pick inside or type S for manual)
|
||||
// GRADIENT — Linear gradient fill (pick inside or type S for manual)
|
||||
// BOUNDARY — Traces the enclosing boundary as a closed LwPolyline
|
||||
//
|
||||
// Primary workflow (matches H7CAD):
|
||||
// Primary workflow (matches OpenCADStudio):
|
||||
// Click a point INSIDE a closed region → boundary auto-detected.
|
||||
// Type "S" to switch to manual vertex-picking mode (HATCH/GRADIENT only).
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Line tool — ribbon definition + interactive command.
|
||||
//
|
||||
// Command: LINE — H7CAD behaviour:
|
||||
// Command: LINE — OpenCADStudio behaviour:
|
||||
// 1. First click → stores start point, prompts for next point
|
||||
// 2. Each further click → immediately commits an acadrust::Line entity
|
||||
// (start→end) to the document; end becomes the new start point
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// the mesh because the ACIS data is empty. Full ACIS generation requires
|
||||
// a separate step (out of scope here).
|
||||
//
|
||||
// Coordinate convention in H7CAD: the viewport is Y-up (OpenGL style),
|
||||
// Coordinate convention in OpenCADStudio: the viewport is Y-up (OpenGL style),
|
||||
// so screen X→DXF X, screen Z→DXF Y, screen Y→DXF Z (height).
|
||||
// truck works in standard math coordinates; we map accordingly.
|
||||
|
||||
@@ -134,7 +134,7 @@ impl CadCommand for BoxCommand {
|
||||
}
|
||||
|
||||
fn commit_box(p1: Vec3, p2: Vec3, height: f32, color: [f32; 4]) -> CmdResult {
|
||||
// Map H7CAD coords to truck: x→x, z→y, y→z
|
||||
// Map OpenCADStudio coords to truck: x→x, z→y, y→z
|
||||
let x0 = p1.x.min(p2.x) as f64;
|
||||
let y0 = p1.z.min(p2.z) as f64;
|
||||
let x1 = p1.x.max(p2.x) as f64;
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
//! H7CAD hatch pattern catalog — loaded from `assets/patterns/H7CAD.pat`.
|
||||
//! OpenCADStudio hatch pattern catalog — loaded from `assets/patterns/OpenCADStudio.pat`.
|
||||
//!
|
||||
//! PAT line format: `angle, x0, y0, dx, dy [, dash1, dash2, ...]`
|
||||
//! - `angle` line direction in degrees
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
use std::sync::OnceLock;
|
||||
|
||||
const PAT_SRC: &str = include_str!("../assets/patterns/H7CAD.pat");
|
||||
const PAT_SRC: &str = include_str!("../assets/patterns/OpenCADStudio.pat");
|
||||
|
||||
// ── Public types ──────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
// Zoom: adjusts `distance` (exponential feel).
|
||||
// Snap: directly assigns yaw+pitch encoded as a quaternion (for ViewCube).
|
||||
//
|
||||
// Coordinate convention: Z-up world space (same as the rest of H7CAD).
|
||||
// Coordinate convention: Z-up world space (same as the rest of OpenCADStudio).
|
||||
|
||||
use glam::{vec3, Mat4, Quat, Vec3};
|
||||
use iced::{Point, Rectangle};
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
//! H7CAD-style grip editing.
|
||||
//! OpenCADStudio-style grip editing.
|
||||
|
||||
use acadrust::Handle;
|
||||
use glam::{Mat4, Vec3};
|
||||
@@ -13,7 +13,7 @@ pub const GRIP_HALF_PX: f32 = 5.0;
|
||||
|
||||
// ── Active drag state ─────────────────────────────────────────────────────
|
||||
|
||||
/// Stored on `H7CAD` while a grip is being dragged.
|
||||
/// Stored on `OpenCADStudio` while a grip is being dragged.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct GripEdit {
|
||||
/// Handle of the entity being edited.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// H7CAD hatch pattern catalog — built from `assets/patterns/H7CAD.pat`.
|
||||
// OpenCADStudio hatch pattern catalog — built from `assets/patterns/OpenCADStudio.pat`.
|
||||
//
|
||||
// Each `PatternEntry` wraps a parsed PAT pattern with:
|
||||
// - `gpu` — `HatchPattern::Pattern(families)` for the shader
|
||||
|
||||
+4
-4
@@ -3914,7 +3914,7 @@ impl Scene {
|
||||
.document
|
||||
.views
|
||||
.iter()
|
||||
.find(|v| v.name == "H7CAD_Camera_Model")
|
||||
.find(|v| v.name == "OpenCADStudio_Camera_Model")
|
||||
.cloned();
|
||||
if let Some(view) = saved_view {
|
||||
return self.apply_camera_from_view_entry(&view, true);
|
||||
@@ -3978,7 +3978,7 @@ impl Scene {
|
||||
/// Returns true if a valid sheet viewport was found and the camera was set.
|
||||
fn apply_sheet_viewport_camera(&mut self) -> bool {
|
||||
// Prefer our named View entry — survives DWG save without being overridden.
|
||||
let view_name = format!("H7CAD_Camera_{}", self.current_layout);
|
||||
let view_name = format!("OpenCADStudio_Camera_{}", self.current_layout);
|
||||
let saved_view = self
|
||||
.document
|
||||
.views
|
||||
@@ -4094,7 +4094,7 @@ impl Scene {
|
||||
}
|
||||
|
||||
// Also write to View table — survives DWG save without override.
|
||||
self.write_camera_view_entry("H7CAD_Camera_Model", target_wcs, vd3, view_height);
|
||||
self.write_camera_view_entry("OpenCADStudio_Camera_Model", target_wcs, vd3, view_height);
|
||||
true
|
||||
} else {
|
||||
let target_wcs = acadrust::types::Vector3 {
|
||||
@@ -4102,7 +4102,7 @@ impl Scene {
|
||||
y: cam.target.y as f64,
|
||||
z: cam.target.z as f64,
|
||||
};
|
||||
let view_name = format!("H7CAD_Camera_{}", self.current_layout);
|
||||
let view_name = format!("OpenCADStudio_Camera_{}", self.current_layout);
|
||||
|
||||
// Write back to the sheet viewport entity.
|
||||
let layout_block = self.current_layout_block_handle();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// ViewCube wgpu pipeline — H7CAD-style interactive 3D navigation cube.
|
||||
// ViewCube wgpu pipeline — OpenCADStudio-style interactive 3D navigation cube.
|
||||
//
|
||||
// 26 selectable regions: 6 faces + 12 edges + 8 corners.
|
||||
// Phong shading + hover highlight passed as uniform.
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
//! H7CAD-style object snap (OSNAP) engine.
|
||||
//! OpenCADStudio-style object snap (OSNAP) engine.
|
||||
//!
|
||||
//! Implemented modes:
|
||||
//! Endpoint, Midpoint, Center, Node, Quadrant, Intersection,
|
||||
@@ -13,7 +13,7 @@ use crate::ui::overlay::CROSSHAIR_ARM;
|
||||
|
||||
// ── Snap type ─────────────────────────────────────────────────────────────
|
||||
|
||||
/// Every OSNAP mode — mirrors the H7CAD list.
|
||||
/// Every OSNAP mode — mirrors the OpenCADStudio list.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum SnapType {
|
||||
Endpoint,
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ pub fn view_window<'a>() -> Element<'a, Message> {
|
||||
|
||||
let logo = container(
|
||||
column![
|
||||
text("H7CAD").size(32).color(ACCENT),
|
||||
text("Open CAD Studio").size(32).color(ACCENT),
|
||||
text("CAD application for Architecture & Engineering")
|
||||
.size(11)
|
||||
.color(DIM),
|
||||
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
//! Application menu — H7CAD-style dropdown that opens when the H7 logo
|
||||
//! Application menu — OpenCADStudio-style dropdown that opens when the OCS logo
|
||||
//! button is clicked. Overlays the entire viewport as a floating panel.
|
||||
//!
|
||||
//! Layout:
|
||||
@@ -235,7 +235,7 @@ impl AppMenu {
|
||||
let bottom = container(
|
||||
row![
|
||||
iced::widget::Space::new().width(Length::Fill),
|
||||
button(text("Exit H7CAD").size(11).color(Color::WHITE))
|
||||
button(text("Exit Open CAD Studio").size(11).color(Color::WHITE))
|
||||
.on_press(Message::Command("EXIT".into()))
|
||||
.style(|_: &Theme, status| button::Style {
|
||||
background: Some(Background::Color(match status {
|
||||
@@ -299,7 +299,7 @@ impl AppMenu {
|
||||
// Backdrop — clicking outside closes the menu.
|
||||
let backdrop = button(
|
||||
container(panel)
|
||||
// Offset so the panel sits just below the ribbon H7 button.
|
||||
// Offset so the panel sits just below the ribbon OCS button.
|
||||
.padding(iced::Padding {
|
||||
top: 56.0,
|
||||
left: 0.0,
|
||||
@@ -521,7 +521,7 @@ fn recents_file_path() -> Option<PathBuf> {
|
||||
p
|
||||
};
|
||||
let mut p = base;
|
||||
p.push("H7CAD");
|
||||
p.push("OpenCADStudio");
|
||||
Some(p.join("recent.txt"))
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! H7CAD-style command line — bottom panel with input and history
|
||||
//! OpenCADStudio-style command line — bottom panel with input and history
|
||||
|
||||
use crate::app::Message;
|
||||
use iced::widget::{column, container, row, text, text_input};
|
||||
@@ -41,7 +41,7 @@ pub enum EntryKind {
|
||||
impl CommandLine {
|
||||
pub fn new() -> Self {
|
||||
let mut cl = Self::default();
|
||||
cl.push_info("H7CAD ready.");
|
||||
cl.push_info("Open CAD Studio ready.");
|
||||
cl.push_info("Type a command or use the ribbon. Open OBJ: INSERT tab.");
|
||||
cl
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! Properties panel — H7CAD-style editable object properties.
|
||||
//! Properties panel — OpenCADStudio-style editable object properties.
|
||||
//!
|
||||
//! Shows two sections (General + Geometry) for the selected entity.
|
||||
//! • Layer → combo_box (options from document layer table)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! H7CAD-style OSNAP dropdown popup panel.
|
||||
//! OpenCADStudio-style OSNAP dropdown popup panel.
|
||||
//!
|
||||
//! Rendered as a floating overlay above the status bar. The popup is only
|
||||
//! inserted into the view stack when `snap_popup_open` is true.
|
||||
|
||||
@@ -140,7 +140,7 @@ pub fn view_window<'a>(latest: &'a str, body: &'a str) -> Element<'a, Message> {
|
||||
let header = container(
|
||||
column![
|
||||
text("New Release Available").size(20).color(ACCENT),
|
||||
text("A newer H7CAD version is published on GitHub.")
|
||||
text("A newer Open CAD Studio version is published on GitHub.")
|
||||
.size(11)
|
||||
.color(DIM),
|
||||
]
|
||||
|
||||
+3
-3
@@ -7,9 +7,9 @@
|
||||
// `None` when up to date / on network failure / on parse error.
|
||||
|
||||
const RELEASES_API: &str =
|
||||
"https://api.github.com/repos/HakanSeven12/H7CAD/releases/latest";
|
||||
"https://api.github.com/repos/HakanSeven12/open-cad-studio/releases/latest";
|
||||
pub const RELEASES_PAGE: &str =
|
||||
"https://github.com/HakanSeven12/H7CAD/releases/latest";
|
||||
"https://github.com/HakanSeven12/open-cad-studio/releases/latest";
|
||||
|
||||
/// What `check_for_update` reports when a newer release exists.
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -33,7 +33,7 @@ fn fetch_latest_if_outdated() -> Option<UpdateInfo> {
|
||||
.timeout(std::time::Duration::from_secs(5))
|
||||
.build()
|
||||
.get(RELEASES_API)
|
||||
.set("User-Agent", concat!("h7cad/", env!("CARGO_PKG_VERSION")))
|
||||
.set("User-Agent", concat!("OpenCADStudio/", env!("CARGO_PKG_VERSION")))
|
||||
.set("Accept", "application/vnd.github+json")
|
||||
.call()
|
||||
.ok()?
|
||||
|
||||
Reference in new issue
Block a user