

由claude 自定义skill生成












Gemini 3.1 Pro
Gemini生成的Python建模源码:
python
import FreeCAD as Appimport Partfrom FreeCAD import Vectorimport mathdef create_perfect_usv(): doc_name = "Industrial_USV_Perfect_Alignment" try: App.closeDocument(doc_name) except: pass doc = App.newDocument(doc_name) # ================= 配色体系 ================= C_HULL = (0.15, 0.15, 0.17); C_DECK = (0.5, 0.5, 0.53) C_WHITE = (0.85, 0.85, 0.88); C_ORANGE = (1.0, 0.35, 0.0) C_BLACK = (0.05, 0.05, 0.07); C_SOLAR = (0.05, 0.1, 0.3) def add_obj(shape, name, color, group=None): obj = doc.addObject("Part::Feature", name) obj.Shape = shape obj.ViewObject.ShapeColor = color if group: group.addObject(obj) return obj def make_stealth_box(L, W, H, inset): b_pts = [Vector(-L/2,-W/2,0), Vector(L/2,-W/2,0), Vector(L/2,W/2,0), Vector(-L/2,W/2,0), Vector(-L/2,-W/2,0)] t_pts = [Vector(-L/2+inset,-W/2+inset,H), Vector(L/2-inset,-W/2+inset,H), Vector(L/2-inset,W/2-inset,H), Vector(-L/2+inset,W/2-inset,H), Vector(-L/2+inset,-W/2+inset,H)] return Part.makeLoft([Part.makePolygon(b_pts), Part.makePolygon(t_pts)], True) # ================= 核心布局参数 (全局锚点) ================= L_TOTAL = 6000 SPACING = 1800 R_HULL = 350 # 关键部位的 X 轴中心位置 X_CABIN_CENTER = 3000 # 机舱中心 X_MAST_FRONT = 4500 # 桅杆所在位置 X_RTK_BACK = 2200 # RTK天线所在位置 # Z 轴高度基准 Z_DECK_TOP = 480 # 甲板顶面高度 Z_CABIN_TOP = Z_DECK_TOP + 500 # 机舱顶面 (980) Z_MAST_TOP = 2000 # 桅杆横梁高度 # 1. 船体与甲板 for side in [1, -1]: y = (SPACING/2) * side p_mid = Part.makeCylinder(R_HULL, 4000, Vector(1000,y,0), Vector(1,0,0)) p_bow = Part.makeCone(R_HULL, 0, 1000, Vector(5000,y,0), Vector(1,0,0)) p_stern = Part.makeCone(R_HULL*0.6, R_HULL, 1000, Vector(0,y,0), Vector(1,0,0)) add_obj(p_mid.fuse(p_bow).fuse(p_stern), f"Hull_{side}", C_HULL) deck = make_stealth_box(4500, SPACING+400, 150, 100) deck.translate(Vector(L_TOTAL/2, 0, 330)) add_obj(deck, "Main_Deck", C_DECK) # 2. 机舱与太阳能板 cabin = make_stealth_box(2200, 1200, 500, 150) cabin.translate(Vector(X_CABIN_CENTER, 0, Z_DECK_TOP)) add_obj(cabin, "Cabin", C_WHITE) solar = Part.makeBox(1500, 800, 10) solar.translate(Vector(X_CABIN_CENTER-750, -400, Z_CABIN_TOP)) add_obj(solar, "Solar_Panel", C_SOLAR) # 3. 桅杆系统 (Mast) - 使用直接坐标定义连线,确保不脱节 # 横梁 mast_crossbar = Part.makeCylinder(40, SPACING, Vector(X_MAST_FRONT, -SPACING/2, Z_MAST_TOP), Vector(0,1,0)) add_obj(mast_crossbar, "Mast_Crossbar", C_HULL) # 倾斜支柱 - 从甲板连向横梁两端 for side in [1, -1]: p_bot = Vector(X_MAST_FRONT-300, (SPACING/2-100)*side, Z_DECK_TOP) # 脚部 p_top = Vector(X_MAST_FRONT, (SPACING/2-100)*side, Z_MAST_TOP) # 顶部 leg = Part.makeCylinder(40, (p_top-p_bot).Length, p_bot, p_top-p_bot) add_obj(leg, f"Mast_Leg_{side}", C_HULL) # 4. 感知设备 (挂在横梁上) # LiDAR - 放在横梁中间上方 lidar = Part.makeCylinder(50, 100, Vector(X_MAST_FRONT, 0, Z_MAST_TOP+40), Vector(0,0,1)) add_obj(lidar, "LiDAR", C_WHITE) # PTZ 相机 - 挂在横梁中间下方 ptz_base = Part.makeBox(100, 100, 50) ptz_base.translate(Vector(X_MAST_FRONT-50, -50, Z_MAST_TOP-90)) ptz_ball = Part.makeSphere(70) ptz_ball.translate(Vector(X_MAST_FRONT, 0, Z_MAST_TOP-150)) add_obj(ptz_base.fuse(ptz_ball), "Camera_PTZ", C_WHITE) # 5. 通信与雷达 (放在机舱顶上) # 航海雷达 radar_base = Part.makeCylinder(40, 200, Vector(X_CABIN_CENTER+500, 0, Z_CABIN_TOP), Vector(0,0,1)) radar_bar = Part.makeBox(100, 1000, 40) radar_bar.translate(Vector(X_CABIN_CENTER+500-50, -500, Z_CABIN_TOP+200)) add_obj(radar_base.fuse(radar_bar), "Navigation_Radar", C_WHITE) # RTK 天线 for side in [1, -1]: y = 450 * side pole = Part.makeCylinder(15, 500, Vector(X_RTK_BACK, y, Z_CABIN_TOP), Vector(0,0,1)) head = Part.makeCylinder(60, 30, Vector(X_RTK_BACK, y, Z_CABIN_TOP+500), Vector(0,0,1)) add_obj(pole.fuse(head), f"RTK_{side}", C_WHITE) # 卫星穹顶 (Sat-Dome) sat_base = Part.makeCylinder(180, 100, Vector(X_CABIN_CENTER-600, 0, Z_CABIN_TOP), Vector(0,0,1)) sat_dome = Part.makeSphere(180) sat_dome.translate(Vector(X_CABIN_CENTER-600, 0, Z_CABIN_TOP+100)) add_obj(sat_base.fuse(sat_dome), "SatCom_Dome", C_WHITE) # 6. 推进与声呐 # 喷水推进器 for side in [1, -1]: jet = Part.makeCylinder(200, 500, Vector(-200, (SPACING/2)*side, 0), Vector(1,0,0)) nozzle = Part.makeCone(200, 100, 300, Vector(-500, (SPACING/2)*side, 0), Vector(1,0,0)) add_obj(jet.fuse(nozzle), f"WaterJet_{side}", C_BLACK) # 水下声呐及连接杆 sonar_pole = Part.makeCylinder(30, 800, Vector(X_MAST_FRONT, 0, -400), Vector(0,0,1)) sonar_head = Part.makeBox(400, 250, 120) sonar_head.translate(Vector(X_MAST_FRONT-200, -125, -520)) add_obj(sonar_pole.fuse(sonar_head), "Sonar_System", C_ORANGE) # 界面更新 doc.recompute() try: import FreeCADGui FreeCADGui.ActiveDocument.ActiveView.viewAxometric() FreeCADGui.ActiveDocument.ActiveView.fitAll() except: passcreate_perfect_usv()