Compare commits
3
Commits
ff4e7a71e0
...
0.9.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
206db85e12 | ||
|
|
d81fede4cc | ||
|
|
948937ba75 |
No files matched your search
@@ -37,3 +37,6 @@ publish/
|
||||
|
||||
# Output di scripts/ExtractCreoStrings.cs
|
||||
/BOM.txt
|
||||
|
||||
# Impostazioni locali dell'editor
|
||||
.vscode/
|
||||
@@ -5,6 +5,35 @@ Tutte le modifiche rilevanti di questo progetto sono documentate in questo file.
|
||||
Il formato segue [Keep a Changelog](https://keepachangelog.com/it/1.1.0/), e il progetto
|
||||
aderisce a [Semantic Versioning](https://semver.org/lang/it/).
|
||||
|
||||
## [0.9.0] - 2026-09-23
|
||||
|
||||
### Aggiunto
|
||||
|
||||
- Guida utente `docs/guida-utente.md`: tutti i passi, dalla distinta esportata dal gestionale
|
||||
fino all'esportazione STEP con Creo Distributed Batch.
|
||||
- Fase 2: bottone "Verifica presenza", visibile solo dopo un import riuscito; è lui (non il
|
||||
solo import) a sbloccare "Avanti". Etichette numerate accanto ai bottoni.
|
||||
- Dialogo "Componenti referenziati trovati": bottone "Chiudi" (anche con Esc) e icona dell'app.
|
||||
|
||||
### Modificato
|
||||
|
||||
- "Scegli cartella di lavoro..." e "Pulisci raw e step..." spostati dalla fase 1 al menu File,
|
||||
raggiungibili in qualunque momento; "File → Nuova estrazione" rinominato in "Nuovo".
|
||||
- Fase 1 ridisegnata in una card di stato "Database" con indicatore verde/rosso; rimossa la card
|
||||
"Cartella di lavoro".
|
||||
- Barra Avanti/Indietro trasformata in floatbar staccata dai bordi, con bottoni di dimensioni e
|
||||
stile uniformi (riusata anche nel dialogo dei componenti referenziati).
|
||||
- Finestra Guida ridisegnata: sezioni con titolo, passi numerati e callout "Nota"/"Attenzione"
|
||||
colorati; sidebar con selezione nel blu dell'app.
|
||||
- Testi delle fasi 3-4 semplificati.
|
||||
|
||||
### Corretto
|
||||
|
||||
- "Avanti" restava disabilitato in fase 1 all'avvio anche con DB e cartella di lavoro già
|
||||
caricati.
|
||||
- Guida in-app e README citavano ancora "Verifica completezza assiemi" e "Cambia cartella...",
|
||||
rimossi da tempo.
|
||||
|
||||
## [0.1.0] - 2026-09-22
|
||||
|
||||
### Aggiunto
|
||||
|
||||
@@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
`PrepStep` è il nome tecnico del progetto (cartella, namespace, csproj, eseguibile
|
||||
`PrepStep.exe`); il nome mostrato all'utente finale è **Cevolani StepPrep** (`<Product>`/
|
||||
`<AssemblyTitle>` in `PrepStep/PrepStep.csproj`, usato nel titolo della finestra insieme
|
||||
alla versione, `<Version>`, attualmente `0.1.0`). È un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di
|
||||
alla versione, `<Version>`, attualmente `0.9.0`). È un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di
|
||||
cercare i file CAD Pro-ENGINEER/Creo contenuti in tutte le cartelle di primo livello
|
||||
di un disco/share di rete (radice di default `X:\`), salvando i metadati in un DB
|
||||
SQLite locale (`cad_index.db`). Il flusso a valle (fasi 2-5, vedi sotto) prepara i file
|
||||
@@ -51,6 +51,7 @@ Dove scrivere cosa:
|
||||
|---|---|
|
||||
| `CLAUDE.md` (questo file) | il flusso essenziale e i punti che si sbaglierebbero senza saperli |
|
||||
| [`docs/architettura.md`](docs/architettura.md) | il processo delle 5 fasi e la mappa file-per-file |
|
||||
| [`docs/guida-utente.md`](docs/guida-utente.md) | cosa clicca l'utente, passo per passo, fino a Creo Distributed Batch |
|
||||
| [`docs/formato-asm-record.md`](docs/formato-asm-record.md) | parser esatto dei record `.asm`, con §7 per i casi limite |
|
||||
| [`docs/formato-asm.md`](docs/formato-asm.md) | euristica testuale di fallback |
|
||||
| [`docs/db-cad-index.md`](docs/db-cad-index.md) | schema e vista di `cad_index.db` |
|
||||
|
||||
+238
-52
@@ -1,69 +1,195 @@
|
||||
namespace PrepStep;
|
||||
|
||||
/// <summary>Guida interattiva richiamabile da "Aiuto ▸ Guida" (F1): sintesi delle 5 fasi del
|
||||
/// wizard, per chi apre l'app senza aver letto i docs. Il dettaglio completo (formato .asm,
|
||||
/// schema DB, ecc.) resta solo in docs/architettura.md e affini, per non duplicarlo qui.</summary>
|
||||
/// <summary>Guida interattiva richiamabile da "Aiuto ▸ Guida" (F1): stessa guida completa di
|
||||
/// docs/guida-utente.md (passo-passo fino a Creo Distributed Batch), pensata per chi apre
|
||||
/// l'app senza aver letto i docs e senza esperienza pregressa. Il dettaglio tecnico (formato
|
||||
/// .asm, schema DB, ecc.) resta solo in docs/architettura.md e affini, per non duplicarlo qui.
|
||||
///
|
||||
/// Gerarchia tipografica nel pannello di lettura (vedi ScriviSezione): titolo sezione in blu
|
||||
/// primario/grassetto/14pt, corpo in grigio quasi-nero/10pt, passi numerati con il numero in
|
||||
/// blu grassetto per farli scorrere a colpo d'occhio, callout con sfondo tinta piatta (nessun
|
||||
/// bordo/ombra: RichTextBox non li supporta) — blu tenue per le note informative, ambra tenue
|
||||
/// per gli avvisi importanti, con etichetta ("Nota"/"Attenzione") in grassetto a inizio blocco
|
||||
/// invece di un colore isolato, così restano leggibili anche senza vedere i colori.</summary>
|
||||
public class GuidaForm : Form
|
||||
{
|
||||
private static readonly (string Titolo, string Testo)[] Sezioni =
|
||||
{
|
||||
("Panoramica", """
|
||||
Cevolani StepPrep prepara i file CAD Pro-ENGINEER/Creo da passare a Creo
|
||||
Distributed Batch per l'esportazione STEP: indicizza i file di una share di
|
||||
rete e guida attraverso 5 fasi, una alla volta, con "Avanti"/"Indietro".
|
||||
private sealed record Sezione(
|
||||
string Titolo,
|
||||
string Intro,
|
||||
string[]? Passi = null,
|
||||
string? NotaTesto = null,
|
||||
bool NotaAttenzione = false);
|
||||
|
||||
"File ▸ Nuovo" (Ctrl+N) azzera distinta/raw/verifica per
|
||||
ripartire con una nuova distinta base, senza dover ricaricare il database.
|
||||
"""),
|
||||
("1. Database", """
|
||||
Carica o aggiorna l'indice "cad_index.db" a partire dalle cartelle di primo
|
||||
livello del disco/share (radice di default X:\). Un pallino verde/rosso indica
|
||||
se un database è caricato. La cartella di lavoro, dove finiscono CSV, "raw" e
|
||||
"step", si cambia da "File ▸ Scegli cartella di lavoro...".
|
||||
"""),
|
||||
("2. Importa Distinta Base", """
|
||||
Converte il file della distinta (trascinabile nella finestra, o scelto col
|
||||
bottone "1. Carica la distinta") in un CSV componente;descrizione nella cartella
|
||||
di lavoro. Se il file segue la convenzione del gestionale, aggiunge anche
|
||||
l'assieme generale come riga. Poi "2. Verifica la presenza dei file sul server"
|
||||
cerca i componenti nell'indice: è questo passo, non il solo import, a sbloccare
|
||||
"Avanti".
|
||||
"""),
|
||||
("3. Crea cartella raw", """
|
||||
Cerca nell'indice i file CAD dei componenti del CSV e li copia nella
|
||||
sottocartella "raw" della cartella di lavoro.
|
||||
"""),
|
||||
("4. Trova componenti referenziati", """
|
||||
Legge i file .asm già in "raw" per risolvere ricorsivamente sotto-assiemi e
|
||||
parti citate, copiando anche quelli in "raw": componenti soppressi (non in
|
||||
distinta ma necessari per aprire l'assieme) e riferimenti esterni (assembly
|
||||
feature, datum copiati) inclusi.
|
||||
"""),
|
||||
("5. Verifica completezza", """
|
||||
Mostra i file .asm della distinta già in "raw", trascinabili su Creo per
|
||||
l'esportazione STEP (passo manuale, fuori da quest'app). "Verifica
|
||||
completezza assiemi" controlla che tutti i sotto-componenti risultino
|
||||
presenti nell'indice.
|
||||
"""),
|
||||
// Palette: blu primario dell'app per titoli/passi, ambra tenue solo per gli avvisi che
|
||||
// possono far perdere tempo se ignorati (es. l'errore Creo [-4]) — il rosso resta riservato
|
||||
// ai messaggi di errore veri e propri altrove nell'app.
|
||||
private static readonly Color ColoreTesto = Color.FromArgb(40, 40, 40);
|
||||
private static readonly Color ColoreNotaInfoSfondo = Color.FromArgb(232, 240, 250);
|
||||
private static readonly Color ColoreNotaInfoTesto = Color.FromArgb(15, 65, 120);
|
||||
private static readonly Color ColoreNotaAttenzioneSfondo = Color.FromArgb(253, 240, 219);
|
||||
private static readonly Color ColoreNotaAttenzioneTesto = Color.FromArgb(140, 90, 10);
|
||||
|
||||
private static readonly Sezione[] Sezioni =
|
||||
{
|
||||
new("Panoramica",
|
||||
"Cevolani StepPrep prepara i file CAD Pro-ENGINEER/Creo da passare a Creo " +
|
||||
"Distributed Batch per l'esportazione STEP: indicizza i file di una share di rete " +
|
||||
"e guida attraverso 5 fasi, una alla volta, con \"Avanti\"/\"Indietro\".",
|
||||
NotaTesto: "\"File ▸ Nuovo\" (Ctrl+N) azzera distinta/raw/verifica per ripartire " +
|
||||
"con una nuova distinta base, senza dover ricaricare il database."),
|
||||
|
||||
new("Prima di iniziare",
|
||||
"Prima di importare la prima distinta:",
|
||||
Passi:
|
||||
[
|
||||
"Serve accesso alla share di rete con i file CAD (di default X:\\).",
|
||||
"Serve l'estrazione \"Distinta Base\" da Fata (il gestionale): il file .xls " +
|
||||
"così come Fata lo esporta, senza risalvarlo o convertirlo in altri " +
|
||||
"formati — l'app riconosce da sola se sotto l'estensione .xls c'è XML o " +
|
||||
"Excel binario vero.",
|
||||
"Se il file segue la convenzione di nome DBP_<codice>_<timestamp>, l'app " +
|
||||
"aggiunge da sola l'assieme generale come componente in più: non serve " +
|
||||
"fare nulla di diverso.",
|
||||
"Conviene impostare la cartella di lavoro giusta (fase 1, o \"File ▸ Scegli " +
|
||||
"cartella di lavoro...\") prima di importare la distinta: è lì che " +
|
||||
"finiscono CSV, \"raw\" e, dopo l'esportazione con Creo, \"step\".",
|
||||
"Se la cartella di lavoro è già stata usata per un'altra distinta, conviene " +
|
||||
"pulire \"raw\" e \"step\" prima di ripartire (\"File ▸ Pulisci raw e " +
|
||||
"step...\"): \"File ▸ Nuovo\" azzera solo lo stato dell'app, non i file " +
|
||||
"già copiati su disco.",
|
||||
]),
|
||||
|
||||
new("1. Database",
|
||||
"Carica o aggiorna l'indice \"cad_index.db\" a partire dalle cartelle di primo " +
|
||||
"livello del disco/share (radice di default X:\\). Un pallino verde/rosso indica " +
|
||||
"se un database è caricato. La cartella di lavoro, dove finiscono CSV, \"raw\" e " +
|
||||
"\"step\", si cambia da \"File ▸ Scegli cartella di lavoro...\"."),
|
||||
|
||||
new("2. Importa Distinta Base",
|
||||
"Due passi in sequenza:",
|
||||
Passi:
|
||||
[
|
||||
"Carica la distinta: trascina il file .xls nella finestra, oppure premi " +
|
||||
"\"Scegli file distinta...\". Le righe importate compaiono nella griglia " +
|
||||
"(Componente/Descrizione) e viene scritto un CSV nella cartella di lavoro.",
|
||||
"Verifica la presenza dei file sul server: compare solo dopo un import " +
|
||||
"riuscito. Cerca ogni componente nel database — le righe della griglia si " +
|
||||
"colorano di verde (trovato) o rosso (non trovato nell'indice).",
|
||||
],
|
||||
NotaTesto: "\"Avanti\" si sblocca solo dopo il passo 2, non basta il solo import: " +
|
||||
"è il modo per accorgersi subito se il database è disallineato rispetto alla " +
|
||||
"share prima di andare avanti.",
|
||||
NotaAttenzione: true),
|
||||
|
||||
new("3. Crea cartella raw",
|
||||
"Premi \"Crea cartella raw\": per ogni componente della distinta trovato " +
|
||||
"nell'indice, l'app ne copia il file CAD dalla share nella cartella \"raw\" " +
|
||||
"(dentro la cartella di lavoro). La griglia mostra il percorso CAD copiato per " +
|
||||
"ogni componente."),
|
||||
|
||||
new("4. Trova componenti referenziati",
|
||||
"Gli assiemi (.asm) referenziano altri file (sotto-assiemi, parti, componenti " +
|
||||
"soppressi, riferimenti esterni) che Creo deve poter caricare insieme " +
|
||||
"all'assieme principale, anche se non compaiono nella distinta del gestionale. " +
|
||||
"Premi \"Trova componenti referenziati\": l'app legge i file .asm già in \"raw\", " +
|
||||
"risolve ricorsivamente tutto l'albero e copia anche quei file in \"raw\".\n\n" +
|
||||
"Si apre una finestra con l'elenco di quanto trovato e copiato, con in fondo " +
|
||||
"eventuali codici non corrispondenti a nessun file indicizzato (possono essere " +
|
||||
"disegni, componenti davvero mancanti, o falsi positivi — vale la pena " +
|
||||
"controllarli). Da lì si può anche aprire direttamente la cartella \"raw\".",
|
||||
NotaTesto: "Passo opzionale se la distinta contiene solo parti singole senza " +
|
||||
"sotto-assiemi: in quel caso si può passare direttamente alla fase successiva."),
|
||||
|
||||
new("5. Verifica completezza",
|
||||
"Mostra i file .asm della distinta già in \"raw\", trascinabili. Da qui il " +
|
||||
"passaggio a Creo è manuale, fuori da quest'app:",
|
||||
Passi:
|
||||
[
|
||||
"Apri Creo Distributed Batch (dal menu Start di Windows, o dal file " +
|
||||
"ptcdbatch.bat nella cartella bin dell'installazione Creo).",
|
||||
"Crea (o riusa, se già presente in azienda) un gruppo di attività per " +
|
||||
"l'esportazione STEP: menu Actions ▸ New Task Group.",
|
||||
"Aggiungi i file: trascina i .asm dalla finestra dell'app (o dalla cartella " +
|
||||
"\"raw\" in Esplora risorse) sul gruppo di attività, oppure sfoglia e " +
|
||||
"selezionali a mano.",
|
||||
"Verifica che il gruppo di attività punti al config.pro/profilo di export " +
|
||||
"STEP giusto (sezione Configuration Files) — di norma è già impostato " +
|
||||
"una volta sola per tutti.",
|
||||
"Avvia l'elaborazione (Start/Run): Distributed Batch legge ogni .asm, con " +
|
||||
"tutto l'albero di sotto-componenti già raccolto nelle fasi 3-4, ed " +
|
||||
"esporta i file STEP nella cartella \"step\" (dentro la cartella di " +
|
||||
"lavoro, accanto a \"raw\").",
|
||||
],
|
||||
NotaTesto: "Se Distributed Batch fallisce con \"[-4] Dati di input non " +
|
||||
"completi\", quasi sempre manca un file nell'albero dei componenti — Creo " +
|
||||
"non dice quale. Torna alla fase 4 e controlla l'elenco dei \"non trovati\": " +
|
||||
"è il punto di partenza per capire cosa recuperare prima di riprovare.",
|
||||
NotaAttenzione: true),
|
||||
|
||||
new("Ripartire da capo",
|
||||
"Quando devi processare un'altra distinta, usa \"File ▸ Nuovo\" (Ctrl+N): azzera " +
|
||||
"CSV, raw e verifica delle fasi 2-5 e riporta al passo 2, senza dover ricaricare " +
|
||||
"il database o la cartella di lavoro (restano quelli già impostati in fase 1).",
|
||||
NotaTesto: "Per ripulire le cartelle \"raw\" e \"step\" della cartella di lavoro " +
|
||||
"prima di un nuovo giro (senza toccare l'indice), usa \"File ▸ Pulisci raw e " +
|
||||
"step...\"."),
|
||||
};
|
||||
|
||||
public GuidaForm()
|
||||
{
|
||||
Text = "Guida";
|
||||
ClientSize = new Size(640, 420);
|
||||
MinimumSize = new Size(480, 320);
|
||||
ClientSize = new Size(780, 520);
|
||||
MinimumSize = new Size(580, 400);
|
||||
StartPosition = FormStartPosition.CenterParent;
|
||||
Font = new Font("Segoe UI", 9.5f);
|
||||
try
|
||||
{
|
||||
Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
|
||||
}
|
||||
catch (Exception ex) when (ex is IOException or ArgumentException)
|
||||
{
|
||||
// ponytail: nessuna icona nell'exe (es. lanciato da dotnet run) -> resta quella di default
|
||||
}
|
||||
|
||||
var headerPanel = new Panel { Dock = DockStyle.Top, Height = 40, BackColor = SystemColors.ControlLight };
|
||||
var lblHeader = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = "Guida",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
Padding = new Padding(16, 0, 0, 0),
|
||||
Font = new Font(Font, FontStyle.Bold),
|
||||
};
|
||||
headerPanel.Controls.Add(lblHeader);
|
||||
|
||||
// Sidebar disegnata a mano (OwnerDrawFixed) invece della selezione blu di sistema:
|
||||
// stessa identità visiva del resto dell'app (UiStile.ColorePrimario) invece del colore
|
||||
// di selezione standard di Windows, che varia con il tema dell'utente.
|
||||
var lista = new ListBox
|
||||
{
|
||||
Dock = DockStyle.Left,
|
||||
Width = 200,
|
||||
Width = 230,
|
||||
IntegralHeight = false,
|
||||
BorderStyle = BorderStyle.None,
|
||||
DrawMode = DrawMode.OwnerDrawFixed,
|
||||
ItemHeight = 34,
|
||||
BackColor = UiStile.ColoreSfondoCard,
|
||||
};
|
||||
foreach (var sezione in Sezioni)
|
||||
lista.Items.Add(sezione.Titolo);
|
||||
lista.DrawItem += (_, e) =>
|
||||
{
|
||||
if (e.Index < 0)
|
||||
return;
|
||||
bool selezionato = (e.State & DrawItemState.Selected) != 0;
|
||||
using var sfondo = new SolidBrush(selezionato ? UiStile.ColorePrimario : UiStile.ColoreSfondoCard);
|
||||
e.Graphics.FillRectangle(sfondo, e.Bounds);
|
||||
var colore = selezionato ? Color.White : ColoreTesto;
|
||||
using var testoFont = new Font(lista.Font, selezionato ? FontStyle.Bold : FontStyle.Regular);
|
||||
var rettangoloTesto = new Rectangle(e.Bounds.X + 16, e.Bounds.Y, e.Bounds.Width - 20, e.Bounds.Height);
|
||||
TextRenderer.DrawText(e.Graphics, lista.Items[e.Index].ToString(), testoFont, rettangoloTesto,
|
||||
colore, TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis);
|
||||
};
|
||||
foreach (var (titolo, _) in Sezioni)
|
||||
lista.Items.Add(titolo);
|
||||
|
||||
var testo = new RichTextBox
|
||||
{
|
||||
@@ -77,19 +203,79 @@ public class GuidaForm : Form
|
||||
lista.SelectedIndexChanged += (_, _) =>
|
||||
{
|
||||
if (lista.SelectedIndex >= 0)
|
||||
testo.Text = Sezioni[lista.SelectedIndex].Testo.Trim();
|
||||
ScriviSezione(testo, Sezioni[lista.SelectedIndex]);
|
||||
};
|
||||
|
||||
var btnChiudi = new Button { Text = "Chiudi", Dock = DockStyle.Bottom, Height = 34 };
|
||||
UiStile.Secondario(btnChiudi);
|
||||
var (barraChiudi, azioniChiudi) = UiStile.FloatBar();
|
||||
var btnChiudi = new Button { Text = "Chiudi" };
|
||||
UiStile.Primario(btnChiudi);
|
||||
UiStile.Arrotonda(btnChiudi, 10);
|
||||
btnChiudi.Click += (_, _) => Close();
|
||||
azioniChiudi.Controls.Add(btnChiudi);
|
||||
CancelButton = btnChiudi;
|
||||
|
||||
var contenuto = new Panel { Dock = DockStyle.Fill, Padding = new Padding(16) };
|
||||
var contenuto = new Panel { Dock = DockStyle.Fill, Padding = new Padding(24, 20, 24, 20), BackColor = Color.White };
|
||||
contenuto.Controls.Add(testo);
|
||||
|
||||
Controls.Add(contenuto);
|
||||
Controls.Add(lista);
|
||||
Controls.Add(btnChiudi);
|
||||
Controls.Add(barraChiudi);
|
||||
Controls.Add(headerPanel);
|
||||
|
||||
lista.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
/// <summary>Costruisce il pannello di lettura con gerarchia tipografica esplicita: titolo
|
||||
/// (blu primario, grassetto, 14pt), corpo (grigio quasi-nero, 10pt), passi numerati (numero
|
||||
/// in blu grassetto, indentati) e callout finale con sfondo a tinta piatta ed etichetta in
|
||||
/// grassetto — informativo (blu tenue) o di attenzione (ambra tenue). Applica la
|
||||
/// formattazione DOPO aver scritto il testo, selezionando il range appena aggiunto: è il
|
||||
/// solo modo affidabile di formattare i paragrafi in un RichTextBox (impostare
|
||||
/// SelectionFont/Color su una selezione vuota prima di AppendText non è garantito che
|
||||
/// "si attacchi" al testo che segue).</summary>
|
||||
private static void ScriviSezione(RichTextBox box, Sezione sezione)
|
||||
{
|
||||
box.Clear();
|
||||
var titoloFont = new Font(box.Font.FontFamily, 14f, FontStyle.Bold);
|
||||
var corpoFont = new Font(box.Font.FontFamily, 10f, FontStyle.Regular);
|
||||
var corpoGrassetto = new Font(box.Font.FontFamily, 10f, FontStyle.Bold);
|
||||
|
||||
void Scrivi(string testo, Font font, Color colore, int indent = 0, Color? sfondo = null)
|
||||
{
|
||||
int inizio = box.TextLength;
|
||||
box.AppendText(testo);
|
||||
box.Select(inizio, box.TextLength - inizio);
|
||||
box.SelectionFont = font;
|
||||
box.SelectionColor = colore;
|
||||
box.SelectionBackColor = sfondo ?? box.BackColor;
|
||||
box.SelectionIndent = indent;
|
||||
}
|
||||
|
||||
Scrivi(sezione.Titolo + "\n\n", titoloFont, UiStile.ColorePrimario);
|
||||
Scrivi(sezione.Intro + "\n", corpoFont, ColoreTesto);
|
||||
|
||||
if (sezione.Passi is { Length: > 0 })
|
||||
{
|
||||
Scrivi("\n", corpoFont, ColoreTesto);
|
||||
for (int i = 0; i < sezione.Passi.Length; i++)
|
||||
{
|
||||
Scrivi($"{i + 1}. ", corpoGrassetto, UiStile.ColorePrimario, indent: 8);
|
||||
Scrivi(sezione.Passi[i] + "\n\n", corpoFont, ColoreTesto, indent: 8);
|
||||
}
|
||||
}
|
||||
|
||||
if (sezione.NotaTesto is not null)
|
||||
{
|
||||
var sfondo = sezione.NotaAttenzione ? ColoreNotaAttenzioneSfondo : ColoreNotaInfoSfondo;
|
||||
var coloreEtichetta = sezione.NotaAttenzione ? ColoreNotaAttenzioneTesto : ColoreNotaInfoTesto;
|
||||
string etichetta = sezione.NotaAttenzione ? "Attenzione" : "Nota";
|
||||
|
||||
Scrivi("\n", corpoFont, ColoreTesto);
|
||||
Scrivi(" " + etichetta + "\n", corpoGrassetto, coloreEtichetta, indent: 12, sfondo: sfondo);
|
||||
Scrivi(" " + sezione.NotaTesto + " \n", corpoFont, ColoreTesto, indent: 12, sfondo: sfondo);
|
||||
}
|
||||
|
||||
box.SelectionStart = 0;
|
||||
box.SelectionLength = 0;
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
<AssemblyTitle>Cevolani StepPrep</AssemblyTitle>
|
||||
<Product>Cevolani StepPrep</Product>
|
||||
<Company>Cevolani</Company>
|
||||
<Version>0.1.0</Version>
|
||||
<Version>0.9.0</Version>
|
||||
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -9,32 +9,38 @@ passaggio, non lo sostituisce.
|
||||
|
||||
## Funzionalità
|
||||
|
||||
1. **Indice CAD** — all'avvio carica automaticamente `cad_index.db` (se
|
||||
presente accanto all'eseguibile). Se manca, si può selezionare un DB
|
||||
1. **Indice CAD** — all'avvio carica automaticamente l'ultimo `cad_index.db`
|
||||
usato (ricordato tra un avvio e l'altro). Se manca, si può selezionare un DB
|
||||
esistente con **Apri DB...** o generarne uno nuovo con **Aggiorna
|
||||
indice**, che scansiona il disco (di default `X:\`, tutte le cartelle di primo
|
||||
livello che trova) e indicizza tutti i file. In questa fase si vede/cambia anche
|
||||
la **cartella di lavoro**: dove finiscono il CSV e la cartella `raw/` (gli STEP
|
||||
esportati con Creo vanno in `step/`, dentro la stessa cartella). Proposta
|
||||
automaticamente (ricordata da un avvio all'altro), modificabile con
|
||||
**Cambia cartella...**.
|
||||
livello che trova) e indicizza tutti i file. La **cartella di lavoro** (dove
|
||||
finiscono il CSV e la cartella `raw/`; gli STEP esportati con Creo vanno in
|
||||
`step/`, dentro la stessa cartella) è proposta automaticamente e ricordata tra
|
||||
un avvio e l'altro, modificabile in qualunque momento da **File → Scegli
|
||||
cartella di lavoro...**.
|
||||
2. **Importa Distinta Base** — trascina (o scegli da file) l'estrazione
|
||||
`.xls`/`.xml` del gestionale (foglio "Distinta Base", colonne
|
||||
Componente/Descrizione): viene generato un CSV nella cartella di lavoro, con
|
||||
anteprima in griglia. Se il file segue la convenzione di nome
|
||||
`DBP_<codice>_<timestamp>` del gestionale, l'assieme generale dell'estrazione
|
||||
viene aggiunto come riga in più nel CSV (il foglio elenca solo i componenti
|
||||
sotto l'assieme, non l'assieme stesso).
|
||||
sotto l'assieme, non l'assieme stesso). Il bottone **Verifica presenza**
|
||||
(compare solo dopo un import riuscito) cerca i componenti nel database — è
|
||||
questo passo, non il solo import, a sbloccare la fase successiva.
|
||||
3. **Crea cartella raw** — cerca nell'indice il percorso CAD di ogni
|
||||
componente importato (assieme generale incluso) e copia i file trovati
|
||||
in una cartella `raw/` dentro la cartella di lavoro.
|
||||
4. **Trova componenti referenziati** — legge i metadati dei file `.asm` in
|
||||
`raw/` per trovare ricorsivamente i sotto-assiemi/parti che li
|
||||
compongono, copiandoli a loro volta in `raw/`.
|
||||
5. **Verifica completezza assiemi** — confronta la distinta con l'indice per
|
||||
capire se manca qualche sotto-componente, e mostra i file `.asm` della
|
||||
distinta trascinabili su Creo/Esplora risorse per l'esportazione STEP con
|
||||
Creo Distributed Batch.
|
||||
compongono, copiandoli a loro volta in `raw/` (passo opzionale se la
|
||||
distinta contiene solo parti singole).
|
||||
5. **Trascina su Creo** — mostra i file `.asm` della distinta già in `raw/`,
|
||||
trascinabili su Creo Distributed Batch per l'esportazione STEP (passo
|
||||
manuale, fuori da quest'app): scrive in `step/`, dentro la cartella di
|
||||
lavoro.
|
||||
|
||||
Guida utente passo-passo completa in [`docs/guida-utente.md`](docs/guida-utente.md)
|
||||
(stessa sintesi anche in-app da **Aiuto → Guida**, F1).
|
||||
|
||||
## Requisiti
|
||||
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
# Guida utente
|
||||
|
||||
Questa guida descrive, in ordine, tutti i passi da fare in **Cevolani StepPrep** per
|
||||
arrivare dalla distinta base esportata dal gestionale ai file STEP pronti, passando per
|
||||
**Creo Distributed Batch**. Per il dettaglio tecnico di come funziona internamente ogni
|
||||
fase vedi [`architettura.md`](architettura.md); questa guida si ferma a cosa clicca e
|
||||
cosa vede l'utente. La stessa sintesi è disponibile anche dentro l'app da **Aiuto → Guida**
|
||||
(F1).
|
||||
|
||||
## Prima di iniziare
|
||||
|
||||
- Serve accesso alla share di rete con i file CAD (di default `X:\`).
|
||||
- Serve l'estrazione "Distinta Base" dal gestionale (Fata): il file `.xls` così come
|
||||
Fata lo salva, con le colonne Componente/Descrizione (foglio `"Distinta Base"`) — va
|
||||
lasciato nel formato/estensione in cui viene esportato, senza risalvarlo o convertirlo
|
||||
in altri formati prima di usarlo nell'app. Sotto l'estensione `.xls` il contenuto può
|
||||
essere XML (SpreadsheetML) o Excel binario vero: l'app riconosce da sola quale dei due
|
||||
è, non serve fare nulla di diverso a seconda del caso.
|
||||
- Se il file segue la convenzione di nome del gestionale (`DBP_<codice>_<timestamp>`),
|
||||
l'app aggiunge da sola l'assieme generale come componente in più — non serve fare
|
||||
nulla di diverso.
|
||||
- Conviene definire la **cartella di lavoro** giusta (fase 1, o "File → Scegli cartella
|
||||
di lavoro...") prima di importare la distinta: è lì che finiscono CSV, `raw/` e, dopo
|
||||
l'esportazione con Creo, `step/`.
|
||||
- Se la cartella di lavoro è già stata usata per un'altra distinta, conviene **pulire
|
||||
`raw/` e `step/`** prima di ripartire ("File → Pulisci raw e step..."): evita di
|
||||
confondere i file CAD/STEP della copia precedente con quelli della nuova distinta (il
|
||||
"File → Nuovo" descritto più sotto azzera solo lo stato di CSV/griglie dell'app, non
|
||||
tocca i file già copiati su disco).
|
||||
|
||||
## 1. Database
|
||||
|
||||
Alla prima apertura, se un database (`cad_index.db`) è già stato creato in precedenza,
|
||||
l'app lo ricarica da sola: si vede il pallino verde accanto a "Database", il percorso del
|
||||
file e la data dell'ultimo aggiornamento.
|
||||
|
||||
- **Se il pallino è rosso** (nessun database trovato): premi **Aggiorna indice** per
|
||||
scansionare la share (`X:\`) e crearne uno nuovo — l'operazione può richiedere qualche
|
||||
minuto la prima volta, i giri successivi sono più veloci perché aggiornano solo quello
|
||||
che è cambiato.
|
||||
- **Se hai già un database da un'altra postazione o cartella**: premi **Apri DB...** e
|
||||
selezionalo a mano.
|
||||
- La **cartella di lavoro** (dove l'app scrive il CSV della distinta e la cartella
|
||||
`raw/`) è scelta automaticamente e ricordata tra un avvio e l'altro; per cambiarla usa
|
||||
**File → Scegli cartella di lavoro...**.
|
||||
|
||||
Premi **Avanti** quando il database è caricato.
|
||||
|
||||
## 2. Importa Distinta Base
|
||||
|
||||
- **1. Carica la distinta**: trascina il file `.xls` esportato da Fata nella finestra,
|
||||
oppure premi **Scegli file distinta...** e selezionalo da Esplora risorse. Le righe importate
|
||||
compaiono nella griglia (Componente/Descrizione) e viene scritto un CSV nella cartella
|
||||
di lavoro.
|
||||
- **2. Verifica la presenza dei file sul server**: compare solo dopo un import riuscito.
|
||||
Premila per cercare ogni componente nel database — le righe della griglia si colorano
|
||||
di verde (trovato) o rosso (non trovato nell'indice).
|
||||
|
||||
**Avanti** si sblocca solo dopo aver premuto "Verifica la presenza dei file sul server",
|
||||
non basta il solo import: è il modo per accorgersi subito se il database è disallineato
|
||||
rispetto alla share (es. indice non aggiornato) prima di andare avanti.
|
||||
|
||||
## 3. Crea cartella raw
|
||||
|
||||
Premi **Crea cartella raw**: per ogni componente della distinta trovato nell'indice,
|
||||
l'app ne copia il file CAD dalla share nella cartella `raw/` (dentro la cartella di
|
||||
lavoro). La griglia mostra il percorso CAD copiato per ogni componente.
|
||||
|
||||
## 4. Trova componenti referenziati
|
||||
|
||||
Gli assiemi (`.asm`) referenziano altri file (sotto-assiemi, parti, componenti soppressi,
|
||||
riferimenti esterni) che Creo deve poter caricare insieme all'assieme principale, anche
|
||||
se non compaiono nella distinta del gestionale. Premi **Trova componenti referenziati**:
|
||||
l'app legge i file `.asm` già in `raw/`, risolve ricorsivamente tutto l'albero e copia
|
||||
anche quei file in `raw/`.
|
||||
|
||||
Si apre una finestra con l'elenco di quanto trovato e copiato (PRT e sotto-assiemi), con
|
||||
in fondo eventuali codici referenziati che non corrispondono a nessun file indicizzato
|
||||
(possono essere disegni, componenti davvero mancanti, o falsi positivi della scansione —
|
||||
non bloccano il lavoro, ma vale la pena controllarli). Da qui puoi anche aprire
|
||||
direttamente la cartella `raw/` con **Apri cartella raw**.
|
||||
|
||||
Questo passo è opzionale se la distinta contiene solo parti singole senza sotto-assiemi:
|
||||
in quel caso si può passare direttamente alla fase successiva.
|
||||
|
||||
## 5. Trascina su Creo Distributed Batch
|
||||
|
||||
L'ultima fase mostra l'elenco dei file `.asm` della distinta già presenti in `raw/`,
|
||||
trascinabili. Da qui il passaggio a Creo è manuale, fuori dall'app:
|
||||
|
||||
1. Apri **Creo Distributed Batch** (dal menu Start di Windows, o dal file
|
||||
`ptcdbatch.bat` nella cartella `bin` dell'installazione Creo).
|
||||
2. Crea un nuovo gruppo di attività per l'esportazione STEP (menu **Actions → New Task
|
||||
Group**), scegliendo il tipo di attività per l'export STEP — se in azienda è già
|
||||
presente un profilo/gruppo predefinito per l'export STEP, riusa quello invece di
|
||||
crearne uno nuovo.
|
||||
3. Aggiungi i file: trascina i `.asm` dalla finestra dell'app (o direttamente da Esplora
|
||||
risorse, dalla cartella `raw/`) sul gruppo di attività, oppure sfoglia e selezionali a
|
||||
mano da Distributed Batch.
|
||||
4. Verifica che il gruppo di attività punti al `config.pro`/profilo di export STEP giusto
|
||||
(sezione **Configuration Files** del gruppo) — di norma è già impostato una volta sola
|
||||
per tutti, non richiede modifiche a ogni giro.
|
||||
5. Avvia l'elaborazione (**Start**/**Run**): Distributed Batch legge ogni `.asm`, con
|
||||
tutto l'albero di sotto-componenti già raccolto in `raw/` nelle fasi 3-4, ed esporta i
|
||||
file STEP nella cartella `step/` (dentro la cartella di lavoro, accanto a `raw/`).
|
||||
|
||||
I nomi esatti dei menu possono variare leggermente a seconda della versione di Creo e di
|
||||
come Distributed Batch è già configurato in azienda — questi passi descrivono il flusso
|
||||
generale (fonte: [documentazione e community PTC](https://www.ptc.com/en/support/article/CS28241));
|
||||
in caso di dubbio su profili/config già pronti, chiedi a chi ha impostato Distributed
|
||||
Batch la prima volta.
|
||||
|
||||
**Se Distributed Batch fallisce con `[-4] Dati di input non completi`**, quasi sempre
|
||||
manca un file nell'albero dei componenti — Creo non dice quale. Torna alla fase 4 e
|
||||
controlla l'elenco dei "non trovati": è il punto di partenza per capire cosa recuperare
|
||||
prima di riprovare.
|
||||
|
||||
## Ripartire con una nuova distinta
|
||||
|
||||
Quando devi processare un'altra distinta, usa **File → Nuovo** (Ctrl+N): azzera CSV, raw
|
||||
e verifica delle fasi 2-5 e riporta al passo 2, senza dover ricaricare il database o
|
||||
la cartella di lavoro (restano quelli già impostati in fase 1).
|
||||
|
||||
Per ripulire le cartelle `raw/` e `step/` della cartella di lavoro prima di un nuovo giro
|
||||
(senza toccare l'indice), usa **File → Pulisci raw e step...**.
|
||||
Reference in new issue
Block a user