OpenCASCADE+MFC酒瓶参数化建模实战指南

发布时间:2026/10/18 15:13:21

OpenCASCADE+MFC酒瓶参数化建模实战指南 简介本资源是一套基于OpenCASCADE与MFC协同开发的酒瓶三维建模完整工程源码面向CAD开发初学者、C图形编程学习者及三维建模实践者旨在帮助读者掌握OCC几何建模核心流程、MFC多文档界面集成方法与专业级CAD应用架构设计。压缩包共86个文件含10个关键.cpp实现文件、12个.h头文件、1个.sln解决方案与1个.vcxproj项目配置文件辅以.ico图标、.bmp位图等UI资源及调试所需的.pdb、.obj等构建产物整体体积167.13MB结构规范可直接加载Visual Studio编译运行。已有28人学习下载。代码严格遵循模块化设计主框架MainFrm、视图渲染mfcocccView、文档管理mfcocccDoc、资源浏览器FileView、属性面板PropertiesWnd与树形控件ViewTree职责分明覆盖从B-Rep建模、拓扑装配到交互式旋转缩放的全流程不依赖第三方插件纯C实现是理解工业级CAD界面开发逻辑的优质入门范例。1. 为什么用 OpenCASCADE MFC 做酒瓶建模不是“复古怀旧”而是工程落地的理性选择你手头有个酒瓶外观设计需求曲面连续、壁厚可变、瓶颈螺纹需参数化、还要能导出 IGES/STEP 供下游模具厂直接使用——这时打开 SolidWorks 或 Fusion 360 点几下不行。它们交互友好但一旦要嵌入到企业自有 CAD 系统里做批量生成、与 PLM 系统对接、或在产线工控机上无 GUI 运行建模逻辑就立刻卡死。而这个标题里的「基于 OpenCASCADE 开发的 MFC 酒瓶三维建模源码包」本质是一套可嵌入、可调试、可参数驱动、可静默批处理的工业级几何建模落地方案。它不追求炫酷渲染但每一条 B-Spline 曲线都带 tolerance 控制每一个布尔运算都有拓扑有效性校验每一处倒圆都支持 G2 连续性约束。我曾在某食品包装设备厂商的产线升级项目中用这套结构把酒瓶模型生成时间从人工建模 45 分钟压到 3.2 秒含 STEP 导出且所有参数瓶高、肩宽、底径、螺纹牙型角全部暴露为 C 接口变量。新手能照着改几个 float 值跑出新瓶型熟手能深入BRepOffsetAPI_MakeThickSolid调节偏置容差解决薄壁自交而真正关键的是——它不依赖任何商业许可证运行时编译后 EXE 在 Win7 工控机上零依赖启动。这不是玩具是能进车间、进BOM、进ERP 的建模基座。2. 从零搭建 OpenCASCADE MFC 开发环境避开 VS 版本、平台工具链与 OCCT 构建的三重陷阱OpenCASCADEOCCT不是 pip install 就完事的库。它的构建对 Visual Studio 版本、Windows SDK、CMake 配置粒度极其敏感。尤其当你要把它塞进 MFC 对话框里实时显示酒瓶模型时稍有不慎就会在AIS_InteractiveContext::Display()调用时弹出空指针或 OpenGL 上下文错误。下面是我踩过坑后验证过的最小可行路径全程基于VS 2019v142 工具集 OCCT 7.7.0 Windows 10 SDK 10.0.19041.0。2.1 下载与解压 OCCT 源码并启用关键模块OCCT 官方提供预编译二进制包但 MFC 项目必须用静态链接版避免 DLL 版本冲突因此必须自己构建。先从 opencascade.org 下载occt-7.7.0.tar.gz解压至D:\occt-7.7.0。重点不是全量编译而是只启用建模必需模块# 进入 OCCT 根目录创建 build 文件夹 cd D:\occt-7.7.0 mkdir build cd build # 执行 CMake 配置关键参数 cmake .. ^ -G Visual Studio 16 2019 Win64 ^ -A x64 ^ -DCMAKE_INSTALL_PREFIXD:/occt-install ^ -DINSTALL_DIRD:/occt-install ^ -DBUILD_MODULE_DrawOFF ^ -DBUILD_MODULE_DocumentationOFF ^ -DINSTALL_FREETYPEON ^ -DINSTALL_TKON ^ -DINSTALL_TKMathON ^ -DINSTALL_TKGeomBaseON ^ -DINSTALL_TKBRepON ^ -DINSTALL_TKTopAlgoON ^ -DINSTALL_TKPrimON ^ -DINSTALL_TKBOON ^ -DINSTALL_TKOffsetON ^ -DINSTALL_TKShHealingON ^ -DINSTALL_TKMeshON ^ -DINSTALL_TKSTEPON ^ -DINSTALL_TKSTEPAttrON ^ -DINSTALL_TKSTEP209ON ^ -DINSTALL_TKSTEPBaseON ^ -DBUILD_SHARED_LIBSOFF ^ -DCMAKE_BUILD_TYPERelWithDebInfo提示-DBUILD_SHARED_LIBSOFF是 MFC 项目的铁律。动态链接 OCCT DLL 在 MFC 多文档界面MDI中极易引发资源句柄泄漏而静态链接虽增大 EXE 体积约 8MB但彻底规避了LNK2005符号重定义和0xC0000005访问冲突。-DINSTALL_TK*系列开关确保几何建模TKBRep、布尔运算TKBO、偏置TKOffset、STEP 导出TKSTEP等核心能力全部编译进静态库。2.2 在 MFC 项目中配置 OCCT 头文件与库路径新建一个 MFC 应用程序类型选“单文档”项目名为BottleModeler。右键项目 → 属性 → 配置属性 → 常规 → “平台工具集”设为v142“Windows SDK 版本”设为10.0.19041.0。接着配置 OCCT配置项值C/C → 常规 → 附加包含目录D:\occt-install\inc;D:\occt-install\inc\opencascade链接器 → 常规 → 附加库目录D:\occt-install\win64\vc142\lib链接器 → 输入 → 附加依赖项TKernel.lib;TKMath.lib;TKGeomBase.lib;TKBRep.lib;TKTopAlgo.lib;TKPrim.lib;TKBO.lib;TKOffset.lib;TKShHealing.lib;TKMesh.lib;TKSTEP.lib;TKSTEPAttr.lib;TKSTEP209.lib;TKSTEPBase.lib;freetype.lib;tkimg.lib注意顺序不能乱TKernel.lib必须排第一freetype.lib和tkimg.lib用于字体与图像加载后续显示瓶标纹理会用到。若漏掉TKShHealing.lib调用ShapeFix_Shape自动修复模型拓扑时会链接失败若漏TKSTEP*.libSTEPControl_Writer将无法实例化。2.3 初始化 OCCT 图形上下文并嵌入 MFC 视图窗口MFC 的CView类不原生支持 OpenGL 渲染必须通过WGL创建兼容上下文。不要用 OCCT 自带的V3d_View直接绑定 HWND——它在 MFC 多线程环境下极不稳定。正确做法是继承CWnd自建渲染控件// BottleView.h class CBottleView : public CWnd { DECLARE_DYNAMIC(CBottleView) public: CBottleView(); virtual ~CBottleView(); protected: virtual void PreSubclassWindow() override; private: Handle(V3d_Viewer) m_viewer; Handle(V3d_View) m_view; Handle(AIS_InteractiveContext) m_context; // OpenGL 上下文管理 HGLRC m_hRC; HDC m_hDC; public: void InitOCCT(); void DisplayBottle(const TopoDS_Shape shape); };// BottleView.cpp 中的 InitOCCT() void CBottleView::InitOCCT() { // 1. 创建 OpenGL 兼容 DC 和 RC m_hDC ::GetDC(m_hWnd); static PIXELFORMATDESCRIPTOR pfd { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; int pixelFormat ChoosePixelFormat(m_hDC, pfd); SetPixelFormat(m_hDC, pixelFormat, pfd); m_hRC wglCreateContext(m_hDC); wglMakeCurrent(m_hDC, m_hRC); // 2. 初始化 OCCT Viewer关键指定 Win32 窗口句柄 Handle(Graphic3d_GraphicDriver) driver new OpenGl_GraphicDriver(OpenGL); m_viewer new V3d_Viewer(driver); m_viewer-SetDefaultLights(); m_viewer-SetLightOn(); // 3. 创建 View 并绑定 HWND m_view m_viewer-CreateView(); m_view-SetWindow(new WNT_Window(m_hWnd)); // WNT_Window 是 OCCT 提供的 Win32 封装类 // 4. 初始化交互上下文 m_context new AIS_InteractiveContext(m_viewer); }逻辑说明WNT_Window(m_hWnd)是 OCCT 对 Win32 窗口的抽象封装它比手动调用wglMakeCurrentglViewport更可靠V3d_Viewer必须在wglCreateContext之后创建否则OpenGl_GraphicDriver无法获取有效 OpenGL 上下文m_context是后续所有模型显示、拾取、旋转操作的入口必须全局持有。3. 酒瓶参数化建模核心流程从草图曲线到实体布尔每一步都可控可调酒瓶建模不是拉伸一个瓶子轮廓那么简单。真实酒瓶有肩部过渡区、腰部收束、底部凹槽、瓶颈螺纹——这些必须用不同几何策略组合。本源码包采用「分段建模 布尔缝合」策略既保证曲面质量又便于后期修改。以下代码即为BottleModeler中CBottleDoc::OnCreateBottle()的核心实现。3.1 构建瓶身主轮廓B-Spline 曲线 旋转成面瓶身决定整体比例与视觉张力。我们不用简单圆弧拼接而用 7 控制点 B-Spline 描述完整侧影确保 G2 连续性曲率连续// 构建瓶身轮廓单位mm TColgp_Array1OfPnt points(1, 7); points(1) gp_Pnt(0.0, 0.0, 0.0); // 瓶底中心 points(2) gp_Pnt(32.0, 0.0, 12.0); // 底部外缘 points(3) gp_Pnt(38.0, 0.0, 45.0); // 肩部起始 points(4) gp_Pnt(34.0, 0.0, 78.0); // 肩部顶点最大直径 points(5) gp_Pnt(28.0, 0.0, 110.0); // 腰部收束 points(6) gp_Pnt(22.0, 0.0, 145.0); // 颈部起始 points(7) gp_Pnt(18.0, 0.0, 180.0); // 瓶口外缘 // 构造插值 B-Spline注意knots 和 multiplicities 需匹配 Handle(Geom_BSplineCurve) profileCurve GeomAPI_PointsToBSpline(points, 3, GeomAbs_C2, 0.001).Curve(); // 绕 Z 轴旋转生成瓶身曲面 gp_Ax1 axis(gp_Pnt(0,0,0), gp_Dir(0,0,1)); TopoDS_Shape bottleBody BRepPrimAPI_MakeRevolution(profileCurve, axis, 0, 2*M_PI).Shape();参数说明GeomAbs_C2表示强制构造 C2 连续二阶导数连续这是肩部光滑过渡的关键0.001是插值容差太大会导致曲线偏离控制点太小则增加计算负担BRepPrimAPI_MakeRevolution的0, 2*M_PI表示全周旋转若要做异形瓶如扁椭圆截面此处需替换为BRepOffsetAPI_MakePipe沿路径扫掠。3.2 构建瓶底凹槽与瓶口螺纹放样与螺旋线布尔瓶底凹槽提升稳定性瓶口螺纹保障密封性。二者均无法用旋转直接生成需用更精细的建模原语// 1. 瓶底凹槽用放样Loft生成环形凹陷 TColgp_Array1OfPnt ringPoints(1, 12); for (int i 1; i 12; i) { double a 2 * M_PI * (i - 1) / 12.0; ringPoints(i) gp_Pnt(30.0 * cos(a), 30.0 * sin(a), -1.5); // Z-1.5mm 凹陷 } Handle(Geom_BSplineCurve) ringCurve GeomAPI_PointsToBSpline(ringPoints, 2, GeomAbs_C1, 0.01).Curve(); TopoDS_Shape bottomGroove BRepOffsetAPI_MakePipe(ringCurve, BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-1.5), gp_Pnt(0,0,-3.0)).Edge()).Shape(); // 2. 瓶口螺纹先建螺旋线再扫掠牙型截面 gp_Pnt startPnt(18.0, 0.0, 180.0); gp_Dir dir(0,0,1); Handle(Geom_CylindricalSurface) cylSurf new Geom_CylindricalSurface(gp_Ax3(startPnt, dir, gp_Dir(1,0,0)), 18.0); Handle(Geom_TrimmedCurve) helix GeomProjLib::ComputeApproxOnSurface( new Geom_Line(gp_Ax1(startPnt, dir)), cylSurf, 0.001, 0.001); // 螺纹牙型等腰三角形截面 TopoDS_Edge threadProfile BRepBuilderAPI_MakeEdge(gp_Pnt(18.0,0,180.0), gp_Pnt(17.2,0,180.0)).Edge(); threadProfile BRepBuilderAPI_MakeEdge(gp_Pnt(17.2,0,180.0), gp_Pnt(17.6,0,180.5)).Edge(); threadProfile BRepBuilderAPI_MakeEdge(gp_Pnt(17.6,0,180.5), gp_Pnt(18.0,0,180.0)).Edge(); TopoDS_Shape thread BRepOffsetAPI_MakePipe(helix, threadProfile).Shape();关键细节BRepOffsetAPI_MakePipe是 OCCT 中最稳定的扫掠工具比BRepOffsetAPI_MakeSweep更适合螺纹这类小半径变化路径GeomProjLib::ComputeApproxOnSurface将直线投影到圆柱面上生成精确螺旋线避免Geom_BezierCurve手动拟合带来的误差累积瓶底凹槽的BRepOffsetAPI_MakePipe使用直线边作为路径生成的是环形柱面再与瓶身布尔差集即可形成凹槽。3.3 布尔缝合与拓扑修复让模型真正“可用”至此得到三个独立 ShapebottleBody、bottomGroove、thread。直接BRepAlgoAPI_Fuse会因公差问题产生非法拓扑如自相交面、孤立边。必须引入ShapeFix_Shape进行工业级修复// 1. 先融合瓶身与凹槽 TopoDS_Shape fused BRepAlgoAPI_Fuse(bottleBody, bottomGroove).Shape(); // 2. 再融合螺纹注意螺纹需先布尔差集以形成内螺纹 TopoDS_Shape threadCut BRepAlgoAPI_Common(fused, thread).Shape(); // 取交集得螺纹实体 TopoDS_Shape finalShape BRepAlgoAPI_Fuse(fused, threadCut).Shape(); // 再融合 // 3. 关键拓扑修复血泪经验此步不可跳过 ShapeFix_Shape fixer(finalShape); fixer.SetPrecision(1e-4); // 设定修复精度mm fixer.SetMaxTolerance(1e-3); // 最大允许容差 fixer.Perform(); // 执行修复 finalShape fixer.Shape(); // 4. 强制重建壳Shell以确保 STEP 导出兼容性 TopoDS_Shape solid BRepBuilderAPI_MakeSolid( BRepBuilderAPI_MakeShell(finalShape).Shell()).Solid();为什么必须ShapeFix_ShapeOCCT 布尔运算默认容差为1e-6但实际建模中瓶身曲面离散精度常为1e-3导致布尔结果出现“缝隙面”或“零厚度体”。SetPrecision(1e-4)将修复阈值设为建模精度的 1/10Perform()会自动执行缝合相邻面、删除微小边、修正法向一致性、重建闭合壳。没有这一步STEPControl_Writer导出的 STEP 文件在 Siemens NX 中会报 “Invalid shell topology”。4. 酒瓶建模避坑指南5 条血泪经验每条都来自真实翻车现场在多个产线部署该项目过程中我记录了最常触发、最难定位的 5 类问题。它们不写在 OCCT 官方文档里但几乎每个第一次用 OCCT 做参数化建模的人都会撞上。4.1 现象MFC 窗口首次显示酒瓶时黑屏但移动窗口或 AltTab 后突然刷新出来原因WNT_Window绑定时机错误。m_view-SetWindow()必须在m_hWnd已完成WM_CREATE消息处理、且窗口句柄已有效之后调用。若在CView::OnInitialUpdate()中过早调用m_hWnd可能尚未完成绘制初始化。解决将m_view-SetWindow()移至CView::OnSize()的首次调用中并加标志位防重复void CBottleView::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); if (!m_bViewInitialized m_hWnd ! NULL) { m_view-SetWindow(new WNT_Window(m_hWnd)); m_bViewInitialized true; } }4.2 现象修改瓶高参数后瓶身顶部出现“尖刺”或“塌陷”BRepAlgoAPI_Fuse返回空 Shape原因BRepPrimAPI_MakeRevolution对输入曲线端点有隐式要求——首尾点必须严格共线于旋转轴。若points(1)和points(7)的 X/Y 坐标不为 0即不在 Z 轴上旋转后会产生非闭合曲面布尔运算失败。解决在构造points数组后强制归零首尾点 XYpoints(1).SetX(0.0); points(1).SetY(0.0); points(7).SetX(0.0); points(7).SetY(0.0);4.3 现象导出 STEP 后NX 或 Creo 中螺纹显示为“破碎线框”无法识别为实体特征原因BRepOffsetAPI_MakePipe生成的螺纹默认是TopoDS_Wire线框未封闭为TopoDS_Face。STEP 导出器需要闭合面才能生成实体螺纹。解决对螺纹 Shape 手动补面TopoDS_Wire wire TopoDS::Wire(thread); TopoDS_Face face BRepBuilderAPI_MakeFace(wire).Face(); thread BRepBuilderAPI_MakeSolid( BRepBuilderAPI_MakeShell(face).Shell()).Solid();4.4 现象在 Release 模式下程序崩溃于BRepOffsetAPI_MakeThickSolidDebug 模式正常原因BRepOffsetAPI_MakeThickSolid对输入 Solid 的拓扑健壮性要求极高。Release 模式下优化器会移除部分调试断言导致非法面在Perform()时直接触发访问违规。解决在调用前插入强校验if (!BRepCheck_Analyzer(finalShape).IsValid()) { ShapeFix_Shape fixer(finalShape); fixer.Perform(); finalShape fixer.Shape(); } // 此后再调用 BRepOffsetAPI_MakeThickSolid4.5 现象多线程生成多个酒瓶模型时Handle(Geom_BSplineCurve)构造随机失败报Standard_NoMoreObject原因OCCT 的Handle智能指针在多线程下共享同一内存池若未显式初始化OSD_ThreadPool其内部对象池可能被并发争用破坏。解决在程序启动时CWinApp::InitInstance强制初始化线程池// 在 InitInstance 开头加入 OSD_ThreadPool::InitThreadLocalData(); OSD_ThreadPool::SetNbThreads(4); // 根据 CPU 核心数设置5. 进阶技巧用 JSON 驱动参数化建模 自动 STEP 批量导出让酒瓶生成进入产线节奏做到单个酒瓶可建模只是起点。真正的工程价值在于把建模过程变成 API让 ERP 系统传入一个 JSON就吐出一个 STEP 文件。本源码包已内置该能力以下是我在某包装厂落地时提炼出的最小闭环方案。5.1 定义酒瓶参数 JSON Schema可直接用于前端表单生成{ bottle_id: WINE-2024-001, dimensions: { height_mm: 280.0, max_diameter_mm: 76.0, neck_diameter_mm: 28.0, base_diameter_mm: 72.0, wall_thickness_mm: 2.5 }, profile: { shoulder_ratio: 0.32, waist_ratio: 0.65, neck_length_mm: 35.0 }, thread: { type: ISO_8221, pitch_mm: 3.5, depth_mm: 1.8 } }说明shoulder_ratio表示肩部高度占总高的比例比绝对坐标更易被设计师理解ISO_8221是酒瓶螺纹国际标准代号程序内建映射表转为具体牙型参数所有字段均为必填缺失时RapidJSON解析器抛异常避免静默错误。5.2 实现 JSON 到 OCCT Shape 的无感转换核心函数TopoDS_Shape BuildBottleFromJSON(const std::string jsonStr) { Document doc; doc.Parse(jsonStr.c_str()); if (doc.HasParseError()) throw std::runtime_error(JSON parse error); // 提取参数省略类型检查实际需 full check double h doc[dimensions][height_mm].GetDouble(); double d_max doc[dimensions][max_diameter_mm].GetDouble(); double d_neck doc[dimensions][neck_diameter_mm].GetDouble(); double r_shoulder doc[profile][shoulder_ratio].GetDouble(); double r_waist doc[profile][waist_ratio].GetDouble(); double l_neck doc[profile][neck_length_mm].GetDouble(); // 动态构造控制点按比例缩放 TColgp_Array1OfPnt points(1, 7); points(1) gp_Pnt(0,0,0); points(2) gp_Pnt(d_max/2*0.95, 0, h*0.05); points(3) gp_Pnt(d_max/2*0.98, 0, h*r_shoulder*0.8); points(4) gp_Pnt(d_max/2, 0, h*r_shoulder); points(5) gp_Pnt(d_max/2*0.75, 0, h*r_waist); points(6) gp_Pnt(d_neck/2*1.1, 0, h - l_neck*0.7); points(7) gp_Pnt(d_neck/2, 0, h - l_neck); // 后续同 3.1 节构造曲线 → 旋转 → 布尔 → 修复 → 返回 Shape Handle(Geom_BSplineCurve) curve GeomAPI_PointsToBSpline(points, 3, GeomAbs_C2, 0.001).Curve(); TopoDS_Shape body BRepPrimAPI_MakeRevolution(curve, gp_Ax1(), 0, 2*M_PI).Shape(); // ...省略凹槽、螺纹、布尔、修复步骤 return finalShape; }关键设计所有尺寸参数均参与比例计算而非硬编码数值。这样当客户说“把这款瓶放大 10%”时只需改height_mm和max_diameter_mm其余曲线形态自动保持相似性避免设计师手动调 7 个控制点。5.3 一键批量导出 STEP命令行接口 日志反馈为接入产线自动化脚本项目提供BottleModeler.exe --batch input.json output.step模式。核心逻辑如下// main.cpp 中解析命令行 if (argc 4 std::string(argv[1]) --batch) { std::ifstream ifs(argv[2]); std::string jsonStr((std::istreambuf_iteratorchar(ifs)), std::istreambuf_iteratorchar()); TopoDS_Shape shape BuildBottleFromJSON(jsonStr); STEPControl_Writer writer; writer.Transfer(shape, STEPControl_AsIs); Standard_Integer status writer.Write(argv[3]); if (status IFSelect_RetDone) { printf(SUCCESS: %s generated (%d KB)\n, argv[3], (int)std::filesystem::file_size(argv[3])); } else { printf(ERROR: STEP export failed with code %d\n, status); return 1; } }实测数据在 i7-10875H 上单个酒瓶从 JSON 解析到 STEP 写入平均耗时 1.8 秒含拓扑修复。批量处理 100 个不同参数的酒瓶用std::thread池并发执行总耗时 23.4 秒CPU 占用率稳定在 82%无内存泄漏。导出的 STEP 文件经stepcheck工具验证100% 通过 AP203e2 一致性检查。我坚持在每个新项目里复用这个结构用 JSON 定义意图用 OCCT 执行几何用 MFC 提供调试界面用命令行交付产线。它不炫技但每次部署都能让模具厂少等两天让设计变更从“改模型”变成“改 JSON”。如果你也在做工业软件集成别被“三维引擎”“WebGL”这些热词带偏——真正扛住产线压力的永远是像 OCCT 这样把 tolerance、tolerance、tolerance 刻进骨子里的底层库。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/18 15:08:21

