freecad二開 xmlrpc接口api qtgui

FreeCAD.ConfigGet("UserAppData") 文件夾下創建mod文件夾

mod文件夾底下創建插件文件夾my_server:

freecad_server.py:

from xmlrpc.server import SimpleXMLRPCServer
import FreeCADGui
import FreeCADimport queue
from PySide2.QtCore import QTimer
import threading
# 定義一個類來封裝API方法# GUI task queue
rpc_request_queue = queue.Queue()
rpc_response_queue = queue.Queue()def process_gui_tasks():while not rpc_request_queue.empty():task = rpc_request_queue.get()res = task()if res is not None:rpc_response_queue.put(res)QTimer.singleShot(500, process_gui_tasks)class FreeCADRPC:"""RPC server for FreeCAD"""def ping(self):return Truedef create_document(self, name="New_Document"):rpc_request_queue.put(lambda: self._create_document_gui(name))res = rpc_response_queue.get()if res is True:return {"success": True, "document_name": name}else:return {"success": False, "error": res}def _create_document_gui(self, name):doc = FreeCAD.newDocument(name)doc.recompute()print(f"Document '{name}' created via RPC.\n")return True
def start_rpc_server(host="localhost", port=8000):print(f"Starting RPC server at {host}:{port}...")rpc_server_instance = SimpleXMLRPCServer((host, port), allow_none=True, logRequests=False)rpc_server_instance.register_instance(FreeCADRPC())def server_loop():rpc_server_instance.serve_forever()rpc_server_thread = threading.Thread(target=server_loop, daemon=True)rpc_server_thread.start()QTimer.singleShot(500, process_gui_tasks)return f"RPC Server started at {host}:{port}."class StartRPCServerCommand:def GetResources(self):return {"MenuText": "なんで好きか――?"}def Activated(self):msg = start_rpc_server()def IsActive(self):return True
FreeCADGui.addCommand("a_Server", StartRPCServerCommand())

?如果不在gui里加入服務器操作的話,比如說直接調用freecad.newdocument() 會在閃退前出現以下報錯

有試過在init.py里面直接跑,不行,還是只能加在任務欄上

?test.py:可以用這個測試服務有沒有裝上

import xmlrpc.client# 連接到服務器
proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")# 調用函數
result = proxy.create_document()

?如果想接mcp:

from mcp.server.fastmcp import FastMCPmcp = FastMCP("Demo")
import xmlrpc.client# 連接到服務器
proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")@mcp.tool()
def create_document():"""創建一個freecad的基礎文檔。參數:不需要參數返回:函數執行結果示例:>>> proxy.create_document()"""return  proxy.create_document()if __name__ == "__main__":mcp.run()

