[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FK4TQPFXDH0YKJBHFNEWKV":3,"skill-same:01M6FK4TQPFXDH0YKJBHFNEWKV":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M6FK4TQPFXDH0YKJBHFNEWKV","rvt-to-ifc",null,"Convert RVT files to IFC format. Support IFC2x3, IFC4, IFC4.3 with customizable export settings.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdatadrivenconstruction\u002Frvt-to-ifc\u002FSKILL.md",[],[18,19,20,21,22,23,24,25],"rvt to ifc","support","convert","format","settings","export","files","with","2026-11-10 10:12:30",false,"---\r\nslug: \"rvt-to-ifc\"\r\ndisplay_name: \"RVT To IFC\"\r\ndescription: \"Convert RVT files to IFC format. Support IFC2x3, IFC4, IFC4.3 with customizable export settings.\"\r\n---\r\n\r\n# RVT to IFC Conversion\r\n\r\n> **Note:** RVT is the file format. IFC is an open standard by buildingSMART International.\r\n\r\n## Business Case\r\n\r\n### Problem Statement\r\nIFC is the open BIM standard for interoperability, but:\r\n- Native Revit IFC export requires Autodesk license\r\n- Export settings significantly affect data quality\r\n- Batch processing is manual and time-consuming\r\n\r\n### Solution\r\nRVT2IFCconverter.exe converts Revit files to IFC offline, without licenses, with full control over export settings.\r\n\r\n### Business Value\r\n- **No license required** - Works without Autodesk software\r\n- **Multiple IFC versions** - IFC2x3, IFC4, IFC4.3 support\r\n- **Batch processing** - Convert thousands of files\r\n- **Consistent quality** - Standardized export settings\r\n\r\n## Technical Implementation\r\n\r\n### CLI Syntax\r\n```bash\r\nRVT2IFCconverter.exe \u003Cinput.rvt> [\u003Coutput.ifc>] [preset=\u003Cname>] [config=\"...\"]\r\n```\r\n\r\n### IFC Versions\r\n| Version | Use Case |\r\n|---------|----------|\r\n| IFC2x3 | Legacy compatibility, most software |\r\n| IFC4 | Enhanced properties, modern BIM |\r\n| IFC4.3 | Infrastructure, latest standard |\r\n\r\n### Export Presets\r\n| Preset | Description |\r\n|--------|-------------|\r\n| `standard` | Default balanced export |\r\n| `extended` | Maximum detail and properties |\r\n| `custom` | User-defined configuration |\r\n\r\n### Examples\r\n\r\n```bash\r\n# Standard IFC export\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\"\r\n\r\n# IFC4 with extended settings\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" preset=extended\r\n\r\n# Custom output path\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" \"D:\\Export\\model.ifc\"\r\n\r\n# Custom configuration\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" config=\"ExportBaseQuantities=true; SitePlacement=Shared\"\r\n```\r\n\r\n### Python Integration\r\n\r\n```python\r\nimport subprocess\r\nfrom pathlib import Path\r\nfrom typing import List, Optional, Dict, Any\r\nfrom dataclasses import dataclass\r\nfrom enum import Enum\r\n\r\n\r\nclass IFCVersion(Enum):\r\n    \"\"\"IFC schema versions.\"\"\"\r\n    IFC2X3 = \"IFC2x3\"\r\n    IFC4 = \"IFC4\"\r\n    IFC4X3 = \"IFC4x3\"\r\n\r\n\r\nclass ExportPreset(Enum):\r\n    \"\"\"Export presets.\"\"\"\r\n    STANDARD = \"standard\"\r\n    EXTENDED = \"extended\"\r\n    CUSTOM = \"custom\"\r\n\r\n\r\n@dataclass\r\nclass IFCExportConfig:\r\n    \"\"\"IFC export configuration.\"\"\"\r\n    ifc_version: IFCVersion = IFCVersion.IFC4\r\n    export_base_quantities: bool = True\r\n    site_placement: str = \"Shared\"\r\n    split_walls_and_columns: bool = False\r\n    include_steel_elements: bool = True\r\n    export_2d_elements: bool = False\r\n    export_linked_files: bool = False\r\n    export_rooms: bool = True\r\n    export_schedules: bool = True\r\n\r\n    def to_config_string(self) -> str:\r\n        \"\"\"Convert to CLI config string.\"\"\"\r\n        parts = [\r\n            f\"ExportBaseQuantities={str(self.export_base_quantities).lower()}\",\r\n            f\"SitePlacement={self.site_placement}\",\r\n            f\"SplitWallsAndColumns={str(self.split_walls_and_columns).lower()}\",\r\n            f\"IncludeSteelElements={str(self.include_steel_elements).lower()}\",\r\n            f\"Export2DElements={str(self.export_2d_elements).lower()}\",\r\n            f\"ExportLinkedFiles={str(self.export_linked_files).lower()}\",\r\n            f\"ExportRooms={str(self.export_rooms).lower()}\"\r\n        ]\r\n        return \"; \".join(parts)\r\n\r\n\r\nclass RevitToIFCConverter:\r\n    \"\"\"Convert Revit files to IFC format.\"\"\"\r\n\r\n    def __init__(self, converter_path: str = \"RVT2IFCconverter.exe\"):\r\n        self.converter = Path(converter_path)\r\n        if not self.converter.exists():\r\n            raise FileNotFoundError(f\"Converter not found: {converter_path}\")\r\n\r\n    def convert(self, rvt_file: str,\r\n                output_path: Optional[str] = None,\r\n                preset: ExportPreset = ExportPreset.STANDARD,\r\n                config: Optional[IFCExportConfig] = None) -> Path:\r\n        \"\"\"Convert Revit file to IFC.\"\"\"\r\n\r\n        rvt_path = Path(rvt_file)\r\n        if not rvt_path.exists():\r\n            raise FileNotFoundError(f\"Revit file not found: {rvt_file}\")\r\n\r\n        # Build command\r\n        cmd = [str(self.converter), str(rvt_path)]\r\n\r\n        # Add output path if specified\r\n        if output_path:\r\n            cmd.append(output_path)\r\n\r\n        # Add preset\r\n        cmd.append(f\"preset={preset.value}\")\r\n\r\n        # Add custom config if provided\r\n        if config:\r\n            cmd.append(f'config=\"{config.to_config_string()}\"')\r\n\r\n        # Execute\r\n        result = subprocess.run(cmd, capture_output=True, text=True)\r\n\r\n        if result.returncode != 0:\r\n            raise RuntimeError(f\"Conversion failed: {result.stderr}\")\r\n\r\n        # Return output path\r\n        if output_path:\r\n            return Path(output_path)\r\n        return rvt_path.with_suffix('.ifc')\r\n\r\n    def batch_convert(self, folder: str,\r\n                      output_folder: Optional[str] = None,\r\n                      preset: ExportPreset = ExportPreset.STANDARD,\r\n                      config: Optional[IFCExportConfig] = None) -> List[Dict[str, Any]]:\r\n        \"\"\"Convert all Revit files in folder.\"\"\"\r\n\r\n        folder_path = Path(folder)\r\n        results = []\r\n\r\n        for rvt_file in folder_path.glob(\"**\u002F*.rvt\"):\r\n            try:\r\n                # Determine output path\r\n                if output_folder:\r\n                    out_dir = Path(output_folder)\r\n                    out_dir.mkdir(parents=True, exist_ok=True)\r\n                    output_path = str(out_dir \u002F rvt_file.with_suffix('.ifc').name)\r\n                else:\r\n                    output_path = None\r\n\r\n                ifc_path = self.convert(str(rvt_file), output_path, preset, config)\r\n                results.append({\r\n                    'input': str(rvt_file),\r\n                    'output': str(ifc_path),\r\n                    'status': 'success'\r\n                })\r\n                print(f\"✓ Converted: {rvt_file.name}\")\r\n\r\n            except Exception as e:\r\n                results.append({\r\n                    'input': str(rvt_file),\r\n                    'output': None,\r\n                    'status': 'failed',\r\n                    'error': str(e)\r\n                })\r\n                print(f\"✗ Failed: {rvt_file.name} - {e}\")\r\n\r\n        return results\r\n\r\n    def validate_output(self, ifc_file: str) -> Dict[str, Any]:\r\n        \"\"\"Basic validation of generated IFC.\"\"\"\r\n\r\n        ifc_path = Path(ifc_file)\r\n        if not ifc_path.exists():\r\n            return {'valid': False, 'error': 'File not found'}\r\n\r\n        # Basic file checks\r\n        file_size = ifc_path.stat().st_size\r\n\r\n        if file_size \u003C 1000:\r\n            return {'valid': False, 'error': 'File too small'}\r\n\r\n        # Read header\r\n        with open(ifc_file, 'r', errors='ignore') as f:\r\n            header = f.read(1000)\r\n\r\n        # Check IFC format\r\n        if 'ISO-10303-21' not in header:\r\n            return {'valid': False, 'error': 'Not a valid IFC file'}\r\n\r\n        # Detect version\r\n        version = 'Unknown'\r\n        if 'IFC4X3' in header:\r\n            version = 'IFC4.3'\r\n        elif 'IFC4' in header:\r\n            version = 'IFC4'\r\n        elif 'IFC2X3' in header:\r\n            version = 'IFC2x3'\r\n\r\n        return {\r\n            'valid': True,\r\n            'file_size': file_size,\r\n            'ifc_version': version\r\n        }\r\n\r\n\r\nclass IFCQualityChecker:\r\n    \"\"\"Check quality of IFC exports.\"\"\"\r\n\r\n    def __init__(self, converter: RevitToIFCConverter):\r\n        self.converter = converter\r\n\r\n    def compare_presets(self, rvt_file: str) -> Dict[str, Any]:\r\n        \"\"\"Compare different export presets.\"\"\"\r\n\r\n        results = {}\r\n\r\n        for preset in [ExportPreset.STANDARD, ExportPreset.EXTENDED]:\r\n            try:\r\n                output = Path(rvt_file).with_suffix(f'.{preset.value}.ifc')\r\n                self.converter.convert(rvt_file, str(output), preset)\r\n\r\n                validation = self.converter.validate_output(str(output))\r\n                results[preset.value] = {\r\n                    'file_size': validation.get('file_size', 0),\r\n                    'valid': validation.get('valid', False)\r\n                }\r\n            except Exception as e:\r\n                results[preset.value] = {'error': str(e)}\r\n\r\n        return results\r\n\r\n\r\n# Convenience functions\r\ndef convert_revit_to_ifc(rvt_file: str,\r\n                         converter_path: str = \"RVT2IFCconverter.exe\") -> str:\r\n    \"\"\"Quick conversion of Revit to IFC.\"\"\"\r\n    converter = RevitToIFCConverter(converter_path)\r\n    output = converter.convert(rvt_file)\r\n    return str(output)\r\n\r\n\r\ndef batch_convert_to_ifc(folder: str,\r\n                         converter_path: str = \"RVT2IFCconverter.exe\") -> List[str]:\r\n    \"\"\"Batch convert all Revit files to IFC.\"\"\"\r\n    converter = RevitToIFCConverter(converter_path)\r\n    results = converter.batch_convert(folder)\r\n    return [r['output'] for r in results if r['status'] == 'success']\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\n# Initialize converter\r\nconverter = RevitToIFCConverter(\"C:\u002FDDC\u002FRVT2IFCconverter.exe\")\r\n\r\n# Basic conversion\r\nifc = converter.convert(\"building.rvt\")\r\nprint(f\"Created: {ifc}\")\r\n\r\n# With custom config\r\nconfig = IFCExportConfig(\r\n    ifc_version=IFCVersion.IFC4,\r\n    export_base_quantities=True,\r\n    export_rooms=True\r\n)\r\nifc = converter.convert(\"building.rvt\", preset=ExportPreset.CUSTOM, config=config)\r\n```\r\n\r\n## Common Use Cases\r\n\r\n### 1. Batch Processing\r\n```python\r\nconverter = RevitToIFCConverter()\r\nresults = converter.batch_convert(\r\n    folder=\"C:\u002FProjects\",\r\n    output_folder=\"C:\u002FIFC_Export\",\r\n    preset=ExportPreset.EXTENDED\r\n)\r\nprint(f\"Converted {len([r for r in results if r['status'] == 'success'])} files\")\r\n```\r\n\r\n### 2. Quality Check\r\n```python\r\nvalidation = converter.validate_output(\"model.ifc\")\r\nprint(f\"Valid: {validation['valid']}, Version: {validation['ifc_version']}\")\r\n```\r\n\r\n### 3. Compare Presets\r\n```python\r\nchecker = IFCQualityChecker(converter)\r\ncomparison = checker.compare_presets(\"building.rvt\")\r\nprint(comparison)\r\n```\r\n\r\n## Resources\r\n\r\n- **GitHub**: [cad2data Pipeline](https:\u002F\u002Fgithub.com\u002Fdatadrivenconstruction\u002Fcad2data-Revit-IFC-DWG-DGN-pipeline-with-conversion-validation-qto)\r\n- **buildingSMART IFC**: https:\u002F\u002Fwww.buildingsmart.org\u002Fstandards\u002Fbsi-standards\u002Findustry-foundation-classes\u002F\r\n","# RVT to IFC Conversion\r\n\r\n> **Note:** RVT is the file format. IFC is an open standard by buildingSMART International.\r\n\r\n## Business Case\r\n\r\n### Problem Statement\r\nIFC is the open BIM standard for interoperability, but:\r\n- Native Revit IFC export requires Autodesk license\r\n- Export settings significantly affect data quality\r\n- Batch processing is manual and time-consuming\r\n\r\n### Solution\r\nRVT2IFCconverter.exe converts Revit files to IFC offline, without licenses, with full control over export settings.\r\n\r\n### Business Value\r\n- **No license required** - Works without Autodesk software\r\n- **Multiple IFC versions** - IFC2x3, IFC4, IFC4.3 support\r\n- **Batch processing** - Convert thousands of files\r\n- **Consistent quality** - Standardized export settings\r\n\r\n## Technical Implementation\r\n\r\n### CLI Syntax\r\n```bash\r\nRVT2IFCconverter.exe \u003Cinput.rvt> [\u003Coutput.ifc>] [preset=\u003Cname>] [config=\"...\"]\r\n```\r\n\r\n### IFC Versions\r\n| Version | Use Case |\r\n|---------|----------|\r\n| IFC2x3 | Legacy compatibility, most software |\r\n| IFC4 | Enhanced properties, modern BIM |\r\n| IFC4.3 | Infrastructure, latest standard |\r\n\r\n### Export Presets\r\n| Preset | Description |\r\n|--------|-------------|\r\n| `standard` | Default balanced export |\r\n| `extended` | Maximum detail and properties |\r\n| `custom` | User-defined configuration |\r\n\r\n### Examples\r\n\r\n```bash\r\n# Standard IFC export\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\"\r\n\r\n# IFC4 with extended settings\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" preset=extended\r\n\r\n# Custom output path\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" \"D:\\Export\\model.ifc\"\r\n\r\n# Custom configuration\r\nRVT2IFCconverter.exe \"C:\\Projects\\Building.rvt\" config=\"ExportBaseQuantities=true; SitePlacement=Shared\"\r\n```\r\n\r\n### Python Integration\r\n\r\n```python\r\nimport subprocess\r\nfrom pathlib import Path\r\nfrom typing import List, Optional, Dict, Any\r\nfrom dataclasses import dataclass\r\nfrom enum import Enum\r\n\r\n\r\nclass IFCVersion(Enum):\r\n    \"\"\"IFC schema versions.\"\"\"\r\n    IFC2X3 = \"IFC2x3\"\r\n    IFC4 = \"IFC4\"\r\n    IFC4X3 = \"IFC4x3\"\r\n\r\n\r\nclass ExportPreset(Enum):\r\n    \"\"\"Export presets.\"\"\"\r\n    STANDARD = \"standard\"\r\n    EXTENDED = \"extended\"\r\n    CUSTOM = \"custom\"\r\n\r\n\r\n@dataclass\r\nclass IFCExportConfig:\r\n    \"\"\"IFC export configuration.\"\"\"\r\n    ifc_version: IFCVersion = IFCVersion.IFC4\r\n    export_base_quantities: bool = True\r\n    site_placement: str = \"Shared\"\r\n    split_walls_and_columns: bool = False\r\n    include_steel_elements: bool = True\r\n    export_2d_elements: bool = False\r\n    export_linked_files: bool = False\r\n    export_rooms: bool = True\r\n    export_schedules: bool = True\r\n\r\n    def to_config_string(self) -> str:\r\n        \"\"\"Convert to CLI config string.\"\"\"\r\n        parts = [\r\n            f\"ExportBaseQuantities={str(self.export_base_quantities).lower()}\",\r\n            f\"SitePlacement={self.site_placement}\",\r\n            f\"SplitWallsAndColumns={str(self.split_walls_and_columns).lower()}\",\r\n            f\"IncludeSteelElements={str(self.include_steel_elements).lower()}\",\r\n            f\"Export2DElements={str(self.export_2d_elements).lower()}\",\r\n            f\"ExportLinkedFiles={str(self.export_linked_files).lower()}\",\r\n            f\"ExportRooms={str(self.export_rooms).lower()}\"\r\n        ]\r\n        return \"; \".join(parts)\r\n\r\n\r\nclass RevitToIFCConverter:\r\n    \"\"\"Convert Revit files to IFC format.\"\"\"\r\n\r\n    def __init__(self, converter_path: str = \"RVT2IFCconverter.exe\"):\r\n        self.converter = Path(converter_path)\r\n        if not self.converter.exists():\r\n            raise FileNotFoundError(f\"Converter not found: {converter_path}\")\r\n\r\n    def convert(self, rvt_file: str,\r\n                output_path: Optional[str] = None,\r\n                preset: ExportPreset = ExportPreset.STANDARD,\r\n                config: Optional[IFCExportConfig] = None) -> Path:\r\n        \"\"\"Convert Revit file to IFC.\"\"\"\r\n\r\n        rvt_path = Path(rvt_file)\r\n        if not rvt_path.exists():\r\n            raise FileNotFoundError(f\"Revit file not found: {rvt_file}\")\r\n\r\n        # Build command\r\n        cmd = [str(self.converter), str(rvt_path)]\r\n\r\n        # Add output path if specified\r\n        if output_path:\r\n            cmd.append(output_path)\r\n\r\n        # Add preset\r\n        cmd.append(f\"preset={preset.value}\")\r\n\r\n        # Add custom config if provided\r\n        if config:\r\n            cmd.append(f'config=\"{config.to_config_string()}\"')\r\n\r\n        # Execute\r\n        result = subprocess.run(cmd, capture_output=True, text=True)\r\n\r\n        if result.returncode != 0:\r\n            raise RuntimeError(f\"Conversion failed: {result.stderr}\")\r\n\r\n        # Return output path\r\n        if output_path:\r\n            return Path(output_path)\r\n        return rvt_path.with_suffix('.ifc')\r\n\r\n    def batch_convert(self, folder: str,\r\n                      output_folder: Optional[str] = None,\r\n                      preset: ExportPreset = ExportPreset.STANDARD,\r\n                      config: Optional[IFCExportConfig] = None) -> List[Dict[str, Any]]:\r\n        \"\"\"Convert all Revit files in folder.\"\"\"\r\n\r\n        folder_path = Path(folder)\r\n        results = []\r\n\r\n        for rvt_file in folder_path.glob(\"**\u002F*.rvt\"):\r\n            try:\r\n                # Determine output path\r\n                if output_folder:\r\n                    out_dir = Path(output_folder)\r\n                    out_dir.mkdir(parents=True, exist_ok=True)\r\n                    output_path = str(out_dir \u002F rvt_file.with_suffix('.ifc').name)\r\n                else:\r\n                    output_path = None\r\n\r\n                ifc_path = self.convert(str(rvt_file), output_path, preset, config)\r\n                results.append({\r\n                    'input': str(rvt_file),\r\n                    'output': str(ifc_path),\r\n                    'status': 'success'\r\n                })\r\n                print(f\"✓ Converted: {rvt_file.name}\")\r\n\r\n            except Exception as e:\r\n                results.append({\r\n                    'input': str(rvt_file),\r\n                    'output': None,\r\n                    'status': 'failed',\r\n                    'error': str(e)\r\n                })\r\n                print(f\"✗ Failed: {rvt_file.name} - {e}\")\r\n\r\n        return results\r\n\r\n    def validate_output(self, ifc_file: str) -> Dict[str, Any]:\r\n        \"\"\"Basic validation of generated IFC.\"\"\"\r\n\r\n        ifc_path = Path(ifc_file)\r\n        if not ifc_path.exists():\r\n            return {'valid': False, 'error': 'File not found'}\r\n\r\n        # Basic file checks\r\n        file_size = ifc_path.stat().st_size\r\n\r\n        if file_size \u003C 1000:\r\n            return {'valid': False, 'error': 'File too small'}\r\n\r\n        # Read header\r\n        with open(ifc_file, 'r', errors='ignore') as f:\r\n            header = f.read(1000)\r\n\r\n        # Check IFC format\r\n        if 'ISO-10303-21' not in header:\r\n            return {'valid': False, 'error': 'Not a valid IFC file'}\r\n\r\n        # Detect version\r\n        version = 'Unknown'\r\n        if 'IFC4X3' in header:\r\n            version = 'IFC4.3'\r\n        elif 'IFC4' in header:\r\n            version = 'IFC4'\r\n        elif 'IFC2X3' in header:\r\n            version = 'IFC2x3'\r\n\r\n        return {\r\n            'valid': True,\r\n            'file_size': file_size,\r\n            'ifc_version': version\r\n        }\r\n\r\n\r\nclass IFCQualityChecker:\r\n    \"\"\"Check quality of IFC exports.\"\"\"\r\n\r\n    def __init__(self, converter: RevitToIFCConverter):\r\n        self.converter = converter\r\n\r\n    def compare_presets(self, rvt_file: str) -> Dict[str, Any]:\r\n        \"\"\"Compare different export presets.\"\"\"\r\n\r\n        results = {}\r\n\r\n        for preset in [ExportPreset.STANDARD, ExportPreset.EXTENDED]:\r\n            try:\r\n                output = Path(rvt_file).with_suffix(f'.{preset.value}.ifc')\r\n                self.converter.convert(rvt_file, str(output), preset)\r\n\r\n                validation = self.converter.validate_output(str(output))\r\n                results[preset.value] = {\r\n                    'file_size': validation.get('file_size', 0),\r\n                    'valid': validation.get('valid', False)\r\n                }\r\n            except Exception as e:\r\n                results[preset.value] = {'error': str(e)}\r\n\r\n        return results\r\n\r\n\r\n# Convenience functions\r\ndef convert_revit_to_ifc(rvt_file: str,\r\n                         converter_path: str = \"RVT2IFCconverter.exe\") -> str:\r\n    \"\"\"Quick conversion of Revit to IFC.\"\"\"\r\n    converter = RevitToIFCConverter(converter_path)\r\n    output = converter.convert(rvt_file)\r\n    return str(output)\r\n\r\n\r\ndef batch_convert_to_ifc(folder: str,\r\n                         converter_path: str = \"RVT2IFCconverter.exe\") -> List[str]:\r\n    \"\"\"Batch convert all Revit files to IFC.\"\"\"\r\n    converter = RevitToIFCConverter(converter_path)\r\n    results = converter.batch_convert(folder)\r\n    return [r['output'] for r in results if r['status'] == 'success']\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\n# Initialize converter\r\nconverter = RevitToIFCConverter(\"C:\u002FDDC\u002FRVT2IFCconverter.exe\")\r\n\r\n# Basic conversion\r\nifc = converter.convert(\"building.rvt\")\r\nprint(f\"Created: {ifc}\")\r\n\r\n# With custom config\r\nconfig = IFCExportConfig(\r\n    ifc_version=IFCVersion.IFC4,\r\n    export_base_quantities=True,\r\n    export_rooms=True\r\n)\r\nifc = converter.convert(\"building.rvt\", preset=ExportPreset.CUSTOM, config=config)\r\n```\r\n\r\n## Common Use Cases\r\n\r\n### 1. Batch Processing\r\n```python\r\nconverter = RevitToIFCConverter()\r\nresults = converter.batch_convert(\r\n    folder=\"C:\u002FProjects\",\r\n    output_folder=\"C:\u002FIFC_Export\",\r\n    preset=ExportPreset.EXTENDED\r\n)\r\nprint(f\"Converted {len([r for r in results if r['status'] == 'success'])} files\")\r\n```\r\n\r\n### 2. Quality Check\r\n```python\r\nvalidation = converter.validate_output(\"model.ifc\")\r\nprint(f\"Valid: {validation['valid']}, Version: {validation['ifc_version']}\")\r\n```\r\n\r\n### 3. Compare Presets\r\n```python\r\nchecker = IFCQualityChecker(converter)\r\ncomparison = checker.compare_presets(\"building.rvt\")\r\nprint(comparison)\r\n```\r\n\r\n## Resources\r\n\r\n- **GitHub**: [cad2data Pipeline](https:\u002F\u002Fgithub.com\u002Fdatadrivenconstruction\u002Fcad2data-Revit-IFC-DWG-DGN-pipeline-with-conversion-validation-qto)\r\n- **buildingSMART IFC**: https:\u002F\u002Fwww.buildingsmart.org\u002Fstandards\u002Fbsi-standards\u002Findustry-foundation-classes\u002F\r\n",{"slug":5,"description":7,"display_name":31},"RVT To IFC","main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fdatadrivenconstruction\u002Frvt-to-ifc",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add kbarbel640-del\u002Fskills --skill rvt-to-ifc",{"tool":45,"command":46},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill rvt-to-ifc",{"tool":48,"command":49},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill rvt-to-ifc","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdatadrivenconstruction\u002Frvt-to-ifc\u002FSKILL.md",true,[53],{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"_meta.json","REFERENCE","参考文档",288,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdatadrivenconstruction\u002Frvt-to-ifc\u002F_meta.json",[60,90,119,140,146,166],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":71,"publishedAt":26},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[72,73,74,25,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89],"crowd prompting","prompting","api","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":101,"publishedAt":26},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[96],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[102,74,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,78,118],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":128,"publishedAt":26},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[125],{"categoryNo":126,"categoryName":127,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000021","资料检索与研究",[129,130,131,132,133,134,135,25,136,116,118,137,74,138,139],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":141,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":145,"publishedAt":26},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[144],{"categoryNo":126,"categoryName":127,"taxonomyType":99,"taxonomyTypeDesc":100},[132,131,130,129,139,134,135,25,133,116,118,136,137,74,138],{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":26},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,161,162,163,164,165],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":176,"publishedAt":26},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[172,173],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},{"categoryNo":174,"categoryName":175,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000037","律师与法务",[177,178,179,180,25,181,182,32,183,137,184,185,186,187,188,87,189,190,191],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]