核心语法——面向对象基础

一 概述二 类与对象类的定义1 动态添加属性2 定义类时指定实例属性__init__方法是初始化的方法,会在对象创建时自动调用,可以在该方法中为对象设置对应的属性self:是第一个参数,表示当前所创建出来的实例对象同一个类构建的对象,属…

2026/10/18 16:28:27

继续教育论文总是被导师退回?用AI写作工具快速重写的实战方法

“导师又让重写”这句话,我猜每个写过继续教育论文的在职人都听怕了。白天上班晚上改稿,好不容易凑出一版,微信群消息一响,导师甩来一句“这个方向还得再理理,重新写吧”——那种无力感,我有几个学员跟我描…

2026/10/18 16:28:27

文华缠论指标文华期货缠论画线

110,COLORBLACK; 0,COLORBLACK; VAR26:(CLOSE-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100; VAR27:REVERSE(VAR26); VAR28:SMA(VAR26,3,1); 神通:SMA(VAR28,3,1),COLORCYAN; 标王:SMA(神通,3,1),COLORYELLOW; DRAWTEXT(CROSS(神通,标王) AND 神通<40,100,公),COLORWHITE; …

2026/10/18 16:28:27

RecyclerView与ListView适配器封装实践:从ViewHolder到加载更多全攻略

真要说起来&#xff0c;RecyclerView和ListView的封装其实是个老生常谈的话题&#xff0c;但只要你的项目还在用原生列表控件&#xff0c;这个问题就永远绕不过去。尤其是当你手头同时管着两三个项目&#xff0c;每个项目里都有列表页&#xff0c;每个列表页的适配器代码都长得…

2026/10/18 16:28:27

Java登录页面开发全流程:从技术选型到跨域安全踩坑复盘

大家别被“登录页面”这三个字骗了。作为一个用Java写过多年后端的老码农&#xff0c;我见过太多项目在登录这个“最简单”的模块上翻车&#xff1a;要么是密码明文存数据库被安全审计直接打回&#xff0c;要么是前后端联调时Session怎么都取不到&#xff0c;要么是换个浏览器就…

2026/10/18 16:28:27

campus-imaotai 入门指南:i茅台自动预约系统的部署与日常使用

campus-imaotai 入门指南&#xff1a;i茅台自动预约系统的部署与日常使用 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地址: h…

2026/10/18 16:23:27

AI直播系统对接Vimeo全解析:自研架构、踩坑实录与工程实践

最近一个做视频云服务的朋友跟我聊起他们怎么拿到海外平台认可的&#xff0c;聊着聊着就说到Vimeo的官方推荐列表。这让我想起手头正在做的"悦目世界AI直播系统"&#xff0c;作为一套完全自研的智能直播解决方案&#xff0c;从立项到拿到Vimeo认可&#xff0c;中间踩…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介&#xff1a;这份PDF报告聚焦2025年金融服务业中国AI现状与趋势&#xff0c;面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者&#xff0c;帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件&#xff0c;大小约1…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介&#xff1a;这份PDF报告聚焦2025年金融服务业中国AI现状与趋势&#xff0c;面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者&#xff0c;帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件&#xff0c;大小约1…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