Documenta posizioni, fori e facce dei .prt (9239902104)
Matrici 4x3 di fori e feature (regola degli zeri corretta), foro a punti di schizzo con facce piane di Estrusione 1, profilo a L, quote per feature e tipi 928/1104/1052. Corregge l'ipotesi errata sul codice 12266. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5b11b3e8ca
commit
1eac3ccaa7
2 files changed
+121
-11
No files matched your search
Binary file not shown.
+121
-11
@@ -34,6 +34,7 @@ scritti in forma compatta. Si distinguono per il primo byte, `tag`:
|
||||
| `2a` | 2 | `3f b1 b2 00...` | livello 2: `2a f4 00` = 1,25, il passo di M8x1.25 |
|
||||
| `48` | 2 | `c0 b1 b2 00...` (negativo) | **livello 1** (−12,5; −69,5) |
|
||||
| `47` / `46` | 2 / 7 | stessa famiglia di `48`, con ripetizione / precisione piena | non isolati |
|
||||
| `e4`-`e7` | 0 | `K − 3` zeri di seguito, `K` = byte − `e0` (solo dentro le matrici, §6.1) | **livello 1** (matrici di `9239902104`) |
|
||||
| `ed`, `32`... | 8-9 | altri byte alti | non decodificato |
|
||||
|
||||
**La regola, ricavata dai dati** (non da una specifica): a ogni *byte alto* `T` del `double`
|
||||
@@ -116,6 +117,20 @@ modo per attribuire la quota a "Foro 1" o a "Estrusione 2".
|
||||
| Estrusione 1 / taglio (118) | 62 / 14 / 5 / 20 | 4 / 45 / 8 / 3 | non verificate |
|
||||
| Foro 1 (157) | 4 / 9 / 2 / 10 / 2 | 8 / 20 / 6,8 / 118 / 25 | **confermate da Creo** (§6.4): 8 = diametro nominale, 20 = profondità filetto, 118 = angolo punta, 25 = profondità foro |
|
||||
|
||||
`9239902104.prt.1` (piastra con tre fori, §6.4.1):
|
||||
|
||||
| Feature | `dim_type` | Valore | Interpretazione |
|
||||
|---|---|---|---|
|
||||
| Sketch 1 / Estrusione 1 (84) | 1 / 5 / 1 | 21 / 54 / 125 (+ 46) | quote del profilo a L (§3.2) |
|
||||
| Estrusione 1 (84) | 62 | 6 | profondità, coerente con y = 0 ... 6 delle facce |
|
||||
| Sketch 2 / Foro 1 (124 / 131) | 8 / 2 / 2 / 7 | 38 / 8 / 8 / 30 | quote dei 4 punti (§6.4.1) |
|
||||
| Foro 1 (131) | 4 | 5,5 | diametro |
|
||||
| Sketch 3 / Foro 2 (1095 / 1099) | 2 / 2 | 4 / 5 | distanze del punto dai bordi: l'origine `(67, 6, -5)` = 71 − 4 e 5 |
|
||||
| Foro 2 (1099) | 4 | 5 | diametro |
|
||||
| Foro 3 (1132) | 4 / 9 / 2 / 2 | 3 / 6 / 2,5 / 137,5 | diametro nominale M3, profondità filetto, punta, lunghezza (distanza fino all'estremo, §6.1) |
|
||||
| Sketch 4 / Estrusione 2 (1903 / 1911) | 1 / 62 | 3,5 / 3 | quota dello schizzo e profondità |
|
||||
| Arrotondamento 1 (2777) | 3 | 3 | raggio, confermato dallo storico |
|
||||
|
||||
**Cosa è provato e cosa no.** I valori `25` e `139` di *Rivoluzione 1* sono confermati da Creo
|
||||
(§5). Per tutte le altre righe il *numero* è decodificato in modo plausibile ma il *significato*
|
||||
(profondità? diametro?) è dedotto dal codice `dim_type`, da cui non ho una tabella certa. I codici
|
||||
@@ -168,6 +183,23 @@ quotato 25 come diametro rispetto all'asse tratteggiato, simmetrico rispetto a `
|
||||
Nota: nel file la quota `25` è un **diametro** (Ø25), anche se in geometria il lato è 12,5. Per
|
||||
questo non si può dedurre la forma dalle sole quote: servono anche le linee.
|
||||
|
||||
### 3.2 Secondo esempio: il profilo a L di *Estrusione 1* (`9239902104.prt.1`)
|
||||
|
||||
Le linee del profilo (`entity(line)`, estremi `(x, y)` nel sistema dello schizzo, `z = 0`):
|
||||
|
||||
| Linea | Da | A |
|
||||
|---|---|---|
|
||||
| 1 | (71, 0) | (−54, 0) |
|
||||
| 2 | (−54, 0) | (−54, 46) |
|
||||
| 3 | (−54, 46) | (0, 46) |
|
||||
| 4 | (0, 46) | (0, 21) |
|
||||
| 5 | (0, 21) | (71, 21) |
|
||||
| 6 | (71, 21) | (71, 0) |
|
||||
|
||||
più una linea d'asse. Le quote 125 (= 54 + 71), 54, 46 e 21 sono tutte spiegate dal profilo. Qui le
|
||||
linee stanno in `FeatDefs` (record della feature, sezione `S2D0006`), non in `BasFullData` come in
|
||||
§3: la posizione del blocco `p_saved_result` dipende dal tipo di feature.
|
||||
|
||||
## 4. Da schizzo + quote alla forma: la rivoluzione
|
||||
|
||||
Con le due cose sopra, *Rivoluzione 1* è determinata così:
|
||||
@@ -200,16 +232,32 @@ ma nella definizione della feature (§7).
|
||||
|
||||
### 6.1 Matrici 4×3
|
||||
|
||||
Piani di riferimento, assi, sistemi di coordinate e schizzi hanno un `local_sys`: array `f9 04 03`,
|
||||
cioè 4 righe per 3 colonne = 12 numeri (3 versori degli assi + l'origine). Lo schizzo sul piano
|
||||
base ha la matrice identità, scritta `0f 18 e5 0f 18 e5 0f 18 e5`: tre gruppi uguali, ciascuno
|
||||
`1, 0, 0, 0`, cioè 12 numeri `1,0,0,0, 1,0,0,0, 1,0,0,0`. Da qui l'ipotesi che `e4`-`e7` dopo uno
|
||||
zero valgano "altri K−3 zeri".
|
||||
Piani di riferimento, assi, sistemi di coordinate, schizzi e feature hanno un `local_sys`: array
|
||||
`f9 04 03` = 4 righe per 3 colonne = 12 numeri: **tre versori e, per ultima, l'origine**. Si leggono
|
||||
con i numeri di §1 più un codice di ripetizione: un byte `e4`-`e7` vale **"altri `K − 3` zeri"**,
|
||||
con `K` = byte − `e0` (`e4` = 1 zero, `e5` = 2, `e6` = 3, `e7` = 4). L'identità è quindi
|
||||
`0f 18 e5 0f 18 e5 0f 18 e5` = `1,0,0,0, 1,0,0,0, 1,0,0,0`.
|
||||
|
||||
**Questa lettura è un'ipotesi, non verificata.** L'identità non permette di distinguere
|
||||
"per righe" da "per colonne", né di sapere quale gruppo è l'origine. Servono matrici *non*
|
||||
identità (un piano ruotato, un'origine fuori dallo zero) con il valore atteso da Creo. Finché non
|
||||
c'è, rotazione e origine di piani e schizzi sono **non decodificate**.
|
||||
**Verificato su `9239902104.prt.1`** (livello 1: i valori coincidono con quelli mostrati da Creo,
|
||||
sotto), con le 4 righe `(e1, e2, e3, origine)`:
|
||||
|
||||
| Feature | Matrice letta | Significato |
|
||||
|---|---|---|
|
||||
| Foro 1 | `(1,0,0) (0,0,-1) (0,1,0)`, origine `(-46, 6, -38)` | uno dei 4 punti dello schizzo `(-46, 38)`: x = x dello schizzo, z = **−**y dello schizzo, y = 6 = faccia superiore (la piastra è spessa 6) |
|
||||
| Foro 2 | `(1,0,0) (0,0,-1) (0,1,0)`, origine `(67, 6, -5)` | 71 − 4 e 5 dal bordo: le due quote 4 e 5 della feature |
|
||||
| Foro 3 | `(0,1,0) (-1,0,0) (0,0,1)`, origine `(-66.5, 3, -5)` | y = 3: l'**offset 3,00** dalla faccia superiore (y = 6) che Creo mostra; z = −5: allineato all'asse di Foro 2 (**"Allinea" con `A_7`**); x = −66,5 = 71 − 137,5, cioè il foro parte 137,5 prima dell'estremo destro (71) |
|
||||
|
||||
Quindi **la posizione di un foro si legge dall'origine della sua matrice**: le quote di
|
||||
posizionamento (4, 5, 3,00) non servono, sono già il risultato. Nei tre fori l'`y` e la `z` tornano
|
||||
esattamente con le quote e con i riferimenti mostrati da Creo.
|
||||
|
||||
Dalla stessa matrice: nel modello di questa piastra lo schizzo di Estrusione 1 sta nel piano `x–z`
|
||||
(x dello schizzo = x, y dello schizzo = −z) e l'estrusione cresce lungo +y fino a 6.
|
||||
|
||||
**Resta incerta l'interpretazione dell'asse del foro.** Per Foro 1 e 2 il terzo versore è `(0,1,0)`
|
||||
(perpendicolare alla piastra, come deve essere). Per Foro 3 è `(0,0,1)`, ma il foro in Creo entra
|
||||
dalla faccia laterale: o la convenzione del versore dell'asse è diversa, o la direzione di foratura
|
||||
sta in un altro campo. Non risolto.
|
||||
|
||||
### 6.2 Dove stanno
|
||||
|
||||
@@ -333,6 +381,48 @@ riferimento l'asse `A_1`: non ho agganciato quegli id perché le coppie `id_type
|
||||
ho decifrate. La geometria generata dal foro (cilindro, cono, piani con `feat_id` 157) è invece
|
||||
in `VisibGeom` e `NovisGeom`, e `geometry2_id` 175 delle istruzioni è un suo piano.
|
||||
|
||||
### 6.4.1 Foro a punti di schizzo e facce piane: `9239902104.prt.1`
|
||||
|
||||
*Foro 1* è definito da *Sketch 2* con **4 punti**. Cosa si legge, tutto da `local_sys` (§6.1):
|
||||
|
||||
**I punti.** Nello schizzo (`entity(point)`, campo `pnt`, un `[x, y, z]` per punto) sono
|
||||
`(-46, 8)`, `(-8, 8)`, `(-8, 38)`, `(-46, 38)`, con quote 8, 8, 30 e 38. Nel modello ogni punto
|
||||
diventa un'**istanza** del foro, e ogni istanza ha un piano proprio in `NovisGeom` (superficie
|
||||
piana con `feat_id` 131, §6.3) con la matrice del punto: l'**origine** è la posizione assoluta.
|
||||
|
||||
| Piano (`geom_id`) | Origine nel modello |
|
||||
|---|---|
|
||||
| 135 | `(-46, 6, -8)` |
|
||||
| 147 | `(-8, 6, -8)` |
|
||||
| 159 | `(-8, 6, -38)` |
|
||||
| 171 | `(-46, 6, -38)` |
|
||||
|
||||
Quindi `x` = `x` dello schizzo, `z` = **−**`y` dello schizzo (confermato dai quattro punti e da Foro
|
||||
2, §6.1) e `y` = 6.
|
||||
|
||||
**La faccia.** La superficie su cui stanno è la faccia piana superiore di *Estrusione 1*: ha
|
||||
`y = 6` e la stessa matrice del sistema di coordinate dello schizzo (origine `(0, 6, 0)`,
|
||||
versori `(1,0,0)`, `(0,0,1)`, `(0,-1,0)`). Le facce piane di *Estrusione 1* (`feat_id` 84, in
|
||||
`VisibGeom`) sono, con origine e normale (il terzo versore):
|
||||
|
||||
| `geom_id` | Origine | Normale | Faccia |
|
||||
|---|---|---|---|
|
||||
| 95 | `(0, 6, 0)` | `(0,-1,0)` | **superiore** (`y = 6`), dove sono i fori |
|
||||
| 107 | `(71, 0, 0)` | `(-1,0,0)` | estremo destro (`x = 71`) |
|
||||
| 113 | `(-54, 0, -46)` | `(1,0,0)` | estremo sinistro (`x = -54`) |
|
||||
| 115 | `(-54, 0, 0)` | `(0,0,1)` | lato `z = 0` |
|
||||
| 2999 | `(71, 0, -21)` | `(0,0,-1)` | lato del gradino (`z = -21`) |
|
||||
| 3001 | `(0, 0, -21)` | `(-1,0,0)` | alzata del gradino (`x = 0`) |
|
||||
| 3003 | `(0, 0, -46)` | `(0,0,-1)` | lato `z = -46` |
|
||||
|
||||
La piastra a L di Estrusione 1 (§3.2, profilo `x` da −54 a 71, `y` dello schizzo da 0 a 46, gradino
|
||||
a 21) torna in coordinate modello con `z = −y` dello schizzo, e spessore 6 lungo `y`. Gli altri
|
||||
tre fori cadono dentro il materiale (`x` −46 e −8, `z` −8 e −38).
|
||||
|
||||
**Non risolto:** quale `geom_id` il foro usi *formalmente* come faccia di riferimento (95, per
|
||||
coincidenza di piano e di origine) non è scritto in un campo che io abbia identificato: è
|
||||
un'identificazione per posizione, non una lettura.
|
||||
|
||||
### 6.5 Lo smusso: `feat_defs_914`
|
||||
|
||||
Riferimento: *Smusso 1* di `9252000507.prt.11` (feature 252), in modifica in Creo: modalità
|
||||
@@ -368,6 +458,24 @@ che io abbia decifrato), e **90** non l'ho risolto.
|
||||
- l'istruzione `14741`, con un valore `11,476` in precisione piena: non corrisponde a niente di
|
||||
mostrato.
|
||||
|
||||
**Foro filettato con posizionamento lineare** (*Foro 3* di `9239902104.prt.1`). Creo mostra: tipo
|
||||
Standard, Diritto, Maschiato, ISO **M3x.5**, Ø2,50 (punta), campo profondità vuoto, posizionamento
|
||||
**Lineare** con riferimento primario `Supfce:F6(ESTRUSIONE_1)` e due riferimenti di offset
|
||||
(`Supfce:F6(ESTRUSIONE_1)` con offset 3,00 e `A_7(ASSE):F10(FORO 2)` allineato). Dal file:
|
||||
|
||||
| Informazione | Letto | Prova |
|
||||
|---|---|---|
|
||||
| Filetto | stringhe `ISO`, `M3x.5`, punta `2.5`; `scrsize_val` = 12 | concorda con Creo |
|
||||
| Ø della punta | istruzione 5104, offset 2,5 | concorda con Creo (Ø2,50) |
|
||||
| Quote del foro | 3 (`dim_type` 4), 6 (9), 2,5 (2), 137,5 (2) | numeri letti; 137,5 con campo "Profondità" vuoto in Creo: probabilmente un foro passante, valore non verificato |
|
||||
| Posizione risultante (offset 3,00 e allineamento a `A_7`) | **letta dalla matrice** `local_sys` (§6.1): origine `(-66.5, 3, -5)`, con y = 3 e z = −5 uguali a quelli di Foro 2 | concorda con Creo; la quota 3,00 non è una quota a sé nel `dim_array` |
|
||||
| Riferimenti `F6` e `A_7` | non risolti | gli id stanno in blocchi `plin_info_ref` come per DTM1 (§6.3) |
|
||||
|
||||
Correzione: il primo codice delle istruzioni è 5542 anche qui, come nel foro coassiale di
|
||||
`9252000507`; il `12266` che avevo letto nella prima versione di questo doc veniva da un'istruzione
|
||||
di un altro record. Il tipo di posizionamento (coassiale / lineare) **non** è quel codice. Quale sia
|
||||
non lo so: la posizione finale si legge comunque dalla matrice (§6.1).
|
||||
|
||||
## 7. Cosa manca per determinare un `.prt` in modo univoco
|
||||
|
||||
Tabella di verità: ogni informazione necessaria, se l'ho decodificata e quanto è provata.
|
||||
@@ -383,13 +491,15 @@ Tabella di verità: ogni informazione necessaria, se l'ho decodificata e quanto
|
||||
| Cerchi, archi, spline dello schizzo | non verificato (cerchio visto in `test.prt.1`, raggio 50) | `entity(circle)`, `entity(arc_z)`, `entity(spline)` |
|
||||
| Valori non "tondi" | **non decodificato** (tag diversi da `2f`/`48`) | ovunque |
|
||||
| Piano e orientamento dello schizzo | **non decodificato** | `gsec3d_ptr`, `sec_orient_data` |
|
||||
| Posizione/rotazione di piani, assi, punti | **non decodificato** (§6.1) | `ActDatums`, `MdlRefInfo` |
|
||||
| Posizione/rotazione di fori e feature | **fatto**: matrice 4×3 (§6.1) | `local_sys` |
|
||||
| Posizione/rotazione di piani, assi, punti | stessa matrice, da verificare su un piano ruotato | `ActDatums`, `MdlRefInfo` |
|
||||
| Vincoli e riferimenti di un piano (come DTM1) | **fatto per DTM1 di `9252000507`** (riferimenti sì, nome del vincolo da un esempio) | `FeatDefsDtm`, §6.3 |
|
||||
| Offset di un piano da un altro | **non decodificato**: mai visto un offset non nullo | quota in `dim_array` (`dim_id`) |
|
||||
| Direzione/lato e angolo di una rivoluzione, profondità e direzione di un'estrusione | **non decodificato** | `feat_defs_917`/`916` (`place_instruction_ptrs`, `plin_info_arr`) |
|
||||
| Parametri del foro (misura, punta, passo, profondità, angolo) | **fatto**, provato contro Creo su `9252000507` | `feat_defs_911`, §6.4 |
|
||||
| Opzioni del foro (maschiato, diritto, superficie del filetto) | **non individuato** | §6.4 |
|
||||
| Posizione del foro (riferimenti e offset) | **non decodificato**: le istruzioni di posizionamento ci sono (`plin_info_arr`), come per DTM1 | `feat_defs_911` |
|
||||
| Posizione assoluta del foro (origine e versori) | **fatto**, provato contro i riferimenti di Creo su `9239902104` (§6.1) | `local_sys` del record |
|
||||
| Riferimenti del posizionamento (quale faccia/asse) | **non decodificato** | `plin_info_ref` in `feat_defs_911` |
|
||||
| Valore di raccordi e smussi | **fatto**, provato contro Creo su `9252000507` (D = 0,5) | `dim_array` |
|
||||
| Spigoli a cui si applicano raccordi/smussi | **parziale**: si risolvono le superfici (feature di origine), non lo spigolo né l'insieme | `feat_defs_914`, §6.5 |
|
||||
| Schema quote e insiemi dello smusso | **non decodificato** | `feat_defs_914` |
|
||||
|
||||
Reference in new issue
Block a user