137 Commits

Author SHA1 Message Date
Riccardo Elitropi a1113ad94c EgtMachKernel :
- Aggiunta funzione per tasche passanti per volumi esterni al grezzo.
- migliorata la gestione dei lati aperti piccoli ( da testare )
- migliorie varie .
2024-03-13 11:23:07 +01:00
Riccardo Elitropi c321205086 EgtMachKernel :
- migliore svuotature.
2024-03-12 13:37:00 +01:00
Riccardo Elitropi 33f969a254 Merge commit '839639fcc85a0ff8799a6e2fc8e8778ad8772066' into Svuotature_LeadIn/Out 2024-03-04 13:26:55 +01:00
Riccardo Elitropi aad600faca EgtMachKernel :
- aggiunta svuotatura ottimizzata a spirale
- correzioni varie.
2024-03-04 13:26:39 +01:00
Riccardo Elitropi caee6ccb83 EgtMachKernel :
- migliorata gestione Archi
- migliorata gestioni lati aperti e gestione delle operazioni booleane tra regioni piane
- migliorie varie.
2024-03-01 17:51:23 +01:00
Riccardo Elitropi 0980e10c33 Merge commit 'd3b281a858c34a3f760c5afd925417b421b1a6d6' into Svuotature_LeadIn/Out 2024-02-26 16:10:46 +01:00
Riccardo Elitropi 85258fe4c4 EgtMachKernel :
- migliorata gestione lati aperti e scelta ordine degli Offset.
- migliorie generali.
2024-02-26 16:08:59 +01:00
Riccardo Elitropi ecc2c66fac Merge commit '737124b0bd167e644bb1c0131e675f515cbecb1f' into Svuotature_LeadIn/Out 2024-02-22 09:48:25 +01:00
Riccardo Elitropi 97a0aed32c EgtMachKernel :
- piccola miglioria.
2024-02-22 09:48:05 +01:00
Riccardo Elitropi c23c975275 Merge commit '028a5b7bbaab65b2d1111aeb67560a6ea01e0f39' into Svuotature_LeadIn/Out 2024-02-13 12:26:04 +01:00
Riccardo Elitropi b9e0c6e7e3 EgtMachKernel :
- implementazione Dijkstra per percorsi di ritorno.
2024-02-13 12:25:28 +01:00
Riccardo Elitropi dd28529753 Merge commit '1179ad7e84b5d7bca253c3219b8ba01e10082a08' into Svuotature_LeadIn/Out 2024-02-09 08:01:06 +01:00
Riccardo Elitropi 9d471f4647 EgtMachKernel :
- migliorie sui lati aperti.
2024-02-05 12:08:47 +01:00
Riccardo Elitropi 6c8d1931f3 EgtMachKernel :
- aggiunta gestione parametri ( Lati Aperti e Offset ottimizzati).
2024-02-02 13:00:37 +01:00
Riccardo Elitropi 7f8798a159 EgtMachKernel :
- migliorie selezione lati aperti.
- migliorie percorsi di ritorno.
2024-02-02 11:47:47 +01:00
Riccardo Elitropi 443fac5f0f EgtMachKernel :
- semplificazione curve con archi.
2024-02-01 13:23:43 +01:00
Riccardo Elitropi 84fc7b0dc3 EgtMachKernel :
- codice di prova per VRONI
- entrate Spiral - ZigZag.
2024-01-31 13:22:23 +01:00
Riccardo Elitropi 4f64b1efc2 EgtMachKernel :
- Entrate Helix e ZigZag ( codice di prova).
2024-01-30 13:30:18 +01:00
Riccardo Elitropi 9c09f30f08 Merge commit 'd8c5fe0ea751afacaf031f6029b0ce07b22b1547' into Svuotature_LeadIn/Out 2024-01-30 11:08:49 +01:00
Riccardo Elitropi e10f917bab EgtMachKernel :
- caricamento codice per Merge.
2024-01-30 11:05:08 +01:00
Riccardo Elitropi 073c5f737e EgtMachKernel :
- migliorie Tagli e Proeizioni
- percorsi di ritorno con Bisettori.
2024-01-22 13:04:13 +01:00
Riccardo Elitropi d57198ac19 EgtMachKernel :
- percorsi di ritorno con Vroni smussati ( algoritmo Douglas-Peucker).
2024-01-19 13:35:19 +01:00
Riccardo Elitropi ea20040495 Merge commit 'd66cc479364215ad5a542e0b9051d399e0b3c0d1' into Svuotature_LeadIn/Out 2024-01-19 11:48:20 +01:00
Riccardo Elitropi 6adad38ffa EgtMachKernel :
- migliorie lati aperti
- aggiunta messaggi errore.
2024-01-18 13:06:31 +01:00
Riccardo Elitropi bac737ee53 EgtMachKernel :
- Aggiunta caso speciale per Tool non cilindrici.
2024-01-18 09:18:37 +01:00
Riccardo Elitropi 4ae515befd EgtMachKernel :
- LeadIn/Out tool non cilindrici.
2024-01-17 13:20:51 +01:00
Riccardo Elitropi 58b119c68f EgtMachKernel :
- LeadIn/Out tool non cilindrici, casi ottimizzati a trapezio.
2024-01-16 13:32:56 +01:00
Riccardo Elitropi 28e76415ed EgtMachKernel :
- LeadIn/Out Spiral per tool non cilindrici.
2024-01-15 13:36:53 +01:00
Riccardo Elitropi c163fe503e EgtMachKernel :
- Test per entrate/Uscite con tool non cilindrici.
- Proiezioni facce chiuse con tool non cilindrici.
2024-01-15 11:12:08 +01:00
Riccardo Elitropi c928a50243 EgtMachKernel :
- prima prova con tool non cilindrici, proiezioni.
2024-01-12 13:38:23 +01:00
Riccardo Elitropi ac8feb7a17 EgtMachKernel :
- utilizzo della funzione limite per LeadIn/Out.
2024-01-11 17:57:23 +01:00
Riccardo Elitropi 8ae1d4cdc2 EgtMachKernel :
- LeadIn/Out VORONOI e Dijkstra per casi ottimizzati a Spirale.
- migliorie sui percotrsi di ritorno.
2024-01-10 18:28:17 +01:00
Riccardo Elitropi d684f6fb82 EgtMachKernel :
- LeadIn/Out con VORONI e Dijkstra ( cammini minimi).
2024-01-09 18:48:31 +01:00
Riccardo Elitropi 0cbf148bb6 EgtMachKernel :
- primo Test LeadIn/Out con VRONI.
2024-01-08 13:23:43 +01:00
Riccardo Elitropi ee9a446cc0 EgtMachKernel :
- Primo calcolo di LeadIn/Out.
2024-01-05 13:30:07 +01:00
Riccardo Elitropi 2e1d893d5d EgtMachKernel :
- Gestione LeadIn/Out ( inizio stesura funzioni).
2024-01-04 13:00:55 +01:00
Riccardo Elitropi cdfa857c02 Merge commit 'b7eee50e55973024da5fc7d80020ee7daacf64d2' into Svuotature_LeadIn/Out 2024-01-04 09:37:36 +01:00
Riccardo Elitropi b7eee50e55 EgtMachKernel :
- modifica funzione lati aperti.
2024-01-04 09:35:51 +01:00
Riccardo Elitropi 3cda97534e EgtMachKernel :
-piccola modifica.
2024-01-04 09:35:14 +01:00
Riccardo Elitropi 5975b00def EgtMachKernel :
- implementazione CalcRegionElevation.
2024-01-04 09:33:47 +01:00
Riccardo Elitropi d845442ebd Merge commit 'b5ef9ae6dc7564e172af1a7558348e60b5da6a0f' into svuotature 2024-01-03 09:32:55 +01:00
Riccardo Elitropi 511d1c0aef EgtMachKernel :
- primo codice per Lead In/out.
2023-12-22 13:12:32 +01:00
Riccardo Elitropi 4c25e19753 EgtMachKernel :
- migliorie codice.
2023-12-22 11:59:17 +01:00
Riccardo Elitropi f8de95a6b6 EgtMachKernel :
- adattamento funzione VerifyPathFromBottom e GeneratePocketingPv.
2023-12-19 11:45:10 +01:00
Riccardo Elitropi 2c1cd101b2 EgtMachKernel :
- Aggiunta funzione che svuota le parti non svuotate di una lavorazione precedente.
2023-12-19 11:01:39 +01:00
Riccardo Elitropi f5a94ee0dd EgtMachKernel :
- lavorazione precedente. Primo test.
2023-12-18 13:10:38 +01:00
Riccardo Elitropi 790660e549 EgtMachKernel :
- rimozione funzioni non necessarie e pulizia codice.
2023-12-18 09:08:15 +01:00
Riccardo Elitropi d60cec01ef EgtMachKernel :
- primo codice di Test Volumi di svuotatura.
2023-12-15 19:31:11 +01:00
Riccardo Elitropi 9267f902ae EgtMachKernel :
merge con Master.
2023-11-29 12:41:34 +01:00
Riccardo Elitropi 4558f5d842 Merge commit 'c8c8d9e2a52041f2b511b5a4d9325945733f0a22' into svuotature 2023-11-29 12:27:32 +01:00
Riccardo Elitropi a404881759 EgtMachKernel :
- migliorata gestione Chunk per OneWay.
2023-11-29 12:19:06 +01:00
Riccardo Elitropi 77cd16a5b6 EgtMachKernel :
- volumi di pocketing .
2023-11-15 13:17:43 +01:00
Riccardo Elitropi c89683cc0e EgtmachKernel :
- primo codice per ricavare Volume di Pocketing.
2023-11-14 13:26:09 +01:00
Riccardo Elitropi cc50f573bc EgtMachKernel :
modifica funzione GetCurves.
2023-11-13 13:29:58 +01:00
Riccardo Elitropi c13dba8c9f EgtMachKernel :
- codice senza considerare il volume di svuotatura.
2023-11-13 08:15:21 +01:00
Riccardo Elitropi c8cd417dac EgtMachKernel :
- migliorie codice con test reali.
2023-11-09 17:11:39 +01:00
Riccardo Elitropi ce704bdcbc EgtMachKernel :
- migliorato codice OneWay.
2023-11-08 13:40:49 +01:00
Riccardo Elitropi 7ca922c9b6 EgtMachKernel :
- codice per casi ottimizzati ZigZag.
2023-11-07 17:46:49 +01:00
Riccardo Elitropi 4d02f573d2 EgtMachKernel :
- codice di test migliorato per casi ottimizzati a spirale.
2023-11-06 18:34:10 +01:00
Riccardo Elitropi 0dfc9a38da EgtMachKernel :
- primo codice di test da migliorare per Trapezi SpiralIn/Out.
2023-11-03 18:17:26 +01:00
Riccardo Elitropi 4ed4445d09 EgtMachKernel :
- Prime idee per ottimizzazioni.
2023-11-02 17:57:28 +01:00
Riccardo Elitropi 072b47590e EgtMachKernel :
- casi ottimizzati Trapezi ( Codice non testato).
2023-10-31 16:43:04 +01:00
Riccardo Elitropi 31980fb85f EgtMachKernel :
- primo codice di prova per ottimizzazioni su step con geometrie uguali ( SpiralIn/Out/ZigZag).
2023-10-30 11:47:17 +01:00
Riccardo Elitropi f51b05da5b EgtMachKernel :
- entrate rese coerenti tra i vari step ( SpiralIn/Out)
- rimozione del ricalcolo dei percorsi nel caso di geometria uguale tra gli step (SpiralIn/Out).
2023-10-11 13:17:34 +02:00
Riccardo Elitropi 46868459ae Merge commit 'b3a1ee8e6cbe1ea0c56e64133c96300e3f22bf89' into svuotature 2023-10-10 11:15:54 +02:00
Riccardo Elitropi ac85a09ff2 EgtMachKernel :
- migliorie per entrate.
2023-10-10 11:04:59 +02:00
Riccardo Elitropi 4ed01598a5 EgtMachKernel :
- controllo validità superfici e coerenza con le normali.
2023-09-18 13:17:24 +02:00
Riccardo Elitropi ec91d76869 EgtMachKernel :
- migliorie proeiezioni e gesitoni lati aperti.
2023-09-15 13:06:31 +02:00
Riccardo Elitropi cee893f4ca EgtMachKernel :
- migliorie varie.
2023-09-13 13:20:55 +02:00
Riccardo Elitropi 4e23dbe156 EgtMachKernel :
- migliorie gestioni lati aperti in adattamento a TriMesh
- inizio risoluzione problemi per lati aperti dentro al grezzo.
2023-09-12 17:35:31 +02:00
Riccardo Elitropi 944473df2e EgtMachKernel :
- migliorie gestioni lati aperti con isole chiuse molto vicine.
- migliorie generali e pulizia codice.
2023-09-11 13:31:23 +02:00
Riccardo Elitropi efde63ba64 EgtMachKernel :
- migliorie approssimazione curve e FlatRegions.
2023-09-08 13:41:35 +02:00
Riccardo Elitropi 09cddcf9ac EgtMachKernel :
- migliorie approssimazione sulle curve
- casi ottimizzati ZigZag con isole.
2023-09-07 13:08:34 +02:00
Riccardo Elitropi 7dcf367d48 EgtMachKernel :
- pulizia codice.
2023-09-06 09:48:03 +02:00
Riccardo Elitropi 5562a0f20c Merge commit 'f30f028b171a931f82cd15e95b4bea832a33c540' into svuotature 2023-09-06 09:47:26 +02:00
Riccardo Elitropi 05fb2ad32b EgtMachKernel :
- prova per svuotatura King e Sella.
2023-09-05 15:24:39 +02:00
Riccardo Elitropi e146e1b6da EgtMachKernel :
- prime prove svuotatura King.
2023-08-25 13:33:24 +02:00
Riccardo Elitropi 701fcbdd34 EgtMachKernel :
- piccole migliorie.
2023-08-23 12:45:09 +02:00
Riccardo Elitropi 44aef02ca1 EgtMachKernel :
- prime prove per extra steps.
2023-08-22 13:57:43 +02:00
Riccardo Elitropi 01d3e7baa9 EgtMachKernel:
- modifiche proiezioni con scalatura.
2023-08-21 13:32:56 +02:00
Riccardo Elitropi 98aac3154c EgtMachKernel :
- migliorie tagli di superifici per svuotature.
2023-08-17 17:13:31 +02:00
Riccardo Elitropi a839a29dce EgtMachKernel :
- adattamento svuotatura a Trimesh.
2023-08-10 13:14:44 +02:00
Riccardo Elitropi c58926bb5c EgtMachKernel :
- codice di prova. Adattamento superficie di svuotatura a Trimesh iniziale.
2023-08-04 13:40:35 +02:00
Riccardo Elitropi ea36a0b8a1 EgtMachKernel :
- Test codice.
2023-08-03 13:12:53 +02:00
Riccardo Elitropi c7070e5f2f EgtMachKernel :
- pulizia del codice.
2023-08-02 13:10:25 +02:00
Riccardo Elitropi a5007038b8 Merge commit '2b5aacc160c24afa2dc9ca348e57a204992c5880' into svuotature 2023-08-01 11:36:59 +02:00
Riccardo Elitropi ff8e875290 EgtMachKernel :
- migliorata la regione di incidenza per lati aperti
- controllo pulizia dei lati aperti con angoli piccoli.
2023-08-01 11:35:38 +02:00
Riccardo Elitropi d7a5f4aa72 EgtMachKernel :
- migliorati casi ottimizzati trapezi e ZigZag con 0 lati aperti.
2023-07-28 17:02:29 +02:00
Riccardo Elitropi 7cd3925e4c EgtMachKernel :
- merge con master.
2023-07-26 13:13:27 +02:00
Riccardo Elitropi 25f141fbf0 Merge commit '1097f2a19f77801d64fe615ec214a3cba214c818' into svuotature 2023-07-26 11:58:33 +02:00
Riccardo Elitropi ed677dfec6 EgtMachKernel :
- migliorie varie.
2023-07-26 11:45:43 +02:00
Riccardo Elitropi 61d5029db9 EgtMachKernel :
- migliorate le proeizioni.
2023-07-24 13:27:17 +02:00
Riccardo Elitropi 4cd354c85a EgtMachKernel :
- primo prototipo funzione di ricerca dei falsi lati aperti.
2023-07-19 13:44:41 +02:00
Riccardo Elitropi 0fd0b12445 EgtMachKernel :
- modifiche lati aperti e Offset sulle curve omogenee.
2023-07-18 13:33:39 +02:00
Riccardo Elitropi 2a3a9fefe3 EgtMachKernel :
- finti lati aperti.
2023-07-17 13:42:53 +02:00
Riccardo Elitropi 1fef9786ac EgtMachKernel :
- Intersezioni e proiezioni, gestione dei nuovi lati aperti.
2023-07-11 16:29:48 +02:00
Riccardo Elitropi 6d8848ec46 EgtMachKernel :
- Migliorie proiezioni.
2023-07-10 13:19:42 +02:00
Riccardo Elitropi 2616d97d0a EgtMachKernel :
- migliorie proiezioni con grezzi con lati curvi.
2023-07-07 13:43:50 +02:00
Riccardo Elitropi 3fa4e64cc2 EgtMachKernel :
- modifiche lati aperti e proiezioni.
2023-07-06 13:13:41 +02:00
Riccardo Elitropi 648ca06815 EgtMachKernel :
- semplificazione proiezione grezzo.
2023-07-05 13:31:21 +02:00
Riccardo Elitropi 638d252b38 EgtMachKernel :
- migliorie sui lati aperti.
2023-07-04 13:37:55 +02:00
Riccardo Elitropi cd2a7cc921 EgtMachKernel :
- Merge con Master.
2023-07-03 13:35:53 +02:00
Riccardo Elitropi 919ca81c43 Merge commit 'cdb35b4c38c4b3ca65f90c061aa46d4db1f9506f' into svuotature 2023-07-03 13:34:24 +02:00
Riccardo Elitropi 6935bec958 EgtMachKernel :
- migliorie proiezioni grezzo con isole aperte e contorni chiusi.
2023-06-30 13:29:59 +02:00
Riccardo Elitropi 8e52fd584a EgtMachKernel :
- migliorie proiezioni.
2023-06-29 13:14:54 +02:00
Riccardo Elitropi f69de493d6 EgtMachKernel :
- prima versione aggiornata per proiezioni ( temporaneo).
2023-06-28 13:26:34 +02:00
Riccardo Elitropi e04805a99a EgtMachKernel :
- migliorie codice proiezione con grezzo.
2023-06-27 13:43:26 +02:00
Riccardo Elitropi ccac200e41 EgtMachKernel :
- conservazione temp prop in Operation per curve.
- migliorie intersezioni trimesh con piano.
2023-06-26 13:36:36 +02:00
Riccardo Elitropi 2c501206b2 EgtMachKernel :
- minimizzati i percorsi di estensione sui lati aperti con archi
- controlli su regioni svuotate in precedenza.
2023-06-23 13:39:52 +02:00
Riccardo Elitropi 297bc0c86d EgtMachKernel :
- Aggiunta funzioni di distanza dal grezzo in Operation.
2023-06-23 09:33:39 +02:00
Riccardo Elitropi fac69a1d65 EgtMachKernel :
- merge file mancanti.
2023-06-23 09:19:28 +02:00
Riccardo Elitropi 4711734998 EgtMachKernel :
- merge con master.
2023-06-23 09:05:29 +02:00
Riccardo Elitropi e04a05831e Revert "Merge commit '994658da167a7ac3f607f4b535a65febe8f308d1' into svuotature"
This reverts commit e96f467b56, reversing
changes made to ec1ee961be.
2023-06-23 08:38:57 +02:00
Riccardo Elitropi e96f467b56 Merge commit '994658da167a7ac3f607f4b535a65febe8f308d1' into svuotature 2023-06-23 08:20:50 +02:00
Riccardo Elitropi ec1ee961be EgtMachKernel :
- migliorie archi lati aperti.
2023-06-22 13:14:35 +02:00
Riccardo Elitropi ca74fa6794 EgtMachKernel :
- migliorie.
2023-06-21 13:23:32 +02:00
Riccardo Elitropi 8242146446 EgtMachKernel :
- migliorie unione sui lati aperti.
2023-06-20 13:29:13 +02:00
Riccardo Elitropi 4e2df90961 EgtMachKernel :
- Isole aperte generate da lati aperti
- migliorie alle approssimazioni degli archi.
2023-06-16 13:45:33 +02:00
Riccardo Elitropi 3393ea8325 EgtMachKernel :
- prima prova di taglio con grezzo a disco.
2023-06-14 11:35:13 +02:00
Riccardo Elitropi 1060a10491 EgtMachKernel :
- test codice per Isole aperte ed intersezioni grezzo con esse
- migliorie alle curve.
2023-06-13 14:33:25 +02:00
Riccardo Elitropi d46f94f8da EgtMachKernel :
- prima prova per isole con lati aperti e gestione angoli piccoli.
2023-06-09 13:47:04 +02:00
Riccardo Elitropi 3dcba13efc EgtMachKernel :
- merge con master.
2023-06-05 08:36:59 +02:00
Riccardo Elitropi e4983d5276 Merge commit 'df86ffdee340b33c359d7e6b57598a70c1a1c006' into svuotature 2023-06-05 08:33:45 +02:00
Riccardo Elitropi fee74d47f8 EgtMachKernel :
- migliorie varie in pocketing.
2023-06-05 08:25:31 +02:00
Riccardo Elitropi 37f4e0982f EgtMachKernel :
- merge con master.
2023-05-11 11:50:21 +02:00
Riccardo Elitropi fb5e01881d Merge commit 'c6aa83ccd5c3d5819773872b6dbdbb6617517c4b' into svuotature 2023-05-11 11:40:21 +02:00
Riccardo Elitropi a5096facc7 EgtMachKernel :
- Feed ( test)
- Svuotatura con pocketing precedente
- correzioni varie.
2023-05-11 11:31:00 +02:00
Riccardo Elitropi dbe11e6343 EgtMachKernel :
- prima versione per Feed ( da migliorare) .
2023-04-12 13:28:45 +02:00
Riccardo Elitropi ed4a9ec745 EgtMachKernel :
- primo prototipo per funzione Feed.
2023-03-31 17:08:38 +02:00
Riccardo Elitropi 25b940927e EgtMachKernel :
- ottimizzazioni offset per centroidi e medial Axis
- ottimizzazione percorsi di medial Axis ( raccordi con centroidi ).
2023-03-30 18:01:05 +02:00
Riccardo Elitropi 0911f167b1 EgtMachKernel :
- Ottimizzazioni numero Offset per spirali.
2023-03-29 18:12:06 +02:00
Riccardo Elitropi 766e6a208d EgtMachKernel :
- correzione circonferenze per percorsi sui centroidi.
2023-03-28 17:34:17 +02:00
Riccardo Elitropi 9b0b1fe9d4 EgtMachKernel :
- merge con master.
2023-03-28 17:24:54 +02:00
Riccardo Elitropi 4d676c1f3b Merge commit '025eea9c0f0d77443110bc2fc19c3a2e6ee89c45' into svuotature 2023-03-28 15:56:27 +02:00
Riccardo Elitropi 3d5398f877 EgtMachKernel :
- prima versione svuotature ( isole, intersezioni e proiezioni grezzo, entrate ).
2023-03-28 15:47:32 +02:00
Riccardo Elitropi 38d63633c2 EgtMachKernel :
- Svuotature con intersezioni grezzo ( temp ).
2023-02-16 14:53:53 +01:00
Riccardo Elitropi 14b433d206 Merge commit '15931dc3046a4928e6d943e812a7e893befd9daa' into svuotature 2023-02-16 14:50:49 +01:00
5 changed files with 12545 additions and 2738 deletions
+1 -1
View File
@@ -100,7 +100,7 @@
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EMK;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;I_AM_EMK;_VRONI;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<OpenMPSupport>false</OpenMPSupport>
<PrecompiledHeader>Use</PrecompiledHeader>
+290 -6
View File
@@ -22,6 +22,7 @@
#include "/EgtDev/Include/EGkAngle.h"
#include "/EgtDev/Include/EGkBBox1d.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkGeoVector3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkArcSpecial.h"
@@ -37,6 +38,7 @@
#include "/EgtDev/Include/EXeConst.h"
#include "/EgtDev/Include/EgtNumUtils.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include "/EgtDev/Include/EGkDistPointSurfTm.h"
using namespace std ;
@@ -564,6 +566,269 @@ Operation::GetAhPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, doubl
return false ;
}
//----------------------------------------------------------------------------
bool IsPointOnBox( BBox3d BBox, Point3d pt) {
if ( BBox.IsEmpty())
return false ;
int nCheck = 0 ;
if (( pt.x - BBox.GetMin().x) < EPS_SMALL)
++ nCheck ;
if (( pt.y - BBox.GetMin().y) < EPS_SMALL)
++ nCheck ;
if (( pt.z - BBox.GetMin().z) < EPS_SMALL)
++ nCheck ;
if (( pt.x - BBox.GetMax().x) < EPS_SMALL)
++ nCheck ;
if (( pt.y - BBox.GetMax().y) < EPS_SMALL)
++ nCheck ;
if (( pt.z - BBox.GetMax().z) < EPS_SMALL)
++ nCheck ;
if ( nCheck >= 2)
return true ;
return false ;
}
//----------------------------------------------------------------------------
bool
Operation::GetSignedDistFromStmRaw( int nPhase, const Point3d ptP, const Vector3d vtDir,
double& dDist, Vector3d& vtNorm) const
{
// controllo MachManager e database geometrico
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// la distanza negativa se il punto interno, positiva se esterno, 0 se sulla suprificie
const double RAY_LEN = 100000 ;
bool bIsInside = false ; // se punto interno ad un RawPart
bool bIsPointOn = false ; // se il punto stato trovato su una faccia
bool bIsOnLoop = false ; // se il punto su un loop
bool bIsOnBox = false ; // se il punto su un Box3D
bool bSkip = false ; // se salto controlli sui bordi
// vettore dei grezzi
ISURFTMPOVECTOR vSrfRawPart ;
int nRawId = m_pMchMgr->GetFirstRawPart() ;
while( nRawId != GDB_ID_NULL) {
// verifico che il grezzo compaia nella fase
if ( m_pMchMgr->VerifyRawPartPhase( nRawId, nPhase)) {
// recupero l'oggetto dal database con tale Id
int nRawSolidId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
const IGeoObj* pGObj = m_pGeomDB->GetGeoObj( nRawSolidId) ;
// recupero il frame in cui si trova
Frame3d frRaw ;
m_pGeomDB->GetGlobFrame( nRawSolidId, frRaw) ;
if ( pGObj == nullptr)
return false ;
// controllo che sia una Trimesh
if ( pGObj->GetType() == SRF_TRIMESH) {
// Trimesh della parte p-esima
PtrOwner<ISurfTriMesh> pStmRawPart( CloneSurfTriMesh( GetSurfTriMesh( pGObj))) ;
if ( IsNull( pStmRawPart))
return false ;
// porto la trimesh in globale
pStmRawPart->ToGlob( frRaw) ;
// salvo la superificie
vSrfRawPart.emplace_back( pStmRawPart->Clone()) ;
// distanza dalla parte p-esima
double dCurrDist = 0 ;
// recupero la distanza tra il punto e la parte p-esima
DistPointSurfTm distPtStm( ptP, *pStmRawPart) ;
if ( ! distPtStm.GetDist( dCurrDist))
return false ;
// controllo se il punto dentro al grezzo
if ( distPtStm.IsPointInside()) {
bIsInside = true ;
bSkip = true ;
}
if ( dCurrDist < EPS_SMALL && !bSkip) {
// controllo se sono su un Loop
POLYLINEVECTOR vP ;
bool bIsCurrOnLoop = false ;
for ( int i = 0 ; i < pStmRawPart->GetFacetCount() ; ++ i) {
pStmRawPart->GetFacetLoops( i, vP) ;
for ( int j = 0 ; j < ( int)vP.size() && !bIsCurrOnLoop ; ++ j) {
PtrOwner<ICurveComposite> pCrvEdge( CreateCurveComposite()) ;
if ( IsNull( pCrvEdge))
return false ;
pCrvEdge->FromPolyLine( vP[j]) ;
if ( !pCrvEdge->IsValid() || pCrvEdge->GetCurveCount() == 0)
return false ;
if ( pCrvEdge->IsPointOn( ptP))
bIsCurrOnLoop = true ;
}
}
// se il punto sta sulla curva...
if ( bIsCurrOnLoop) {
if ( bIsOnLoop) { // se ho gi trovato una curva che contiene il punto ...
BBox3d bCurrBox ;
if ( ! pStmRawPart->GetBBox( GLOB_FRM, bCurrBox))
return false ;
if ( IsPointOnBox( bCurrBox, ptP)) { // se il punto sta sul Box
if ( bIsOnBox) { // se il punto stava gi su un altro Box
bIsInside = false ;
bSkip = true ;
}
else // se il punto non stava gi su un box
bIsInside = true ;
bSkip = true ;
}
else // se il punto non sta sul box
bIsInside = true ;
}
else { // se la prima curva a contenere il punto
bIsPointOn = true ;
// controllo se il punto sta sulla faccia del box del grezzo corrente
BBox3d bCurrBox ;
if ( ! pStmRawPart->GetBBox( GLOB_FRM, bCurrBox))
return false ;
// controllo se il punto sta su una faccia del box
if ( IsPointOnBox( bCurrBox, ptP))
bIsOnBox = true ;
}
}
// se il punto non sta sulla curva ...
else {
if ( bIsPointOn) {
bIsInside = true ;
bSkip = true ;
}
else
bIsPointOn = true ;
}
}
}
}
// passo al grezzo successivo
nRawId = m_pMchMgr->GetNextRawPart( nRawId) ;
}
if ( bSkip) {
bIsPointOn = false ;
bIsOnLoop = false ;
bIsOnBox = false ;
}
double dCurrDist = bIsInside ? -INFINITO : INFINITO ; // distanza attuale
dDist = dCurrDist ;
double dTmpCurrDist = 0 ;
for ( int i = 0 ; i < int( vSrfRawPart.size()) ; ++ i) {
ILSIVECTOR vInfo ; // info
Triangle3d Tria ; // triangolo della trimesh intersecato
// recupero la distanza tra il punto e la parte p-esima
if ( IntersLineSurfTm( ptP, vtDir, RAY_LEN, *vSrfRawPart[i], vInfo)) {
if ( vInfo.empty())
continue ;
DistPointSurfTm distPtStm( ptP, *vSrfRawPart[i]) ;
if( ! distPtStm.GetDist( dTmpCurrDist))
return false ;
if (( bIsPointOn && !bIsInside)) { // punto sulla superificie totale dei grezzi
// se il grezzo quello giusto ...
if ( dTmpCurrDist < EPS_SMALL) {
dDist = 0 ;
vSrfRawPart[i]->GetTriangle( vInfo[0].nT, Tria) ;
vtNorm = Tria.GetN() ;
return true ;
}
else { // se sono su un altro ... ( prima o poi ritorno al controllo sopra ...)
}
}
else if (( int)vInfo.size() == 1 && bIsInside) {
if ( distPtStm.IsPointInside() || dTmpCurrDist < EPS_SMALL) {
// se punto interno alla grezzo corrente
double dUCurr = vInfo[0].dU ;
// se direzione || ad una faccia faccia, ma punto non interno al grezzo corrente
if ( vInfo[0].nILTT == ILTT_SEGM || vInfo[0].nILTT == ILTT_EDGE)
double dUCurr = - vInfo[0].dU2 ;
if ( dUCurr > dCurrDist) {
dCurrDist = dUCurr ;
vSrfRawPart[i]->GetTriangle( vInfo[0].nT, Tria) ;
vtNorm = Tria.GetN() ;
}
}
else { // se interno ma non al grezzo corrente ( prima o poi ritono al controllo sopra )
}
}
else if (( int)vInfo.size() > 1) { // se la linea trapassa il grezzo corrente (entra ed esce)...
if ( bIsInside) { // e il punto interno ( quindi non al grezzo corrente )
double dUCurr = 0 ;
int nT ;
for ( int j = 0 ; j < ( int)vInfo.size() ; ++ j) {
IntLinStmInfo Info = vInfo[j] ;
if ( Info.nILTT == ILTT_SEGM || Info.nILTT == ILTT_SEGM_ON_EDGE) {
// se prosegue un tratto precedente, non devo controllare sia minimo
dUCurr = Info.dU2 ;
nT = Info.nT ;
//break ; ???????
}
// se altrimenti intersezione puntuale, verifico che esca (coseno >= 0)
else if ( Info.dCosDN > - COS_ORTO_ANG_ZERO) {
dUCurr = Info.dU ;
nT = Info.nT ;
break ;
}
// se altrimenti la prima ed entra ( non la considero ...)
else {
}
}
if ( dUCurr > dCurrDist) { // tengo la distanza pi grande
dCurrDist = dUCurr ;
vSrfRawPart[i]->GetTriangle( nT, Tria) ;
vtNorm = Tria.GetN() ;
}
}
else { // se invece un punto esterno a tutto
if ( vInfo[0].dU < dCurrDist) { // tengo la distanza ( positiva) pi grande
dCurrDist = vInfo[0].dU ;
vSrfRawPart[i]->GetTriangle( vInfo[0].nT, Tria) ;
vtNorm = Tria.GetN() ;
}
}
}
}
}
if ( dCurrDist > INFINITO - 1 && ! bIsInside) // non ho intersecato mai nessun grezzo
dDist = INFINITO ;
if ( dCurrDist < -INFINITO + 1 && bIsInside) // sono interno ma non interseco un grezzo ... errore
return false ;
dDist = bIsInside ? - dCurrDist : dCurrDist ;
return true ;
}
//----------------------------------------------------------------------------
bool
Operation::GetUhPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool, double dToolRad, double dToolRadForElev,
@@ -824,13 +1089,25 @@ Operation::GetDistanceFromRawBottom( int nPhase, int nPathId, double dToler, dou
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// recupero distanza da fondo dei grezzi interessati o no dal percorso
dRbDist = 0 ;
dAllRbDist = 0 ;
// ricerco grezzi interessati dal percorso
BBox3d b3Compo ;
if ( ! m_pGeomDB->GetGlobalBBox( nPathId, b3Compo))
return false ;
b3Compo.Expand( dToler, dToler, 0) ;
return GetDistanceFromRawBottom( nPhase, b3Compo, dToler, dRbDist, dAllRbDist) ;
}
//----------------------------------------------------------------------------
bool
Operation::GetDistanceFromRawBottom( int nPhase, BBox3d& b3Test, double dToler, double& dRbDist, double& dAllRbDist) const
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// recupero distanza da fondo dei grezzi interessati o no dal percorso
dRbDist = 0 ;
dAllRbDist = 0 ;
b3Test.Expand( dToler, dToler, 0) ;
int nRawId = m_pMchMgr->GetFirstRawPart() ;
while ( nRawId != GDB_ID_NULL) {
// verifico che il grezzo compaia nella fase
@@ -838,8 +1115,8 @@ Operation::GetDistanceFromRawBottom( int nPhase, int nPathId, double dToler, dou
BBox3d b3Raw ;
int nRawSolidId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
if ( m_pGeomDB->GetGlobalBBox( nRawSolidId, b3Raw)) {
double dDist = b3Compo.GetMax().z - b3Raw.GetMin().z ;
if ( b3Compo.OverlapsXY( b3Raw) && dDist > dRbDist)
double dDist = b3Test.GetMax().z - b3Raw.GetMin().z ;
if ( b3Test.OverlapsXY( b3Raw) && dDist > dRbDist)
dRbDist = dDist ;
if ( dDist > dAllRbDist)
dAllRbDist = dDist ;
@@ -1142,6 +1419,9 @@ Operation::ApproxWithArcsIfUseful( ICurveComposite* pCompo, bool bCareTempProp)
pCompo->GetExtrusion( vtExtr) ;
double dThick = 0 ;
pCompo->GetThickness( dThick) ;
// recupero le propriet temporanee
int nProp0 = pCompo->GetTempProp( 0) ;
int nProp1 = pCompo->GetTempProp( 1) ;
// verifico se ci sono tante linee corte
int nSmallLineCnt = 0 ;
const ICurve* pCrv = pCompo->GetFirstCurve() ;
@@ -1237,6 +1517,10 @@ Operation::ApproxWithArcsIfUseful( ICurveComposite* pCompo, bool bCareTempProp)
pCompo->SetExtrusion( vtExtr) ;
pCompo->SetThickness( dThick) ;
// riassegno le propriet temporanee
pCompo->SetTempProp( nProp0, 0) ;
pCompo->SetTempProp( nProp1, 1) ;
return true ;
}
+4
View File
@@ -20,6 +20,7 @@
#include "/EgtDev/Include/EGkUserObj.h"
#include "/EgtDev/Include/EGkSelection.h"
#include "/EgtDev/Include/EgtNumCollection.h"
#include "/EgtDev/Include/EGkStmStandard.h"
class MachMgr ;
class CamData ;
@@ -89,6 +90,8 @@ class Operation : public IUserObj
double dToolLen, bool bIsSaw, double dSafeZ, const Vector3d& vtDir, double& dElev) const ;
bool GetUhPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool, double dToolRad, double dToolRadForElev,
double dToolLen, bool bIsSaw, double dSafeZ, const Vector3d& vtDir, double& dElev) const ;
bool GetSignedDistFromStmRaw( int nPhase, const Point3d ptP, const Vector3d vtDir,
double& dDist, Vector3d& vtNorm) const ;
bool GetDistanceFromRawSide( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist) const ;
bool GetMinDistanceFromRawSide( int nPhase, const Point3d& ptP, double dExpand,
double& dDist, Vector3d& vtDir) const ;
@@ -99,6 +102,7 @@ class Operation : public IUserObj
{ double dDummy ;
return GetDistanceFromRawBottom( nPhase, nPathId, dToler, dRbDist, dDummy) ; }
bool GetDistanceFromRawBottom( int nPhase, int nPathId, double dToler, double& dRbDist, double& dAllRbDist) const ;
bool GetDistanceFromRawBottom( int nPhase, BBox3d& b3Test, double dToler, double& dRbDist, double& dAllRbDist) const ;
bool GetRawGlobBox( int nPhase, int nPathId, double dToler, BBox3d& b3Raw) const ;
bool GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3d& b3Raw) const ;
bool GetCurrRawsGlobBox( BBox3d& b3Raw) const ;
+12013 -2673
View File
File diff suppressed because it is too large Load Diff
+237 -58
View File
@@ -19,6 +19,9 @@
#include "/EgtDev/Include/EGkCurveComposite.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EgtNumUtils.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkCurveArc.h"
//----------------------------------------------------------------------------
class Pocketing : public Machining
@@ -66,53 +69,219 @@ class Pocketing : public Machining
Pocketing( void) ;
private :
// Debug functions ----
void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf = true, Color Col = Color( 0., 0., 1., 0.45),
bool bAlphaCoverage = false) ;
void DrawSimpleSurf( const ISurfFlatRegion* pSrf, Color Col = Color( 0., 0., 1., 0.45)) ;
void DrawVectorCurves( const ICRVCOMPOPOVECTOR& vCrv) ;
void DrawSimpleCurve( const ICurveComposite* pCrv, bool bUniform = false, Color Col = WHITE) ;
void DrawSimpleTriMesh( const ISurfTriMesh* pStm, Color Col = Color( 0., 0., 0., 1.)) ;
void DrawSimplePoint( const Point3d& pT, Color Col = WHITE) ;
void DrawSimpleVector( const Vector3d& vt, Point3d ptPos = ORIG, Color Col = WHITE) ;
// --------------------
bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ;
bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ;
bool GetCurvesAndPartialVolume( SelData Id, ICURVEPLIST& lstPC, ISurfTriMesh* pStmTmp, Vector3d& vtN) ;
bool GetForcedClosed( void) ;
bool SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen = nullptr) ;
bool ResetCurveAllTempProp( ICurve* pCurve) ;
bool Chain( int nGrpDestId) ;
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
bool CalcRegionElevation( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dRad, double dLen, double& dElev) const ;
bool VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& vtTool) ;
bool GeneratePocketingPv( int nPathId, const ICurveComposite* pCompo) ;
bool AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, int nPathId) ;
bool CalcZigZag( const ICurveComposite* pOffs, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, double dSafeZ,
Frame3d& frPocket, bool& bOptimizedZigZag, ICRVCOMPOPOVECTOR& vpCrvs, double& dOffs) ;
bool GeneratePocketingPv( int nPathId, const ISurfTriMesh* pStm_PartVolume) ;
bool CheckSimpleOverlap( const ICurve* pCrv, const ICurveComposite* pCrvOri, int& nStat, double dToll) ;
bool CalcDepth( const int nId, const Vector3d& vtExtr, double dThick, double& dDepth) ;
bool ChainCurveArray( ICURVEPOVECTOR& vpCrvs, ICRVCOMPOPOVECTOR& vCrvCompo) ;
bool CreateStmForIntersection( ISurfTriMesh* pStm, ICRVCOMPOPOVECTOR& vCrvCompo, const Vector3d& vtN) ;
bool CalcOffsExtensionsForCurves( const ICurveComposite* pCrvCompo, const Vector3d& vtN, double& dExt) ;
bool GetExtendedLoopToFitStmVolume( ICurveComposite* pCrvLoop, const double& dExt, const Vector3d& vtN) ;
bool GetCurrentPart( const PNTVECTOR& vPtInside, ISurfTriMesh* pStmPart) ;
bool SetPocketingVolume( const PNTVECTOR& vPtInside, ISurfTriMesh* pStm) ;
bool AdjustPocketingSideForVolumePart( ISurfTriMesh* pStmVolPart, const Vector3d& vtTool) ;
bool SewingMissingFacesOnPlanes( ISurfTriMesh* pStm, const Plane3d& plPlane) ;
bool ChainBisectors( ICURVEPOVECTOR& vpCrvs, ICRVCOMPOPOVECTOR& vCrvCompo) ;
bool ChooseBestBisectorPath( ICRVCOMPOPOVECTOR& vCrvCompo, const Point3d& ptS,
const Point3d& ptE, ICurveComposite* pCrvPath) ;
bool GetSpecialElevation( const ISurfFlatRegion* pSfr, const ICurveLine* pLine, const bool bInVsOut,
double& dElev) ;
bool GetDangerSfrForSideStep( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pStm_Part, const double dExtraLenInOut,
ISurfFlatRegion* pSfrDanger) ;
bool AdjustTrapezoidSpiralLeadInLeadOutForSideAngle( ICurveComposite* pMCrv, const double dExtraLenInOut,
const int nOutsideRaw, const Vector3d& vtN) ;
bool GetRaw( ISurfTriMesh* pStmRaw) ;
bool SliceVolume( const ISurfTriMesh* pStmVol, const ISurfTriMesh* pStm_Part, const ISurfTriMesh* pSt_Raw,
ISURFFRPOVECTOR& vSrfSliced, ISURFFRPOVECTOR& vSfrLimit, std::vector<ICRVCOMPOPOVECTOR>& vCrvOEWithFlags,
BOOLVECTOR& vbChangedPrec, VCT3DVECTOR& vVtTrasl, int& nStep, const Vector3d vtTool,
const double dElev, const double dDepth, const double dStep, double& dExtraLenInOut) ;
bool TranslateVolumeFaces( const double dTrasl, Frame3d& frElevation, ISurfTriMesh* pStmVol, ISurfTriMesh* pStm_Part,
ISurfTriMesh* pStmRaw) ;
bool CalcExtraSteps( const ISurfTriMesh* pStmVol, VCT3DVECTOR& vVtTrasl, int& nStep, const double dElev,
const double dDepth, const double dStep, INTVECTOR& vIndExtraSteps,
ISURFTMPOVECTOR& vStmES_Edges_OC) ;
bool CutVolumeByPlane( const ISurfTriMesh* pStmVol, const ISurfTriMesh* pStm_Part, const Vector3d& vtTrasl,
const bool bIsExtraStep, ISurfFlatRegion* pSfrResult) ;
bool CheckSideAngleForVolume( const ISurfTriMesh* pStmVol_Sliced, const ISurfTriMesh* pStm_Part,
ISurfFlatRegion* pSfr_Projection, double& dExtraLenInOut, ISurfFlatRegion* pSfr) ;
bool ProjectVolume( const ISurfTriMesh* pStmVol, const ISurfTriMesh* pStm_Part, const Vector3d& vtTrasl,
const Vector3d& vtTraslPrec, const bool bIsExtraStep, ISurfFlatRegion* pSfrOpenProjPrec,
ISurfFlatRegion* pSfr, const bool bOneStep, double& dExtraLenInOut) ;
bool ChooseCloseOrOpenEdge( ISurfFlatRegion* pSfr, const ISurfTriMesh* pStm, const bool bOnIsClosed = false) ;
bool SimplifySfrLoops( ISurfFlatRegion* pSfr) ;
bool GetCurvesForOptimizedPocketing( ISurfFlatRegion* pSfr, ICRVCOMPOPOVECTOR& vCrvOEWithFlags) ;
bool ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, const ISurfFlatRegion* pSfrLimit) ;
bool AdjustContourWithOpenEdges( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vCrvIsl, const double dDiam,
const double dOffR, const double dStep, const ISurfFlatRegion* pSfrLimit) ;
bool AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvIsland,
const double dParS, const double dParE, const Vector3d& vtTanS,
const Vector3d& vtTanE, const double dRad, const double dDiamJ,
const ISurfFlatRegion* pSfrLimit, ICurveComposite* pCrvBorder) ;
bool GetProjectionOfStmToNotPocket( const ISurfTriMesh* pStm, const ISurfTriMesh* pStmVol,
const Vector3d& vtTrasl, ISurfFlatRegion* pSfrProj) ;
bool CreateSurfFrIncidence( const ICurveComposite* pCrv, const Vector3d& vtTanS, const Vector3d& vtTaneE,
const double dRad, ISurfFlatRegion* pSfrInc) ;
bool GetNewSfrByAnotherPocketing( ISurfFlatRegion* pSfrPock, const ISurfFlatRegion* pSfrNoExtendedByOpenEdges,
const ISurfTriMesh* pStmVol, const ISurfTriMesh* pStm_Part,
const ISurfFlatRegion* pSfrLimit) ;
bool GetHomogeneousParts( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool OptimizedSpiralCirle( const ICurveComposite* pCrvCompo, const double dToll, double& dRad,
Point3d& ptC, bool& bIsCirlce) ;
bool ModifyCurveToSmoothed( ICurveComposite* pCrv, double dRightLen, double dLeftLen, bool bAsParam) ;
bool OrderCurvesByLastPntOfPath( ICRVCOMPOPOVECTOR& vCrv, Point3d ptEnd, PNTVECTOR& vPtStart,
VCT3DVECTOR& vVtOut, BOOLVECTOR& vbMidOut) ;
bool SetPtStartForPath( ICurveComposite* pCrv0, const ISurfFlatRegion* pSrfToWork, const Point3d& ptEndPrec,
const Frame3d& frPocket, Point3d& ptStart, Vector3d& vtMidOut, bool& bMidOut,
int nOffs = 0, ICurveComposite* pCrvOrig = nullptr) ;
bool SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& frPocket,
ICurveComposite* pCrvCompo, Point3d& ptStart, Vector3d& vtMidOut,
bool& bMidOut) ;
bool GetOptCrvIndex( const std::vector<ICRVCOMPOPOVECTOR>& vCrvOEWithFlags, int nStep, ISurfFlatRegion* pSrfChunkFinal,
int& nIndex) ;
bool GetTrapezoidFromShape( const ICurveComposite* pCrvCompo, ICurveComposite* pCrvTrap, Frame3d& frTrap,
double& dPocketSize, int& nBase, int& nSecondBase) ;
bool GetBoxCrvOptTrap( const int nCrv, const ICurveComposite* pCrvCompo, const double dDiam, int& nType, ICurveComposite* pCrvBox) ;
bool CheckTrapezoidClosedEdgePosition( const ICurveComposite* pCrvCompo, const int nCrvInd, const double dDimBoxY,
INTVECTOR& vIndClosedSides, bool& bOk,
ICurveComposite* pCrvTrap) ;
bool CheckSecondBaseTrapezoid( const ICurveComposite* pCrvCompo, const int nCrvInd, int& nSecondBase) ;
bool PreparareTrapezoidTwoBases( const ICurveComposite* pCrvCompo, const double dDiam, const int nType, int& nBase,
int& nSecondBase, bool& bOk, ICurveComposite* pCrvTrap) ;
bool GetSfrByStm( const ISurfTriMesh* pStm, ISurfFlatRegion* pSfr, const Plane3d plPock, const Vector3d& vtExtr,
const double dThick, double dToll = 5 * EPS_SMALL) ;
bool ProjectStmOnPlane( const ISurfTriMesh* pStmAbove, const Plane3d plPock, ISurfFlatRegion* pSfrProj) ;
bool GetCoeffLinArc( const ICurveArc* pArc, double dDiam, double& dSubArc) ;
bool GetParamOnOpenSide( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvIsl,
const Frame3d& frPocket, Point3d& ptMid, Vector3d& vtMidOut) ;
bool AdjustContourStart( ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvIsl, bool bOrder = false,
Point3d ptRef = P_INVALID) ;
bool GetParamForPtStartOnEdge( const ICurve* pCrv, const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvIsl,
double& dPar) ;
bool CheckForRemovingIsland( const ICurveComposite* pCrvIslandBorder, double dOffs, bool bRemove) ;
bool AddZigZag( ISURFFRPOVECTOR& vSfr, const std::vector<ICRVCOMPOPOVECTOR>& vCrvOrig, BOOLVECTOR& vbChangedPrec,
VCT3DVECTOR& vVtTrasl, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dMaxElev, double dOkStep, bool bSplitArcs) ;
bool CalcZigZag( const ISurfFlatRegion* pSrfZigZag, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, ICurveComposite* pCrvLink) ;
bool OptimizedZigZag( ISurfFlatRegion* pSrf, const Vector3d & vtTool, double dDepth, double dSafeZ,
Frame3d& frPocket, ICurveComposite* pCrvOrig, bool& bOptimizedZigZag,
ICRVCOMPOPOVECTOR& vpCrvs, ICRVCOMPOPOVECTOR& vCrvIslMergeBorders, double& dOffs,
int& nClosedSides, bool& bTwoOpposite) ;
bool ZigZagOptimizedNoClosedEdges( ICurveComposite* pCrvPocket, bool& bOptimizedZigZag, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClosedId, bool& bOptimizedZigZag, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds, bool& bOptimizedZigZag,
bool& bOpposite, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClosedId, bool& bOptimizedZigZag,
Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds,
bool& bOptimizedZigZag, bool& bOpposite, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds, bool& bOptimizedZigZag,
bool& bOpposite, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedComputeOffset( ICurveComposite* pCrvPocket, const Vector3d& vtMainDir, int nOffsettedEdgesOnY,
const INTVECTOR& vnClosedIds, double& dOffs) ;
bool& bOpposite, Vector3d& vtDir, double& dOffs) ;
bool ZigZagOptimizedComputeOffset( ICurveComposite* pCrvPocket, const Vector3d& vtMainDir, int nOffsettedEdgesOnY,
const INTVECTOR& vnClosedIds, double& dOffs) ;
bool CutCurveWithLine( ICurveComposite* pCrvA, const ICurveLine* pCrvB) ;
bool AddOneWay( const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dOkStep, bool bSplitArcs) ;
bool AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bMidOpen,
const Point3d& ptMidOpen, const Vector3d& vtMidOut, int nPathId) ;
bool AddSpiralOut( const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, int nPathId) ;
bool CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
ICurveComposite* pMCrv, ICurveComposite* pRCrv, int nPathId, bool& bOptimizedTrap) ;
bool CalcBoundedLink( const Point3d& ptStart, const Point3d& ptEnd, const ICurve* pCrvBound,
bool AddOneWay( ISURFFRPOVECTOR& vSfr, const std::vector<ICRVCOMPOPOVECTOR>& vCrvOrig, BOOLVECTOR& vbChangedPrec,
VCT3DVECTOR& vVtTrasl, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dMaxElev, double dOkStep, bool bSplitArcs) ;
bool AddSpiralIn( ISURFFRPOVECTOR& vSfr, const std::vector<ICRVCOMPOPOVECTOR>& vCrvOrig, BOOLVECTOR& vbChangedPrec,
VCT3DVECTOR& vVtTrasl, ISURFFRPOVECTOR& vSrfLimit, const Vector3d& vtTool, const Vector3d& vtExtr,
const double dDepth, const double dElev, const double dMaxElev, const double dOkStep,
const bool bSplitArcs, const double dExtraLenInOut) ;
bool AddSpiralOut( ISURFFRPOVECTOR& vSfr, const std::vector<ICRVCOMPOPOVECTOR>& vCrvOrig, BOOLVECTOR& vbChangedPrec,
VCT3DVECTOR& vVtTrasl, ISURFFRPOVECTOR& vSrfLimit, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dMaxElev, double dOkStep, bool bSplitArcs,
const double dExtraLenInOut) ;
bool CalcSpiral( const ISurfFlatRegion* pSrfPock, int& nReg, Point3d& ptStart, const Point3d& ptEndPrec, Vector3d& vtMidOut , bool& bMidOut,
bool bSplitArcs,ICurveComposite* pMCrv, ICurveComposite* pRCrv, ICurveComposite* pCrvOEWithFlags,
bool vbChangedPrec, bool& bOptimizedTrap) ;
bool CheckIfOffsetIsNecessary( const ICurveComposite* pCrvOffs, const double dOffs, const int nIter,
const int nOffsCount, const Vector3d& vtN, bool& bInsert) ;
bool CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks,
const ICRVCOMPOPOVECTOR& vOffsClosedCurves, const ICRVCOMPOPOVECTOR& vOffsFirstCurve) ;
bool GetUnclearedRegion( ICRVCOMPOPOVECTOR& vFirstOffs, ICRVCOMPOPOVECTOR& vCrvs, ICURVEPOVECTOR& vLinks,
const ICurveComposite* pCrv_orig, ISurfFlatRegion* pSrfToCut) ;
bool GetDynamicClearedRegion( ISurfFlatRegion* pSrfPrec, const ICurveComposite* pCrv) ;
bool RemoveFirstLoopFromSfr( ISurfFlatRegion* pSrfOrig) ;
bool RemoveExtraParts( ISurfFlatRegion* pSrfToCut, ICRVCOMPOPOVECTOR& vOffs, ICRVCOMPOPOVECTOR& vOffsClosedCurves,
ICRVCOMPOPOVECTOR& vOffsFirstCurve, ICURVEPOVECTOR& vLinks) ;
bool RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECTOR& vOffsFirstCurve,
int& nOptFlag, Point3d& ptCentroid, ICurveComposite* pCrvPath) ;
bool CutOffsetToClosestPoint( ICRVCOMPOPOVECTOR& vCurves, const Point3d& ptFocus, ICurveComposite* pCrv1,
ICurveComposite* pCrv2, int& nIndex) ;
bool CutLinkToClosestPoint( ICURVEPOVECTOR& vCurves, ICRVCOMPOPOVECTOR& vOffs, const Point3d& ptFocus,
ICurveComposite* pCrv1, ICurveComposite* pCrv2, bool& bFound, int& nIndex) ;
bool GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2, Point3d& ptC, bool bCir,
ICRVCOMPOPOVECTOR& VFirstOff, ICurveComposite* pCrvNewCurve) ;
bool GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2, ICurveComposite* pCrvPath,
ICRVCOMPOPOVECTOR& VFirstOff, ICRVCOMPOPOVECTOR& VoffsCl, ICurveComposite* pCrvNewCurve) ;
bool ManageSmoothAndAutoInters( ICurveComposite* pCrv, ICurveComposite* pCrvPath, ICurveComposite* pPath1,
ICurveComposite* pPath2, ICRVCOMPOPOVECTOR& vOffsCL) ;
bool GetCurveWeightInfo( const ICurveComposite* pCrvCompo, double dMaxLen, double& dToTRot, int& nSmallArcs, int& nSmallLines) ;
bool ChoosePath( const ICurveComposite* pCrv1, const ICurveComposite* pCrv2, int nP, double dPerP, double dMaxLen, int& nC) ;
bool CalcBoundedLink( const Point3d& ptStart, const Point3d& ptEnd, const ICRVCOMPOPOVECTOR& vOffIslands,
ICurveComposite* pCrvLink) ;
bool CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd,
const Vector3d& vtEnd, const double dParMeet,
const ICRVCOMPOPOVECTOR& vOffIslands, ICurveComposite* pCrvLink) ;
bool ModifyBiArc( ICurve* pCrvBiArc, double dCutToll, ICurveComposite* pNewCrv) ;
bool CutCurveByOffsets( ICurveComposite* pCurve, ICRVCOMPOPOVECTOR& vOffs) ;
bool CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOMPOPOVECTOR& vOffs,
const ICRVCOMPOPOVECTOR& vOffIslands, ICurveComposite* pCrvLink,
double dLenPercS = 0.01, double dLenPercE = 0.01, int nMaxIter = 2) ;
bool CalcBoundedLinkWithBiArcs( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd, const Vector3d& vtEnd,
const ICurve* pCrvBound, ICurveComposite* pCrvLink) ;
bool CalcCircleSpiral( const Point3d& ptCen, const Vector3d& vtN, double dOutRad, double dIntRad,
bool bSplitArcs, ICurveComposite* pMCrv, ICurveComposite* pRCrv) ;
bool CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtDir, double dPocketSize,
ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) ;
bool CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Frame3d& frTrap, double dPocketSize, int nBase,
int nSecondBase, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) ;
bool CalcSingleOffsetSpiral( const ISurfFlatRegion* pSfr, ICurveComposite* pOffs,
Point3d& ptStart, Vector3d& vtMidOut, bool& bMidOut) ;
bool CalcTrapezoidSpiralLocalFrame( ICurveComposite * pCrvPocket, const Vector3d& vtDir, Frame3d& frLoc) ;
bool CalcTrapezoidSpiralXCoord( const ICurveComposite * pCrvPocket, bool bStart, double dYCoord, double& dXCoord, double dPocketSize) ;
bool AdjustTrapezoidSpiralForAngles( ICurveComposite * pMCrv, const ICurveComposite * pCrvPocket, bool bStart) ;
bool SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveComposite* pCrvPocket) ;
bool CalcTrapezoidSpiralXCoord( const ICurveComposite * pCrvPocket, int nBase,int nSecondBase,
bool bStart, double dYCoord, double& dXCoord, double dPocketSize) ;
bool AdjustTrapezoidSpiralForAngles( ICurveComposite * pMCrv, const ICurveComposite * pCrvPocket,
bool bStart) ;
bool SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEven, const ICurveComposite* pCrvPocket) ;
bool AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite * pCompo, ICurveComposite * pRCrv, const Vector3d& vtTool,
double dDepth, int& nOutsideRaw) ;
bool ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite * pCompo, const Vector3d& vtMainDir, bool bLeadIn, const Vector3d& vtTool, double dDepth, bool& bIsOutsideRaw) ;
bool ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite * pCompo, const Vector3d& vtMainDir, bool bLeadIn, const Vector3d& vtTool, double dDepth,
bool& bIsOutsideRaw) ;
bool GetSignedDistFromRealDirection( const Point3d ptP, const Vector3d vtDir, double& dDist, Vector3d& vtNorm) ;
double GetMinFeed( void ) const { return GetFeed() * GetSideStep() / m_TParams.m_dDiam ; }
double GetMaxFeed( void ) const { return GetFeed() ; }
bool GetFeedForParam( double& dPar, double& dFeed) ;
bool AssignDefaultFeed( ICurveComposite* pCrv) ;
bool DrawColoredCrvForFeedTest( ICurve* pCurve, double dFeed) ;
bool AssignFeedForOpenEdge( ICurveComposite* pCrv, const ICurveComposite* pCrvOF_ori) ;
bool AssignFeedForLineInOut( ICurveComposite* pCrv, const bool bIsIn) ;
bool AssignFeedOnCorners( ICurveComposite* pCrv, const ICurveComposite* pCrv_orig, const double dLenToll) ;
bool AssignFeedForEdgeCleaning( ICurveComposite *pCrv, const ICRVCOMPOPOVECTOR& vCrvOF_orig, int nInd = -1) ;
bool AssignFeedZigZagOneWay( ICurveComposite* pCompoLine, const bool bIsLink, const ICURVEPOVECTOR& vLAbove,
const ICURVEPOVECTOR& vLUnder, const ICRVCOMPOPOVECTOR& vAddedLinks) ;
bool AssignFeedSpiral( ICurveComposite* pCrv, const ISurfFlatRegion* pSrfRemoved_offs, const bool bIsLink,
const ICRVCOMPOPOVECTOR& vLinks_done, const ICurveComposite* pCrv_orig, double dToll) ;
bool AssignFeedSpiralOpt( const int nOptType, ICurveComposite* pCrv) ;
bool AssignFeedCrvOnUnclearedRegions( ICurveComposite* pCrv) ;
bool AssignFeedForReturnPath( ICurveComposite* pCrv) ;
bool VerifyLeadInHelix( ISurfFlatRegion* pSrfChunk, const Point3d& ptCen, double dRad) const ;
bool VerifyLeadInZigZag( ISurfFlatRegion* pSrfChunk, const Point3d& ptPa, const Point3d& ptPb) const ;
bool ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool bSplitArcs) ;
bool AddEpicycles( ICurveComposite * pCompo, ICurveComposite * pCrv, ICurveComposite * pCrvBound = nullptr) ;
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
@@ -125,23 +294,23 @@ class Pocketing : public Machining
double dElev, double dAppr) ;
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
const ICurveComposite* pRCrv, Point3d& ptP1) const ;
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
const ICurveComposite* pCompo, const ICurveComposite* pRCrv, bool bAtLeft, bool bSplitArcs,
bool AddLeadIn( const ICurveComposite* pCrvCompo, const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart,
const Vector3d& vtEnd, const Vector3d& vtN, ISurfFlatRegion* pSrfChunk,
const ICurveComposite* pRCrv, bool bAtLeft, bool bSplitArcs,
bool bNoneForced = false, bool bSkipControl = false) ;
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN,
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced,
Point3d& ptP1, double& dElev) ;
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced, Point3d& ptP1,
double& dElev, bool bRecalcElev = true) ;
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN,
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced,
Point3d& ptP1, double& dElev, bool& bOppositeHome) ;
Point3d& ptP1, double& dElev, bool& bOppositeHome, bool bRecalcElev = true) ;
bool SetLeadInPointStart( const Point3d& ptCurr, const Vector3d vtN,
const bool& bAtLeft, Vector3d& vtStart, Point3d& ptDest) ;
bool CalcLinkOnStep( const Point3d& ptS, const Point3d& ptE, const ISurfFlatRegion* pSfr,
const ISurfFlatRegion* pSfrLimit, ICurveComposite* pCrvStepLink) ;
double GetRadiusForStartEndElevation( void) const ;
bool GetForcedClosed( void) ;
bool GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOut) ;
bool AdjustContourWithOpenEdges( ICurveComposite* pCompo) ;
bool AdjustContourStart( ICurveComposite* pCompo) ;
bool VerifyLeadInHelix( const ICurveComposite* pCompo, const Point3d& ptCen, double dRad) const ;
bool VerifyLeadInZigZag( const ICurveComposite* pCompo, const Point3d& ptPa, const Point3d& ptPb) const ;
bool CalcDistanceFromRawSurface( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist, Vector3d& vtNorm) ;
// ===================================================================
private :
double GetSpeed( void) const
@@ -177,21 +346,31 @@ class Pocketing : public Machining
return m_Params.m_nLeadOutType ; }
private :
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
PocketingData m_Params ; // parametri lavorazione
ToolData m_TParams ; // parametri utensile
double m_dTHoldBase ; // posizione base del porta-utensile
double m_dTHoldLen ; // lunghezza del porta-utensile
double m_dTHoldDiam ; // diametro del porta-utensile
double m_dMaxHelixRad ; // raggio massimo attacco ad elica nel caso di cerchi
int m_nStatus ; // stato di aggiornamento della lavorazione
int m_nPockets ; // numero di percorsi di svuotatura generati
bool m_bTiltingTab ; // flag utilizzo tavola basculante
Vector3d m_vtTiltingAx ; // versore direzione eventuale asse basculante
bool m_bAboveHead ; // flag utilizzo testa da sopra
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
bool m_bOpenOutRaw ; // flag forzatura lati aperti sempre fuori dal grezzo
double m_dOpenMinSafe ; // minima distanza di sicurezza di attacco su lato aperto
SELVECTOR m_vId ; // identificativi entit geometriche da lavorare
PocketingData m_Params ; // parametri lavorazione
ToolData m_TParams ; // parametri utensile
double m_dTHoldBase ; // posizione base del porta-utensile
double m_dTHoldLen ; // lunghezza del porta-utensile
double m_dTHoldDiam ; // diametro del porta-utensile
double m_dMaxHelixRad ; // raggio massimo attacco ad elica nel caso di cerchi
int m_nStatus ; // stato di aggiornamento della lavorazione
int m_nPockets ; // numero di percorsi di svuotatura generati
bool m_bTiltingTab ; // flag utilizzo tavola basculante
Vector3d m_vtTiltingAx ; // versore direzione eventuale asse basculante
bool m_bAboveHead ; // flag utilizzo testa da sopra
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
bool m_bOpenOutRaw ; // flag forzatura lati aperti sempre fuori dal grezzo
double m_dOpenMinSafe ; // minima distanza di sicurezza di attacco su lato aperto
bool m_bOptOffset ; // flag per ottimizzazione numero di Offset necessari
bool m_bOptOffsetCM ; // flag per ottimizzazione numero di Offset necessari con centroidi e medial Axis
bool m_bAssignFeed ; // flag per controllo della Feed
double m_dDiam_Prec ; // diametro utensile per precedente svuotatura
double m_dOffsetR_Prec ; // offset radiale della svuotatura precedente
double m_dSideStep_Prec ; // side Step della svuotatura precedente
double m_dLen_Prec ; // Lunghezza del tool precedente
bool m_bOrderStepZ ; // parametro per ordinare gli step Extra per Z decrescente o meno
bool m_bPocketPlane ; // flag per svuotare solo la rimanenza sullo Step Extra
double m_dOpenEdgeRad ; // raggio di rientro per i lati aperti
} ;