创建通过一组曲线和点的曲面,眼镜片设计和加工软件

在我们一般人的认知中,眼镜片无非就是近视眼睛片、老花眼镜片,或者平光镜片。而真正进入这个行业,才了解到原来眼镜片会有这么多的种类,面型除了球光、散光,还有环焦、离焦、渐进、非球等,还有各种功能的镀膜。

所有类型镜片制作的第一步,就是要把面型加工出来,比如在一个毛坯片上加工出近似500度,散光600度。现有加工用机床中,高端的是进口的国外机床,如劳尔,中低端即使国产的也很少。而面型设计软件和加工数据生成cad、cam软件

更是了了无几,完全被收费昂贵的国外品牌控制。中国作为眼睛片第一大生产国,镜片行业竟然没有有竞争力的软硬件产品,感觉不可思议。

两年前我们开发了一款中端镜片铣磨设备,在克服了各种困难后,现在终于可以放心销售了,同时也获得了用户的好评。

下面是软件的几个界面的截图:

  

 

 

 下面是加工过程的截图:

  

 

 在开发这个cad/cam过程中,首要的是根据设定的参数,构建镜片曲面。球光散光环焦镜片是通过0度和90度曲线插补出一个曲面,下面是我使用Opencascade创建环焦面型的核心代码。

  

 

 

 

1.样条曲线1(0度)

使用occ函数GeomAPI_Interpolate,有一组点创建一个样条曲线。

2.样条曲线2(90度)

同样使用occ函数GeomAPI_Interpolate,有一组点创建一个样条曲线。

3.样条曲线3(最外圈边界)

 根据给定参数,计算出边界的插补点(没1度计算一个点)。也是使用GeomAPI_Interpolate创建一个样条曲线。

4.创建曲面

GeomPlate_BuildPlateSurface BPSurf(3, 15, 2);
                        Handle(BRepAdaptor_HCurve) C1 = new BRepAdaptor_HCurve(BRepAdaptor_Curve(BRepBuilderAPI_MakeEdge(aBSpline1)));
                        Handle(BRepFill_CurveConstraint) Cont1 = new BRepFill_CurveConstraint(C1, 0);
                        BPSurf.Add(Cont1);
                        Handle(BRepAdaptor_HCurve) C2 = new BRepAdaptor_HCurve(BRepAdaptor_Curve(BRepBuilderAPI_MakeEdge(aBSpline2)));
                        Handle(BRepFill_CurveConstraint) Cont2 = new BRepFill_CurveConstraint(C2, 0);
                        BPSurf.Add(Cont2);
                        Handle(BRepAdaptor_HCurve) C3 = new BRepAdaptor_HCurve(BRepAdaptor_Curve(BRepBuilderAPI_MakeEdge(aBSpline3)));
                        Handle(BRepFill_CurveConstraint) Cont3 = new BRepFill_CurveConstraint(C3, 0);
                        BPSurf.Add(Cont3);
BPSurf.Perform();
Standard_Integer MaxSeg = 9;
                        Standard_Integer MaxDegree = 8;
                        Standard_Integer CritOrder = 0;
                        Standard_Real dmax, Tol = 0.0001;
                        Handle(GeomPlate_Surface) PSurf = BPSurf.Surface();
                        dmax = Max(0.0001, 10 * BPSurf.G0Error());
                        GeomPlate_MakeApprox Mapp(PSurf, Tol, MaxSeg, MaxDegree, dmax, CritOrder);
aBSplineSurface = Mapp.Surface();

 

posted @ 2021-08-13 12:16  YiShan-CADCAM  阅读(938)  评论(0)    收藏  举报