发明内容
为解决上述问题,本发明提供了一种基于B/S架构的云CAD平台的二次开发方法,在一个实施例中,所述方法包括:
步骤S1、启动本地浏览器的CAD工作空间的集成开发环境;
步骤S2、响应于用户在集成开发环境的编程操作,启动具备同步运行需求的代码校验模块和场景空间,所述场景空间包括开放建模接口调用模块,通过该模块用户能够根据功能需要,选择接口通过编程组合搭配使用,以实现预期的建模任务;
步骤S3、检测到用户的编辑完成信号后,由所述代码校验模块对集成开发环境中的代码进行语法校验;
步骤S4、将通过校验的代码发送至服务器端,由服务器端开展代码解析和执行,并实时返回执行结果;
步骤S5,将执行结果返回到本地CAD工作空间,将表征所述执行结果的模型在场景空间中展示。
进一步的,所述方法还包括:
场景空间中的几何元素支持实时拾取,拾取到的元素信息通过CAD工作空间的输出控制台展示,以作为用户编辑程序时引用指定几何元素的依据。
进一步的,所述方法还包括:
通过设置的UI操作控件启动程序自管理模式,所述程序自管理模式支持将用户编辑的程序进行保存和发布操作,其中,被保存或发布的程序与原始程序存在修改同步性。
进一步的,在所述步骤S3中,由所述代码校验模块对集成开发环境中的代码进行语法校验的过程,包括:
在客户端或浏览器端对用户编辑的程序代码进行语法检查,支持对多种语言类型的代码语法错误进行提示,提示信息直接显示在集成开发环境中;
存在语法错误的程序代码无法被传达至服务器端执行后续执行操作。
进一步的,在所述步骤S4中,将通过校验的代码发送至服务器端后,包括:
调用服务器端的解析功能模块将代码解析转换为Abstract Syntax Tree中间结构,进而经过翻译层转换为建模引擎执行支持的python脚本数据。
进一步的,在所述步骤S4中,服务器调用执行驱动服务实现程序代码的执行,包括:提供选择入口供用户选择通过覆盖模式或追加模式对程序代码进行执行处理;
若当前任务需要多次测试、调整程序参数或逻辑,通过覆盖模式执行,执行结果会覆盖当前场景空间的模型;
若基于程序继续修改编辑设定的图像场景,通过追加模式根据当前三维场景中的模型继续做针对性的特征编辑。
进一步的,在所述覆盖模式下,支持以某个模型文档为基础将已经建好的模型导入到当前文档中的操作,将建模与编程有机结合,后续编程直接在该基础模型对应的代码上继续进行。
进一步的,将用户编辑的程序进行保存操作的过程中,包括:将需要保存的目标程序结合当前用户的账户信息关联存储到相应的平台服务器数据库中,该程序可通过集成开发环境中的访问入口进行访问,访问界面采用程序列表的形式,一个程序可以用在多个建模文档中。
进一步的,将用户编辑的程序进行发布操作的过程中,包括:
用户选择发布某程序后,提交该程序到CAD平台,由平台检查程序符合基本可执行要求后,将程序状态置为已发布;
针对已发布状态的程序,设置具备共享权限CAD平台的命令界面,所述命令界面用于用户直接使用该程序,并通过集成开发环境中的发布程序访问入口调出发布程序列表;
被调用的已发布程序,其输入参数通过命令界面面向共享对象展现,执行后结果更新到三维场景中。
与最接近的现有技术相比,本发明还具有如下有益效果:
本发明提供的一种于B/S架构的云CAD平台的二次开发方法,该方法通过在云CAD工作空间设定的UI条件下启动集成开发环境,进行程序编辑;能够在浏览器中快速开始开发,无需费力搭建开发环境;
响应于用户在集成开发环境的编辑操作,启动同步运行的代码校验模块和场景空间;进一步检测到用户的编辑完成信号后,由所属代码校验模块对集成开发环境中的代码进行语法校验;语言范畴是系统定义可控的,支持语法检查、语义检查、运行时检查,有效控制程序代码编辑失误影响正常执行的概率;
进而将通过校验的代码发送至服务器端,由服务器端开展代码解析和执行,并实时返回执行结果,即时将执行结果表征的模型在场景空间中面向用户展示。能够适用于当前云CAD的运行模式,执行无需编译打包,无需重启服务器,在系统指定环境中执行,没有暴露系统内部如何工作,执行安全性高,集成开发环境与三维场景并列,程序执行结果直接反馈到三维场景中,用户能够即时观察三维场景中的执行结果和输出控制台的反馈信息。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此本发明的实施人员可以充分理解本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程并依据上述实现过程具体实施本发明。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。各项操作的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
计算机设备包括用户设备与网络设备。其中,用户设备或客户端包括但不限于电脑、智能手机、PDA等;网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算的由大量计算机或网络服务器构成的云。计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制,使用这些术语仅仅是为了将一个单元与另一个单元进行区分。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
CAD技术作为计算机辅助设计工具,广泛应用于不同领域的工程和产品设计中。CAD工具的二次开发属于计算机辅助设计领域内颇受重视的研究方向之一。
随着CAD平台的不断发展,其二次开发技术也需要适时更新,传统的CAD系统多为单机版建模工具软件,其二次开发的工作方式为:以LIB/DLL库的形式开放适量的几何建模API接口,用户可以基于其开放的接口,实现自己的功能,再编译为对应的功能库或可执行程序。然而,近年来云CAD系统技术得到快速发展,其实现原理具有B/S架构的特点,通常交互和显示服务在浏览器或移动终端中进行,而相关的几何运算在服务器端进行。该架构特点下,传统的二次开发方式无法适配云CAD系统的运行需求,主要体现为:
1).用户在浏览器端,无法直接操作、修改编辑服务端程序;
2).服务器端程序需要一直运行,供很多用户同时使用,不适于有编译导致的中断重启过程;
3).无法保障二次开发过程中平台系统的安全性,用户程序需要在独立环境中执行,且无法避免一用户的程序对其他用户的使用或者系统内部运作产生影响;
4).难以充分发挥云平台功能便利的优势,无法实现程序在不同用户间的便捷分享。
为解决上述问题,为云CAD平台提供二次开发支持,从而扩展丰富平台生态,本发明提供一种于B/S架构的云CAD平台的二次开发方法和系统。本发明的方案基于B/S架构的云CAD平台的二次开发系统,遵循B/S架构的工作方式,程序编写在客户端,解析执行在服务端,不需要编译重启服务器;在编写过程中,可以与三维模型文档交互,程序执行结果实时返回三维场景。基于此,用户可以通过编程的方式,操作、调用在服务端的几何建模引擎API,实现多样化需求,包括:自动化执行任务,完成手动交互式建模难以实现的复杂操作;引入数学函数和几何运算,支持更精确的线条拟合;应用参数式生成模型,将程序做成带输入的命令,可以分享给平台其他用户使用;灵活组织API,实现系统默认未提供的建模功能。
接下来基于附图详细描述本发明实施例的方法的详细流程,附图的流程图中示出的步骤可以在包含诸如一组计算机可执行指令的计算机系统中执行。虽然在流程图中示出了各步骤的逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例一
本发明的方案运行所需要的工作平台组件主要包括:基于浏览器的云CAD平台应用内的集成开发环境,语法解析器,平台对程序执行环境的调度模块,应用服务器内对程序解析、对脚本翻译的模块以及建模引擎服务模块;图1示出了本发明实施例一提供的基于B/S架构的云CAD平台的二次开发方法的流程示意图,参照图1可知,该方法包括如下步骤。
步骤S1、启动本地浏览器的CAD工作空间的集成开发环境;
步骤S2、响应于用户在集成开发环境的编程操作,启动具备同步运行需求的代码校验模块和场景空间,所述场景空间包括开放建模接口调用模块,通过该模块用户能够根据功能需要,选择接口通过编程组合搭配使用,以实现预期的建模任务;
步骤S3、检测到用户的编辑完成信号后,由所述代码校验模块对集成开发环境中的代码进行语法校验;
步骤S4、将通过校验的代码发送至服务器端,由服务器端开展代码解析和执行,并实时返回执行结果;
步骤S5,将执行结果返回到本地CAD工作空间,将表征所述执行结果的模型在场景空间中展示。
基于上述实施例中的执行逻辑,云CAD的工作空间通常可采用浏览器,浏览器中包含由Javascript编写的集成开发环境,通过设定的动作能够激活;如CAD工具栏中设置的二次开发UI入口。
另外的,集成开发环境中包括多种功能组件,包括语法解析器,代码文本编辑器,开发工具栏,自动提示补全工具及输出控制台等组件。
与传统二次开放方式相比,本发明的二次开发方法支持用户基于平台在浏览器中开发,快速开始,无需费力搭建开发环境,代码会在浏览器端进行语法检查,然后发送到服务器解析、执行。
其中,根据功能需要,自定义语言形式和语法规则,其语法规则与Javascript/Java近似,以尽量减少额外的学习成本,使用户能专注于造型逻辑和API调用,而非纠结于语言规则和形式。具体地,平台采用自定义语言作为二次开发语言,该语言在语法层面与Javascript/Java语言接近;
可设置支持语言包括以下类型:函数定义Function,语句Statement和表达式Expression。语句Statement类型包括:赋值语句,逻辑控制语句(if,while,for,foreach),方法调用语句等,表达式类型包括:数学运算(例如:a+b*3),方法调用(例如:myFunction(arg1,arg2)),条件比较(a>10),数组索引(myList[5])等。内置数据结构包括数组list,kvObject,原始数据类型包括:数字,字符串,布尔值。
实际应用时,本发明二次开发方法的实现方式由用户自主启动,用户通过浏览器登录云CAD平台的工作空间后,通过UI启动集成开发环境;用户在浏览器的集成开发环境中编写程序,无需额外搭建开发环境;
具体地,一个实施例中,所述集成开发环境设置有CAD平台的开放建模接口调用模块,通过该模块用户能够根据功能需要,选择接口通过编程组合搭配使用,以实现预期的建模任务。
可设置平台开放以下类型的几何建模API:划分为实体Solid,草图Sketch,装配Assembly,几何Geometry,数学Math,公共Common,辅助Util等模块,用户编程过程中可以根据功能需要,通过编程组合搭配使用API完成既定的三维建模任务。
另外的,优选的实施例中,用户在代码编辑器中输入字符时,会自动补全提示各种可能的API,便于用户选择调用;
且用户在提示列表中选择目标API,会在代码编辑器中生成对应的代码片段;
进一步地,可设置鼠标悬浮在接口上会提示API各输入参数说明,基于上述实施例提供的操作手段,实现自动提示和填充功能,可以加快开发效率,从根本上减少输入错误。
代码编写完成后,首先会在浏览器端进行语法检查,语法错误会在前端集成开发环境中提示,只有符合语法规则的程序才可以发到后端执行。
进一步地,响应于用户在集成开发环境的编辑操作,启动具备同步运行需求的代码校验模块和场景空间,所述场景空间包括三维场景空间。基于此,程序与三维场景具有可交互性,具体来说:集成开发环境与三维场景并列,程序执行结果直接反馈到三维场景中;从三维场景中可以通过鼠标拾取,能够实时获取几何元素信息,可作为变量在程序中引用。用户可以一边写程序,然后立即执行,观察三维场景中的执行结果和输出控制台的反馈信息,无需编译重启,程序的调试、试验非常便捷高效。
具体地,用户点击“执行”,将代码发送到服务器解析、执行,执行结果返回后经过解析展示到前端三维场景区域,程序输出信息在“输出控制台”展现。
进一步地,一个实施例中,在所述步骤S4中,将通过校验的代码发送至服务器端后,包括:
调用服务器端的解析功能模块将代码解析转换为Abstract Syntax Tree中间结构,进而经过翻译层转换为建模引擎执行支持的python脚本数据。
其中,一个实施例中,由所述代码校验模块对集成开发环境中的代码进行语法校验的过程,包括:
在客户端或浏览器端对用户编辑的程序代码进行语法检查,支持对多种语言类型的代码语法错误进行提示,提示信息直接显示在集成开发环境中;
存在语法错误的程序代码无法被传达至服务器端执行后续执行操作。
具体地,一个实施例中,在所述步骤S4中,服务器调用执行驱动服务实现程序代码的执行,包括:提供选择入口供用户选择通过覆盖模式或追加模式对程序代码进行执行处理;
若当前任务需要多次测试、调整程序参数或逻辑,通过覆盖模式执行,执行结果会覆盖当前场景空间的模型;
若基于程序继续修改编辑设定的图像场景,通过追加模式根据当前三维场景中的模型继续做针对性的特征编辑。
在所述覆盖模式下,支持以某个模型文档为基础将已经建好的模型导入到当前文档中的操作,将建模与编程有机结合,后续编程直接在该基础模型对应的代码上继续进行。
对程序进行解析的过程包括:自定义语言的程序内容需要经过“语法定义”,“语法解析”,“中间结构翻译”等步骤,最终会生成在服务端执行的python脚本。python脚本在建模引擎中执行,执行生成的模型的显示数据返回到客户端,通过客户端的绘制场景进行展示,相关的程序输出日志和错误信息则打印到客户端输出控制台中。
服务器端在收到待执行程序后,将代码解析转换为Abstract Syntax Tree中间结构,再经过翻译层转换为建模引擎执行的python脚本。几何建模引擎中开放的接口,通过python脚本的形式被调用。
具体地,包括如下步骤:
1)根据定义的语法Grammar,使用Parser Generator生成parser(内含lexer),如附图2所示;
2)parser提供语法检查Syntax Checking,将源程序转换为Abstract SyntaxTree(AST);
3)Translator:服务端使用Syntax Directed Translation,将AST转换为中间表达(三段码),再将中间表达翻译为目标python脚本,如附图3所示。
进一步地,可选的实施例中,程序的执行分为两种模式,“覆盖”模式和“追加”模式,供用户选择。选择以“覆盖”模式执行,执行结果会覆盖当前三维场景的模型,适用于多次测试、调整程序参数或逻辑;“追加”模式可以根据当前三维场景中的模型,通过程序继续修改编辑该场景,该模式适用于场景中已经有模型,用户希望基于该模型继续做某些特征编辑。
当使用“覆盖”模式时,支持“以某个模型文档为基础”指令,将已经建好的模型导入到当前文档中,后续编程针对该基础模型进行操作。该指令可以方便复用既有模型,使得建模与编程有机结合,不需要用户使用程序写出完整模型。
本发明中程序的执行机制可采用以下功能服务和环境:
程序执行服务ProgramExecutionService:
服务作为程序执行调用的驱动服务,提供下述方法:
execute(Program program):服务端驱动执行完整程序,程序可能为跨多文档程序。
executeProgramInCurrentDocument:在当前文档中执行完整程序。调用该接口,程序生成的模型会返回给前端,替换之前文档内容,最后一次执行结果会被保存到文档中。其中,该接口调用场景,依靠完整程序,不依赖既有文档内容,会整体覆盖文档内容。
executeCommandInCurrentDocument:在当前文档中执行单个命令语句,命令行功能使用。该接口中的命令语句,依赖于当前文档中已有内容,可以用来查询程序内部状态,或者单个指令更新模型。
executeDocumentContext:在指定文档中执行,执行结果会记录在指定文档中,不直接返回给用户。用于多文档任务处理。
程序上下文ProgramContext:
ProgramContext表示程序的局部环境,从而解决变量scope作用域的问题。它采用作用域嵌套的方式组织,上层ProgramContext可以包含内部子ProgramContext。ProgramContext承担多种职责,程序的解析和执行过程中,ProgramContext记录很多有用信息,起到了桥接枢纽的作用,具体包括:记录变量定义和类型,记录函数定义,记录程序行号和执行行号对应,检查、设置语义错误以及记录程序输出结果。
文档上下文DocumentContext:
该概念代表在某个文档中执行的程序语句,使用@DocumentContext(){}指令指定文档,大括号内的语句都会在该文档中执行。服务端在处理该指令时,会根据文档信息调度、分配建模引擎实例。
执行输出ExecutionOutput:
ExecutionOutput结构用来记录建模引擎执行返回结果,主要包括打印输出,执行时间输出,和错误信息。每一条信息使用OutputInfo结构表达,其包含行号和信息属性。ExecutionOutput结构会在程序执行后返回给前端解析,在console组件中展示。
SemanticError:
SemanticError指的是语义错误,包括变量未定义VARIABLE_UNDECLARED,变量引用冲突VARIABLE_REF_CONFLICT,类型错误TYPE_ERROR,函数未定义FUNCTION_UNDEFINED,方法未在模块中METHOD_NOT_IN_MODULE等。
程序执行过程中,类型推断在表达式Expression构建时完成,用于不同场景下的类型检查。例如,String类型有自己的内置方法,需要判断出表达式对应值的是否为String类型才可知晓是否可以调用该方法。另一个例子,API中不同参数需要对应不同的类型,需要在执行前检查用户输入表达式是否匹配类型。Expression类中的type属性,用来记录类型推断结果,类型推断由AST树中叶子节点,向上逐层推断。
用户编写的程序,可以选择“保存”,将程序存储到平台服务器数据库中,关联到该用户的账号下,该程序可通过“程序列表”界面访问,访问后可以继续编辑。一个程序可以用在多个建模文档中。
因此有,一个实施例中,将用户编辑的程序进行保存操作的过程中,包括:将需要保存的目标程序结合当前用户的账户信息关联存储到相应的平台服务器数据库中,该程序可通过集成开发环境中的访问入口进行访问,访问界面采用程序列表的形式,一个程序可以用在多个建模文档中。
用户可以使用print指令和timer指令辅助调试程序,基于此,print指令可以打印出用户关注的变量信息,timer指令可以计算包裹代码块的执行耗时,相关的辅助信息都会在“输出控制台”展示。
进一步地,一个实施例中,所述方法还包括:
场景空间中的几何元素支持实时拾取,拾取到的元素信息通过CAD工作空间的输出控制台展示,以作为用户编辑程序时引用指定几何元素的依据。
开发过程中,用户可以点击拾取三维场景中的几何元素,拾取到的元素信息会展示到“输出控制台”,该信息可以用于程序中对几何元素的引用指定
进一步地,一个优选的实施例中,所述方法还包括:
通过设置的UI操作控件启动程序自管理模式,所述程序自管理模式支持将用户编辑的程序进行保存和发布操作,其中,被保存或发布的程序与原始程序存在修改同步性。
实际应用过程中,用户编写的程序,可以选择“发布”,发布后,该程序的使用方式类似于普通的建模命令,其他用户可以通过命令界面直接使用该程序,不需要关注程序的实现细节。程序的输入参数通过命令界面展现,执行后结果更新到三维场景中。
“已发布”的程序与原始程序保持同步,用户更新修改原始程序后,执行发布的程序会使用最新的源程序代码执行,用户也可以选择对某个已发布程序“取消发布”。
另外的,用户编写的程序,可以添加UI参数定义,设置程序输入参数,该输入参数用于“已发布”的程序命令界面中的输入参数。
一个具体的实施例中,将用户编辑的程序进行发布操作的过程中,包括:
用户选择发布某程序后,提交该程序到CAD平台,由平台检查程序符合基本可执行要求后,将程序状态置为已发布;
针对已发布状态的程序,其工作方式类似于建模命令,其他用户可以通过具备共享权限CAD平台的命令界面直接使用该程序;其中,通过集成开发环境中的发布程序访问入口调出发布程序列表,用户选择列表中的对象进行使用;
被调用的已发布程序,其输入参数通过命令界面面向共享对象展现,执行后结果更新到三维场景中。
实现开发的过程中,系统能够同时为平台上的很多用户测试和使用,每个用户的程序不会影响其他用户。无需编译打包,无需重启服务器。且执行安全,代码在系统指定环境中执行,没有暴露系统内部如何工作;没有修改系统内部组件,语言范畴是系统定义可控的,支持语法检查、语义检查、运行时检查等。
实际应用时,用户编写完程序后,保存程序,给程序文档命名,程序会保存到平台数据库中,。点击“发布”按钮,程序会提交到平台,平台检查程序符合基本可执行要求,将程序状态改为“已发布”。其他用户,在“发布程序”列表中,可以搜索查看到“已发布程序”。选择程序,启动该程序命令对话框。命令对话框的生成会读取程序中对输入参数的定义信息,并在前端生成对应的html元素组件。用户可以像使用普通建模命令一样,调整输入参数,点击执行。服务端收集用户输入的参数信息,调整程序中对应的变量值,按上述实施例中所提供的执行流程执行程序,程序执行结果会同步显示在三维场景界面中,如附图4所示。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要指出的是,在本发明的其他实施例中,该方法还可以通过将上述实施例中的某一个或某几个进行结合来得到新的云CAD平台二次开发方法。
需要说明的是,基于本发明上述任意一个或多个实施例中的方法,本发明还提供一种存储介质,该存储介质上存储有可实现如述任意一个或多个实施例中所述方法的程序代码,该代码被操作系统执行时能够实现如上所述的基于B/S架构的云CAD平台的二次开发方法。
应该理解的是,本发明所公开的实施例不限于这里所公开的特定结构、处理步骤或材料,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而不意味着限制。
说明书中提到的“一实施例”意指结合实施例描述的特定特征、结构或特征包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一实施例”并不一定均指同一个实施例。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。