{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/brepgen-a-b-rep-generative-diffusion-model","title":"BrepGen: A B-rep Generative Diffusion Model with Structured Latent Geometry","arxiv_id":"2401.15563","date":"2024-01-28","proceeding":null,"authors":["Xiang Xu","Joseph G. Lambourne","Pradeep Kumar Jayaraman","Zhengqing Wang","Karl D. D. Willis","Yasutaka Furukawa"],"abstract":"This paper presents BrepGen, a diffusion-based generative approach that directly outputs a Boundary representation (B-rep) Computer-Aided Design (CAD) model. BrepGen represents a B-rep model as a novel structured latent geometry in a hierarchical tree. With the root node representing a whole CAD solid, each element of a B-rep model (i.e., a face, an edge, or a vertex) progressively turns into a child-node from top to bottom. B-rep geometry information goes into the nodes as the global bounding box of each primitive along with a latent code describing the local geometric shape. The B-rep topology information is implicitly represented by node duplication. When two faces share an edge, the edge curve will appear twice in the tree, and a T-junction vertex with three incident edges appears six times in the tree with identical node features. Starting from the root and progressing to the leaf, BrepGen employs Transformer-based diffusion models to sequentially denoise node features while duplicated nodes are detected and merged, recovering the B-Rep topology information. Extensive experiments show that BrepGen advances the task of CAD B-rep generation, surpassing existing methods on various benchmarks. Results on our newly collected furniture dataset further showcase its exceptional capability in generating complicated geometry. While previous methods were limited to generating simple prismatic shapes, BrepGen incorporates free-form and doubly-curved surfaces for the first time. Additional applications of BrepGen include CAD autocomplete and design interpolation. The code, pretrained models, and dataset are available at https://github.com/samxuxiang/BrepGen.","url_abs":"https://arxiv.org/abs/2401.15563v3","url_pdf":"https://arxiv.org/pdf/2401.15563v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"brepgen-a-b-rep-generative-diffusion-model","repo_url":"https://github.com/samxuxiang/brepgen","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2401.15563","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2401.15563"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/samxuxiang/brepgen","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":8,"ran_draft_wrong":1,"unverified":4},"by_repo_kind":{"official":{"samples":13,"ran":9,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":13,"samples":[{"code_sha256_prefix":"467737664dd3b630","entry":"compute_bbox_center_and_size","repo":"samxuxiang/brepgen","repo_kind":"official","path":"utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"467737664dd3b630"}},{"code_sha256_prefix":"69210f5cf001181d","entry":"filter_data","repo":"samxuxiang/brepgen","repo_kind":"official","path":"dataset.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/dataset.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"69210f5cf001181d"}},{"code_sha256_prefix":"680bb1e97d16d80c","entry":"find_files","repo":"samxuxiang/brepgen","repo_kind":"official","path":"pc_metric.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/pc_metric.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"680bb1e97d16d80c"}},{"code_sha256_prefix":"62e1cadfe8f7ca4c","entry":"generate_random_string","repo":"samxuxiang/brepgen","repo_kind":"official","path":"utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"62e1cadfe8f7ca4c"}},{"code_sha256_prefix":"b8f6f43364c78a51","entry":"get_bbox","repo":"samxuxiang/brepgen","repo_kind":"official","path":"data_process/convert_utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/data_process/convert_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"b8f6f43364c78a51"}},{"code_sha256_prefix":"1b0bbdbce5515f92","entry":"get_bbox_norm","repo":"samxuxiang/brepgen","repo_kind":"official","path":"utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"1b0bbdbce5515f92"}},{"code_sha256_prefix":"59ccbe6bf4d350db","entry":"load_data_with_prefix","repo":"samxuxiang/brepgen","repo_kind":"official","path":"sample_points.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/sample_points.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"59ccbe6bf4d350db"}},{"code_sha256_prefix":"7354c1e367e367b0","entry":"real2bit","repo":"samxuxiang/brepgen","repo_kind":"official","path":"data_process/convert_utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/data_process/convert_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"7354c1e367e367b0"}},{"code_sha256_prefix":"3adcfa420d6e7d66","entry":"sincos_embedding","repo":"samxuxiang/brepgen","repo_kind":"official","path":"network.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"3adcfa420d6e7d66"}},{"code_sha256_prefix":"9a578f2a671a37e4","entry":"distChamfer","repo":"samxuxiang/brepgen","repo_kind":"official","path":"pc_metric.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/pc_metric.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9a578f2a671a37e4"}},{"code_sha256_prefix":"adecd2724a1ed940","entry":"load_abc_pkl","repo":"samxuxiang/brepgen","repo_kind":"official","path":"data_process/convert_utils.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/data_process/convert_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"adecd2724a1ed940"}},{"code_sha256_prefix":"057519078110ca1d","entry":"load_data","repo":"samxuxiang/brepgen","repo_kind":"official","path":"dataset.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/dataset.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"057519078110ca1d"}},{"code_sha256_prefix":"7ea8042cb1e765a6","entry":"read_ply","repo":"samxuxiang/brepgen","repo_kind":"official","path":"pc_metric.py","file_url":"https://github.com/samxuxiang/brepgen/blob/HEAD/pc_metric.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7ea8042cb1e765a6"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}