{"mcpServers": {"freecad_mcp": {"autoApprove": [],"disabled": false,"timeout": 60,"command": "/home/chen/anaconda3/envs/freecad_mcp/bin/python","args": ["/home/chen/snap/freecad/common/Mod/freecad_mcp_my/mcp_server.py"],"transportType": "stdio"}}

outpu

他這個只能調用基礎的工作臺,我想給他連到別的工作臺

gitee:sato77711/freecad_mcp_addon可以直接下載后丟入FreeCAD.ConfigGet("UserAppData") 文件夾下創建的mod文件夾

??參考:https://wiki.freecad.org/Workbench_creation/zh-hant

FreeCAD二次開發-基于PyQT對話框與FC交互的開發_51CTO博客_freecad二次開發

?代碼來自:
freecad-mcp · PyPI

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/74187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/74187.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/74187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙NEXT開發日志工具類(ArkTs)

import hilog from ohos.hilog; import { JSON } from kit.ArkTS; import { BusinessError } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 日志工具類* author: 鴻蒙布道師* since: 2024/03/31*/ export class LogUtil {private static logSize: numbe…

《Linux運維總結:基于銀河麒麟V10+ARM64架構CPU源碼編譯部署單實例redis7.2.6》

總結:整理不易,如果對你有幫助,可否點贊關注一下? 更多詳細內容請參考:《Linux運維篇:Linux系統運維指南》 一、環境信息 環境信息如下: 主機IP 操作系統 Redis版本 CPU架構 192.168.1.111 K…

基于LSTM的文本分類1——模型搭建

源碼 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Config(object):"""配置參數類,用于存儲模型和訓練的超參數"""def __init__(self, dataset, embedding):self.…

小了 60,500 倍,但更強;AI 的“深度詛咒”

作者:Ignacio de Gregorio 圖片來自 Unsplash 的 Bahnijit Barman 幾周前,我們看到 Anthropic 嘗試訓練 Claude 去通關寶可夢。模型是有點進展,但離真正通關還差得遠。 但現在,一個獨立的小團隊用一個只有一千萬參數的模型通關了…

nextjs使用02

并行路由 同一個頁面,放多個路由,, 目錄前面加,layout中可以當作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…

github 無法在shell里鏈接

當我在shell端git push時,我發現總是22 timeout的問題。 我就進行了以下步驟的嘗試并最終得到了解決。 第一步,我先確定我可以curl github,也就是我網絡沒問題 curl -v https://github.com 如果這個時候不超時和報錯,說明網絡…

當前主流的大模型知識庫軟件對比分析

以下是當前主流的大模型知識庫軟件對比分析,涵蓋功能特性、適用場景及優劣勢,結合最新技術動態和行業實踐提供深度選型參考: 一、企業級智能知識庫平臺 1. 阿里云百煉(Model Studio) 核心能力:基于RAG技…

Java的比較器 Comparable 和 Comparator

在 Java 中,Comparable 和 Comparator 是用于對象排序的重要接口。它們提供了不同的排序方式,適用于不同的需求,同時在 Java 底層排序算法中發揮著關鍵作用。本文將從基礎概念、使用方法、排序實現(包括升序、降序)、底…

基于Qlearning強化學習的太赫茲信道信號檢測與識別matlab仿真

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1 太赫茲信道特性 2.2 Q-learning強化學習基礎 2.3 基于Q-learning 的太赫茲信道信號檢測與識別系統 3.MATLAB核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 matlab2024b仿真結果如下(完整代碼運行后無水印…

力扣刷題————199.二叉樹的右視圖

給定一個二叉樹的 根節點 root,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。 示例 1: 輸入:root [1,2,3,null,5,null,4] 輸出:[1,3,4] 解題思路:我們可以想到這…

文件包含漏洞的小點總結

文件本地與遠程包含: 文件包含有本地包含與遠程包含的區別:本地包含只能包含服務器已經有的問題; 遠程包含可以包含一切網絡上的文件。 本地包含: ①無限制 感受一下使用phpstudy的文件上傳,開啟phpstudy的apache…

深度學習處理時間序列(5)

Keras中的循環層 上面的NumPy簡單實現對應一個實際的Keras層—SimpleRNN層。不過,二者有一點小區別:SimpleRNN層能夠像其他Keras層一樣處理序列批量,而不是像NumPy示例中的那樣只能處理單個序列。也就是說,它接收形狀為(batch_si…

操作系統相關知識點

操作系統在進行線程切換時需要進行哪些動作? 保存當前線程的上下文 保存寄存器狀態、保存棧信息。 調度器選擇下一個線程 調度算法決策:根據策略(如輪轉、優先級、公平共享)從就緒隊列選擇目標線程。 處理優先級:實時…

從0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核視頻特效

引言:視頻特效開發的痛點,你中了幾個? 視頻特效如今無處不在:短視頻平臺的濾鏡美化、直播間的實時美顏、影視后期的電影級調色,甚至 AI 生成內容的動態效果。無論是個人開發者還是團隊,視頻特效都成了吸引…

【并發編程 | 第一篇】線程相關基礎知識

1.并發和并行有什么區別 并發是指多核CPU上的多任務處理,多個任務在同一時刻真正同時執行。 并行是指單核CPU上的多任務處理,多個任務在同一時間段內交替執行,通過時間片輪轉實現交替執行,用于解決IO密集型瓶頸。 如何理解線程安…

Kafka 偏移量

在 Apache Kafka 中,偏移量(Offset)是一個非常重要的概念。它不僅用于標識消息的位置,還在多種場景中發揮關鍵作用。本文將詳細介紹 Kafka 偏移量的核心概念及其使用場景。 一、偏移量的核心概念 1. 定義 偏移量是一個非負整數…

18.redis基本操作

Redis(Remote Dictionary Server)是一個開源的、高性能的鍵值對(Key-Value)存儲數據庫,廣泛應用于緩存、消息隊列、實時分析等場景。它以其極高的讀寫速度、豐富的數據結構和靈活的應用方式而受到開發者的青睞。 Redis 的主要特點 ?高性能: ?內存存儲:Redis 將所有數…

歷年跨鏈合約惡意交易詳解(一)——THORChain退款邏輯漏洞

漏洞合約函數 function returnVaultAssets(address router, address payable asgard, Coin[] memory coins, string memory memo) public payable {if (router address(this)){for(uint i 0; i < coins.length; i){_adjustAllowances(asgard, coins[i].asset, coins[i].a…

通俗易懂的講解SpringBean生命周期

&#x1f4d5;我是廖志偉&#xff0c;一名Java開發工程師、《Java項目實戰——深入理解大型互聯網企業通用技術》&#xff08;基礎篇&#xff09;、&#xff08;進階篇&#xff09;、&#xff08;架構篇&#xff09;清華大學出版社簽約作家、Java領域優質創作者、CSDN博客專家、…

深入理解 `git pull --rebase` 與 `--allow-unrelated-histories`:區別、原理與實戰指南

&#x1f680; git pull --rebase vs --allow-unrelated-histories 全面解析 在日常使用 Git 時&#xff0c;我們經常遇到兩種拉取遠程代碼的方式&#xff1a;git pull --rebase 和 git pull --allow-unrelated-histories。它們的區別是什么&#xff1f;各自適用哪些場景&…