szalinski a tool for synthesizing structured cad models
play

Szalinski : A Tool for Synthesizing Structured CAD Models with - PowerPoint PPT Presentation

Szalinski : A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations PLDI 2020 Chandrakana Nandi , Max Willsey, Adam Anderson, James R. Wilcox, Eva Darulova, Dan Grossman, Zachary Tatlock Designing


  1. Szalinski : A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations PLDI 2020 Chandrakana Nandi , Max Willsey, Adam Anderson, James R. Wilcox, Eva Darulova, Dan Grossman, Zachary Tatlock

  2. Designing Physical Objects is Programming!

  3. CAD and 3D Printing everywhere! Make your own models Share with others

  4. CAD and 3D Printing everywhere! Make your own models Editability is key! Share with others

  5. Mesh Decompilers Recover Flat Programs (Union (Scale [5,5,1] (Cylinder [1,1])) (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) Mesh (Scale [10,1,1] Decompilers * (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Rotate [0, 0, 240] > 1500 LOC (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) * Reincarnate [ICFP 2018], (Rotate [0, 0, 60] InverseCSG [SIGGRAPH Asia 2018], (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) Shape2Prog [ICLR 2019], CSGNet [CVPR 2018], …

  6. Mesh Decompilers Recover Flat Programs (Union Primitives (Scale [5,5,1] ( Cylinder [1,1])) (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] ( Cuboid [10,1,1]))) Mesh (Scale [10,1,1] Decompilers * (Translate [0.1, − 0.5,1] ( Cuboid [1,1,1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] ( Cuboid [10, 1, 1]))) (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Rotate [0, 0, 240] > 1500 LOC (Translate [1, − 0.5, 0] ( Cuboid [10, 1, 1]))) * Reincarnate [ICFP 2018], (Rotate [0, 0, 60] InverseCSG [SIGGRAPH Asia 2018], (Translate [1, − 0.5, 0] ( Cuboid [10, 1, 1]))))) Shape2Prog [ICLR 2019], CSGNet [CVPR 2018], …

  7. Mesh Decompilers Recover Flat Programs (Union Primitives ( Scale [5,5,1] (Cylinder [1,1])) Affine operators (Union ( Rotate [0,0,120] ( Translate [1, − 0.5,0] (Cuboid [10,1,1]))) Mesh ( Scale [10,1,1] Decompilers * ( Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) ( Rotate [0, 0, 300] ( Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) ( Translate [ − 1,0.5,0] ( Scale [ − 1, − 1,1] Cuboid [10,1,1])) ( Rotate [0, 0, 240] > 1500 LOC ( Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) * Reincarnate [ICFP 2018], ( Rotate [0, 0, 60] InverseCSG [SIGGRAPH Asia 2018], ( Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) Shape2Prog [ICLR 2019], CSGNet [CVPR 2018], …

  8. Mesh Decompilers Recover Flat Programs ( Union Primitives (Scale [5,5,1] (Cylinder [1,1])) Affine operators ( Union (Rotate [0,0,120] Binary operators (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) Mesh (Scale [10,1,1] Decompilers * (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Rotate [0, 0, 240] > 1500 LOC (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) * Reincarnate [ICFP 2018], (Rotate [0, 0, 60] InverseCSG [SIGGRAPH Asia 2018], (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) Shape2Prog [ICLR 2019], CSGNet [CVPR 2018], …

  9. Mesh Decompilers Recover Flat Programs Repetition of spokes is not (Union captured by flat program (Scale [5,5,1] (Cylinder [1,1])) (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) Mesh (Scale [10,1,1] Decompilers * (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Rotate [0, 0, 240] > 1500 LOC (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) * Reincarnate [ICFP 2018], (Rotate [0, 0, 60] InverseCSG [SIGGRAPH Asia 2018], (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) Shape2Prog [ICLR 2019], CSGNet [CVPR 2018], …

  10. Szalinski: flat CAD parametrized CAD (Union (Scale [5,5,1] (Cylinder [1,1])) (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) (Scale [10,1,1] Szalinski (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) This talk (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Rotate [0, 0, 240] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1])))))

  11. Szalinski: flat CAD parametrized CAD (Union (Scale [5,5,1] (Cylinder [1,1])) (Union (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) (Cylinder [1, 5, 5]) (Scale [10,1,1] Szalinski ( Fold Union (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] ( Tabulate (i 6) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60i] This talk (Translate [ − 1,0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Translate [1, − 0.5,0] (Rotate [0, 0, 240] (Cuboid [10, 1, 1])))))) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1])))))

  12. Szalinski: flat CAD parametrized CAD (Union (Scale [5,5,1] (Cylinder [1,1])) (Union (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) (Cylinder [1, 5, 5]) (Scale [10,1,1] Szalinski ( Fold Union (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Rotate [0, 0, 300] ( Tabulate (i 6) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60i] This talk (Translate [ − 1,0.5,0] A language, called Caddy that (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Translate [1, − 0.5,0] (Rotate [0, 0, 240] (Cuboid [10, 1, 1])))))) supports CAD features & (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] functional programming features (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) like Fold, Tabulate, Map Fold and Tabulate represent loops

  13. Szalinski: flat CAD parametrized CAD (Union (Scale [5,5,1] (Cylinder [1,1])) (Union (Union (Union (Rotate [0,0,120] (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Scale [10,1,1] Szalinski (Fold Union ( Fold Union (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Tabulate (i 3 ) (Rotate [0, 0, 300] ( Tabulate (i 6) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) edits (Rotate [0, 0, 120i ] (Rotate [0, 0, 60i] This talk (Translate [ − 1,0.5,0] (Translate [1, − 0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Translate [1, − 0.5,0] (Rotate [0, 0, 240] (Cuboid [10, 1, 1])))))) (Cuboid [10, 1, 1])))))) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] edits (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) (Union (Union (Union Fold and (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Fold Union (Fold Union (Fold Union Tabulate (Tabulate (i 6) (Tabulate (i 8 ) (Tabulate (i 6) represent (Rotate [0, 0, 45i ] (Rotate [0, 0, 45i ] (Rotate [0, 0, 60i] (Translate [1, − 0.5,0] (Translate [1, − 0.5,0] (Translate [1, − 0.5,0] loops (Cuboid [10, 1, 1])))))) (Cuboid [ 15 , 1, 1])))))) (Cuboid [ 15 , 1, 1]))))))

  14. Szalinski: flat CAD parametrized CAD (Union Automatically infer loops from straight line (Scale [5,5,1] (Cylinder [1,1])) (Union (Union (Union (Rotate [0,0,120] programs in the form of Folds , Maps , and (Translate [1, − 0.5,0] (Cuboid [10,1,1]))) (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Scale [10,1,1] Szalinski (Fold Union ( Fold Union (Translate [0.1, − 0.5,1] (Cuboid [1,1,1]))) (Tabulate (i 3 ) (Rotate [0, 0, 300] ( Tabulate (i 6) Tabulates (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) edits (Rotate [0, 0, 120i ] (Rotate [0, 0, 60i] This talk (Translate [ − 1,0.5,0] (Translate [1, − 0.5,0] (Scale [ − 1, − 1,1] Cuboid [10,1,1])) (Translate [1, − 0.5,0] (Rotate [0, 0, 240] (Cuboid [10, 1, 1])))))) (Cuboid [10, 1, 1])))))) (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] edits (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))))) (Union (Union (Union Hypothesis: Parametrized programs are easier to Fold and (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Cylinder [1, 5, 5]) (Fold Union (Fold Union (Fold Union Tabulate read/customize than flat programs (Tabulate (i 6) (Tabulate (i 8 ) (Tabulate (i 6) represent (Rotate [0, 0, 45i ] (Rotate [0, 0, 45i ] (Rotate [0, 0, 60i] (Translate [1, − 0.5,0] (Translate [1, − 0.5,0] (Translate [1, − 0.5,0] loops (Cuboid [10, 1, 1])))))) (Cuboid [ 15 , 1, 1])))))) (Cuboid [ 15 , 1, 1]))))))

  15. Ideal Input to Szalinski (Union (Cylinder [1, 5]) (Union (Rotate [0, 0, 0] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 120] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 180] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 240] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1])))))

  16. Term Rewriting (Union (Cylinder [1, 5]) (Union (Rotate [0, 0, 0] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 60] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 120] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 180] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 240] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1]))) (Rotate [0, 0, 300] (Translate [1, − 0.5, 0] (Cuboid [10, 1, 1])))))

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend