Skip to main content
Glama
revitService.ts3.33 kB
import { RevitModelInfo, RevitElement, GetElementsArgs,GetElementInfoArgs } from './types.js'; import { RevitSocketClient } from './revitSocketClient.js'; import dotenv from 'dotenv'; // 加载环境变量 dotenv.config(); // 从环境变量获取 Socket 连接信息,默认为 localhost:8080 const REVIT_HOST = process.env.REVIT_HOST || '127.0.0.1'; const REVIT_PORT = parseInt(process.env.REVIT_PORT || '8080', 10); // 模拟 Revit 模型数据 (仅在无法连接到 Revit 插件时使用) const mockModelInfo: RevitModelInfo = { name: "Office Building.rvt", path: "C:\\Projects\\Office Building.rvt", version: "2023", elements_count: 5243, last_modified: new Date().toISOString() }; export class RevitService { private client: RevitSocketClient; private useMockData: boolean = false; constructor() { this.client = new RevitSocketClient(REVIT_HOST, REVIT_PORT); // 尝试连接到 Revit 插件 this.client.connect().catch(error => { console.error('[RevitService] 无法连接到 Revit 插件,将使用模拟数据:', error); this.useMockData = true; }); } /** * 获取当前 Revit 模型信息 */ async getModelInfo(): Promise<RevitModelInfo> { try { return await this.client.getModelInfo(); } catch (error) { console.error('[RevitService] 获取模型信息失败,使用模拟数据:', error); this.useMockData = true; return mockModelInfo; } } /** * 根据条件查询 Revit 元素 */ async getElements(args: GetElementsArgs): Promise<RevitElement[]> { try { return await this.client.getElements(args); } catch (error) { console.error('[RevitService] 获取元素失败,使用模拟数据:', error); throw error; // 不使用模拟数据,直接抛出错误 } } async getElementInfo(args: GetElementInfoArgs): Promise<any> { try { return await this.client.getElementInfo(args); } catch (error) { console.error('[RevitService] 获取元素信息失败:', error); throw error; } } /** * 关闭连接 */ async close(): Promise<void> { if (!this.useMockData) { await this.client.disconnect(); } } /** * 获取所有楼层 */ async getLevels(): Promise<any[]> { try { return await this.client.getLevels(); } catch (error) { console.error('[RevitService] 获取楼层失败,使用模拟数据:', error); throw error; // 不使用模拟数据,直接抛出错误 } } /** * 获取所有视图 */ async getViews(): Promise<any[]> { try { return await this.client.getViews(); } catch (error) { console.error('[RevitService] 获取视图失败:', error); throw error; // 不使用模拟数据,直接抛出错误 } } /** * 获取所有类别 */ async getCategories(): Promise<any[]> { try { return await this.client.getCategories(); } catch (error) { console.error('[RevitService] 获取类别失败:', error); throw error; } } /** * 获取所有族 */ async getFamilies(): Promise<any[]> { try { return await this.client.getFamilies(); } catch (error) { console.error('[RevitService] 获取族失败:', error); throw error; } } }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PiggyAndrew/revit_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server