- 浏览: 291460 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
xisuchi:
咋没人收藏阿
前端开发大众手册(包括工具、网址、经验等) -
past2010yeah:
太好了,解决了我纠结很久的问题!!!非常感谢!
解决Flex跨域"访问URL时遇到安全性错误" -
shlei:
xiao_kai 写道这样会不会牺牲性能啊~~会,但是这是暂时 ...
解决flex4 spark 找不到外观错误 -
xiao_kai:
这样会不会牺牲性能啊~~
解决flex4 spark 找不到外观错误 -
jcl860:
兄台:左边面板是图片,还是用mxml画出来的图形?
仿IBM-BPM Editor实现的WorkFlowEditor
在网上搜了一些例子,找了一大队资料,终于把workFlowEditor做得差不多了,这是一个类似IBM-BPM Editor的工作流编辑器,现还有一些功能没实现,现将部分代码贴在此,有需要的朋友可以交流,拍砖,哈哈。
上图:
节点间的连线重绘:
键盘事件类:
这里有,自己下载吧,http://www.ibm.com/developerworks/cn/downloads/ws/elixir/
你这个是用的ilog组件,需要导入ilog的swc库文件,
二次贝塞尔曲线,查资料吧,
抱歉,这已经是商业产品了,
,强大,希望有机会再和兄台深入交流。
上图:

节点间的连线重绘:
package com { import flash.geom.Point; public class RefreshLine { /** 和节点相关的线条的数组 **/ public var lineList:Array = []; public var width:Number; public var height:Number; public var lineFlag:LineLag; public var line:Line; public var node:Nodes; private var isFromNode:Boolean=false; private var num1:int=0; //开始节点,箭头右方向,连线数累加 private var num2:int=0; //开始节点,箭头左方向,连线数累加 private var num3:int=0; //开始节点,箭头上方向,连线数累加 private var num4:int=0; //开始节点,箭头下方向,连线数累加 private var numA:int=0; //结束节点,箭头右方向,连线数累加 private var numB:int=0; //结束节点,箭头左方向,连线数累加 private var numC:int=0; //结束节点,箭头上方向,连线数累加 private var numD:int=0; //结束节点,箭头下方向,连线数累加 private var startX:int; private var startY:int; private var endX:int; private var endY:int; public function RefreshLine(node:Nodes) { this.node=node; lineList=node.lineList; } /** * 重绘节点上的连线 * */ public function getAspectArr():void{ for(var j:int = 0; j < lineList.length; j++){ lineFlag = lineList[j]; line = lineFlag.line; switch(line.aspect){ case 1: if(line.fromNode==node) num1++; else numA++; break; case 2: if(line.fromNode==node) num2++; else numB++; break; case 3: if(line.fromNode==node) num3++; else numC++; break; case 4: if(line.fromNode==node) num4++; else numD++; break; } } } public function refreshLine():void{ var isHead:Boolean; var startNO:int=0; //指向开始节点的连线的条数 var endNO:int=0; //指向结束节点的连线的条数 width=node.width; height=node.height; getAspectArr(); for(var i:int = 0; i < lineList.length; i++){ startX = node.x; startY = node.y; endX = node.x; endY = node.y; lineFlag = lineList[i]; line = lineFlag.line; isHead = lineFlag.isHead; if(line.fromNode==node){ isFromNode=true; startNO++; }else{ endNO++; } switch(node.type){ case Nodes.NODE: case Nodes.EMAIL: case Nodes.CLOCK: case Nodes.ENDNODE: circleNodePosition(startNO,endNO); break; case Nodes.RECT: rectNodePosition(startNO,endNO); break; case Nodes.BRECT: rectNodePosition(startNO,endNO); break; case Nodes.DIAMOND: diamondNodePosition(startNO,endNO); break; } /** * 如果是连线箭头所指的,则重设线条开始位置 * 如果不是,则重设连线结束 **/ if(isHead) line.startPoint = new Point(startX,startY); else line.endPoint = new Point(endX,endY); line.drawLine(line.aspect); } num1=0; num2=0; num3=0; num4=0; numA=0; numB=0; numC=0; numD=0; } private function circleNodePosition(startNO:int,endNO:int):void{ switch(line.aspect){ case 1: //箭头向右 switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.CIRCLE_RADIUS*2+1; }else{ startY-=1; } startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO); break; case line.lineStyleArr[2]: startX+=13; startY+=Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO); break; default: startX+=width-15; startY+=Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO); break; } endX+=15; endY+=Nodes.CIRCLE_RADIUS*2/(numA+1)*(endNO); break; case 2: //箭头向左 switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.CIRCLE_RADIUS*2+1; }else{ startY-=1; } startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width-15; startY+=Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO); break; default: startX+=13; startY+=Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO); break; } endX+=width-13; endY+=Nodes.CIRCLE_RADIUS*2/(numB+1)*(endNO); break; case 3: //箭头向上 switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=width-15; }else{ startX+=13; } startY+=Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO); startY+=Nodes.CIRCLE_RADIUS*2+1; break; default: startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO); startY-=1; break; } endX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(numC+1)*(endNO); endY+=Nodes.CIRCLE_RADIUS*2+3; break; case 4: //箭头向下 switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=width-15; }else{ startX+=13; } startY+=Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO); startY-=1; break; default: startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO); startY+=Nodes.CIRCLE_RADIUS*2+1; break; } endX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(numD+1)*(endNO); endY-=2; break; } } private function rectNodePosition(startNO:int,endNO:int):void{ switch(line.aspect){ case 1: switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=height+2; }else{ startY-=0; } startX+=width/(num1+1)*(startNO); break; case line.lineStyleArr[2]: startX-=0; startY+=height/(num1+1)*(startNO); break; default: startX+=width; startY+=height/(num1+1)*(startNO); break; } endX-=2; endY+=height/(numA+1)*(endNO); break; case 2: switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=height+2; }else{ startY-=0; } startX+=width/(num2+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width; startY+=height/(num2+1)*(startNO); break; default: startX-=0; startY+=height/(num2+1)*(startNO); break; } endX+=width+2; endY+=height/(numB+1)*(endNO); break; case 3: switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=width; }else{ startX-=0; } startY+=height/(num3+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/(num3+1)*(startNO); startY+=height+2; break; default: startX+=width/(num3+1)*(startNO); startY-=0; break; } endX+=width/(numC+1)*(endNO); endY+=height+3; break; case 4: switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=width; }else{ startX-=0; } startY+=height/(num4+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/(num4+1)*(startNO); startY-=0; break; default: startX+=width/(num4+1)*(startNO); startY+=height+2; break; } endX+=width/(numD+1)*(endNO); endY-=1; break; } } private function diamondNodePosition(startNO:int,endNO:int):void{ switch(line.aspect){ case 1: if((num1<=1 && line.fromNode==node) || (numA<=1 && line.toNode==node)){ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.DIAMOND_BORDER; }else{ startY-=0; } startX+=width/2; break; case line.lineStyleArr[2]: startX+=4; startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO); break; default: startX+=Nodes.DIAMOND_BORDER+6; startY+=Nodes.DIAMOND_BORDER/2; break; } endX+=3; endY+=Nodes.DIAMOND_BORDER/2; }else{ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.DIAMOND_BORDER-13; }else{ startY+=13; } startX+=width/(num1+1)*(startNO); break; case line.lineStyleArr[2]: startX+=(width-Nodes.DIAMOND_BORDER)/2+10; startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO); break; default: startX+=Nodes.DIAMOND_BORDER-6; startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO); break; } endY+=Nodes.DIAMOND_BORDER/(numA+1)*(endNO); if((num1==3 && startNO==2) || (numA==3 && endNO==2)){ endX+=3; }else{ endX+=15; } } break; case 2: if((num2<=1 && line.fromNode==node) || (numB<=1 && line.toNode==node)){ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.DIAMOND_BORDER; }else{ startY-=0; } startX+=width/2; break; case line.lineStyleArr[2]: startX+=Nodes.DIAMOND_BORDER+6; startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO); break; default: startX+=4; startY+=Nodes.DIAMOND_BORDER/2; break; } endX+=Nodes.DIAMOND_BORDER+6; endY+=Nodes.DIAMOND_BORDER/2; }else{ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.y<line.toNode.y){ startY+=Nodes.DIAMOND_BORDER-13; }else{ startY+=13; } startX+=width/(num2+1)*(startNO); break; case line.lineStyleArr[2]: startX+=Nodes.DIAMOND_BORDER-6; startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO); break; default: startX+=(width-Nodes.DIAMOND_BORDER)/2+13; startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO); break; } endY+=Nodes.DIAMOND_BORDER/(numB+1)*(endNO); if((num2==3 && startNO==2) || (numB==3 && endNO==2)){ endX+=Nodes.DIAMOND_BORDER+7; }else{ endX+=Nodes.DIAMOND_BORDER-4; } } break; case 3: if((num3<=1 && line.fromNode==node) || (numC<=1 && line.toNode==node)){ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=Nodes.DIAMOND_BORDER+6; }else{ startX+=4; } startY+=Nodes.DIAMOND_BORDER/2; break; case line.lineStyleArr[2]: startX+=width/(num3+1)*(startNO); startY+=Nodes.DIAMOND_BORDER; break; default: startX+=width/2; startY-=0; break; } endX+=width/2; endY+=Nodes.DIAMOND_BORDER+2; }else{ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=Nodes.DIAMOND_BORDER-13; }else{ startX+=15; } startY+=Nodes.DIAMOND_BORDER/(num3+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/(num3+1)*(startNO); startY+=Nodes.DIAMOND_BORDER-13; break; default: startX+=width/(num3+1)*(startNO); startY+=13; break; } endX+=width/(numC+1)*(endNO); if((num3==3 && startNO==2) || (numC==3 && endNO==2)){ endY+=Nodes.DIAMOND_BORDER+2; }else{ endY+=Nodes.DIAMOND_BORDER-11; } } break; case 4: if((num4<=1 && line.fromNode==node) || (numD<=1 && line.toNode==node)){ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=Nodes.DIAMOND_BORDER+6; }else{ startX+=4; } startY+=Nodes.DIAMOND_BORDER/2; break; case line.lineStyleArr[2]: startX+=width/(num4+1)*(startNO); startY-=0; break; default: startX+=width/2; startY+=Nodes.DIAMOND_BORDER; break; } endX+=width/2; endY-=1; }else{ switch(line.lineStyle){ case line.lineStyleArr[1]: if(line.fromNode.x<line.toNode.x){ startX+=Nodes.DIAMOND_BORDER-13; }else{ startX+=15; } startY+=Nodes.DIAMOND_BORDER/(num4+1)*(startNO); break; case line.lineStyleArr[2]: startX+=width/(num4+1)*(startNO); startY+=13; break; default: startX+=width/(num4+1)*(startNO); startY+=Nodes.DIAMOND_BORDER-13; break; } endX+=width/(numD+1)*(endNO); if((num4==3 && startNO==2) || (numD==3 && endNO==2)){ endY-=1; }else{ endY+=11; } } break; } } } }
键盘事件类:
package com { import flash.events.KeyboardEvent; import flash.events.MouseEvent; import mx.core.UITextField; import net.L4cd.iTrace; public class WFKeyboard { private var node:Nodes; private var line:Line; private var workFlow:CusWorkFlow; private var o:Object; /** CusWorkFlow对象的放大/缩小参数 **/ private var scaleNO:Number=.2; /** 封装连线的对象 **/ private var lineLag1:LineLag; public var trace:Function = iTrace.init; public function WFKeyboard() { } /** 选择键盘按键ASCII值 **/ public function chooseKey(e:KeyboardEvent,mouseE:MouseEvent):void { o=getObjects(mouseE); node=o.node as Nodes; line=o.line as Line; workFlow=o.workFlow as CusWorkFlow; switch(e.keyCode){ case 8: case 46: deleteNode(node,line,workFlow); break; case 65: if(!e.ctrlKey)return; break; case 107: if(!e.ctrlKey)return; workFlow.scaleX+=scaleNO;//放大CusWorkFlow对象 workFlow.scaleY+=scaleNO; break; case 109: if(!e.ctrlKey)return; workFlow.scaleX-=scaleNO;//缩小CusWorkFlow对象 workFlow.scaleY-=scaleNO; break; } } /** 删除节点或连线 **/ private function deleteNode(node:Nodes,line:Line,workFlow:CusWorkFlow):void { if(!workFlow)return; if(node){ var num:int=node.lineList.length; for(var i:int=0;i<num;i++){ var lineLag:LineLag=node.lineList[i]; workFlow.removeChild(lineLag.line); if(node==lineLag.line.fromNode){ for(var j:int=0;j<lineLag.line.toNode.lineList.length;j++){ lineLag1=lineLag.line.toNode.lineList[j] as LineLag; if(node==lineLag1.line.fromNode){ lineLag.line.toNode.lineList.splice(j,1); } } }else{ for(var k:int=0;k<lineLag.line.fromNode.lineList.length;k++){ lineLag1=lineLag.line.fromNode.lineList[k] as LineLag; if(node==lineLag1.line.toNode){ lineLag.line.fromNode.lineList.splice(k,1); } } } } workFlow.removeChild(node); }else if(line){ for(var m:int=0;m<line.toNode.lineList.length;m++){ lineLag1=line.toNode.lineList[m] as LineLag; if(line==lineLag1.line){ line.toNode.lineList.splice(m,1); break; } } for(var n:int=0;n<line.fromNode.lineList.length;n++){ lineLag1=line.fromNode.lineList[n] as LineLag; if(line==lineLag1.line){ line.fromNode.lineList.splice(n,1); } } workFlow.removeChild(line); } } /** 重画节点边框,表示选中或非选中 **/ public function reDrawNode(map:Nodes):void{ switch(map.type){ case Nodes.NODE: map.drawNode(); break; case Nodes.DOC: map.drawDoc(); break; case Nodes.EMAIL: map.drawEmail(); break; case Nodes.RECT: map.drawRect(); break; case Nodes.BRECT: map.drawBRect(); break; case Nodes.DIAMOND: map.drawDiamond(); break; case Nodes.CLOCK: map.drawClock(); break; case Nodes.ENDNODE: map.drawEndNode(); break; case Nodes.LEFTDASHED: map.drawDashed(); break; case Nodes.RIGHTDASHED: map.drawDashed2(); break; } } /** 返回鼠标选中的对象 **/ private function getObjects(e:MouseEvent):Object{ o=new Object(); if(e.target is UITextField){ o.node=e.target.parent.parent as Nodes; o.workFlow=e.target.parent.parent.parent as CusWorkFlow; }else if(e.target is Nodes){ o.node=e.target as Nodes; o.workFlow=e.target.parent as CusWorkFlow; }else if(e.target is CusWorkFlow){ o.workFlow=e.target as CusWorkFlow; }else if(e.target is Line){ o.line=e.target as Line; o.workFlow=e.target.parent as CusWorkFlow; } return o; } } }
评论
13 楼
jcl860
2012-09-14
兄台:左边面板是图片,还是用mxml画出来的图形?
12 楼
jcl860
2012-09-05
兄弟,能把mxml代码贴上看看不,主要是画不出界面啊。
11 楼
shlei
2012-08-31
jcl860 写道
兄弟,你有联系方式没有,请给发一下。我的邮箱:317902593@qq.com。
这里有,自己下载吧,http://www.ibm.com/developerworks/cn/downloads/ws/elixir/
10 楼
jcl860
2012-08-31
兄弟,你有联系方式没有,请给发一下。我的邮箱:317902593@qq.com。
9 楼
shlei
2012-08-30
jcl860 写道
兄弟, import com.ibm.ilog.elixir.diagram.Graph;缺这些东西啊,这些东西报错了,咋整呢?
你这个是用的ilog组件,需要导入ilog的swc库文件,
8 楼
jcl860
2012-08-30
兄弟, import com.ibm.ilog.elixir.diagram.Graph;缺这些东西啊,这些东西报错了,咋整呢?
7 楼
421081646
2012-08-08
挺好的,学习了
6 楼
shlei
2011-11-11
a0409028 写道
连线是怎么实现的有弧度,据天代码是那块?,感谢 了。
二次贝塞尔曲线,查资料吧,
5 楼
a0409028
2011-11-11
连线是怎么实现的有弧度,据天代码是那块?,感谢 了。
4 楼
shlei
2011-10-19
a0409028 写道
能不能共享一下,页面源码
抱歉,这已经是商业产品了,
3 楼
a0409028
2011-10-19
能不能共享一下,页面源码
2 楼
debbykindom
2011-09-16

1 楼
tree_161219
2011-03-29
写的很不错呢!
发表评论
-
Flex4之皮肤定制【Skin类和Skin类】
2013-10-05 19:19 1179第一、关于spark.skin.SparkSkin类的 ... -
基于 Cairngorm MVC 框架的 Flex 程序设计与开发
2013-10-05 18:38 1044翟 峰, 开发工程师, IBM 吴 镝, IBM 实习生, I ... -
在flex中使用model标签读取配置文件的方法
2012-08-16 09:54 10141.使用 Model标签 <mx:Model id=& ... -
flex xml操作
2012-04-25 10:48 1205今天我们来看看AS3中新的XML处理方法:E4X,直到现在,E ... -
Flex 创建过滤特定文件的FileReference
2012-03-01 16:13 1685下面的代码演示了Flex中如何创建一个可以过滤特定后缀文件的F ... -
Flex 根据图片url获取bitmapdata并绑定到多个Image
2012-03-01 14:40 3067private function getImage(url ... -
Flex 开始日期与结束日期DateField组件
2012-03-01 13:45 1855<?xml version="1.0&qu ... -
匹配已选中数据的某字段和下拉框数据
2012-03-01 08:41 1343package YD.Web.Common.Utils ... -
解决flex4 spark 找不到外观错误
2012-02-27 14:01 1936spark组件为了提高性能adobe做了很多努力,同 ... -
Flex垃圾回收和性能优化的一些总结
2012-02-27 11:30 1232本文是Kenshin根据一些对 ... -
【转】关于Flex未来走向的问答
2011-11-22 09:50 1814•转自:http://www.riadev.com/flex- ... -
Flex 关于validateNow方法
2011-11-18 10:42 2333validateNow(); 官方解释:验证并更新此对 ... -
Flex 数值转IP
2011-11-18 10:19 937package common { public cl ... -
Flex 关于遍历
2011-11-18 10:15 1069获取XML属性名、值 var x : XML = < ... -
Flex HttpService重用2
2011-09-28 13:30 1229HttpService工具类: package commo ... -
动态配置AMF与后台接口调用
2011-09-28 11:47 1567以下是一个AMF调用类: package common ... -
Unix时间戳转化AS3日期格式
2011-09-21 16:14 2332Unix时间戳:1254671828 返回:2009-10-1 ... -
Responder使用方法
2011-07-11 18:03 2152Responder 是一个简单的处理远程异步调用的结果/异常的 ... -
AS3.0
2011-03-14 15:40 1525┏━━━━━━━━━━━━━━━━━━┓ ┃ 第三部分:Ac ... -
关于as3的一些总结
2010-11-12 09:23 11171.载入外部xml方法 注意点:如果将flash放在html ...
相关推荐
福兴讯V587对讲机写频,调频软件。福摩斯特V587对讲机写频,调频
app开发
内容概要:本文介绍了LangChain这一开源框架,它专为开发基于大型语言模型(LLM)的应用程序而设计。文章阐述了LangChain的核心理念、架构组成及其重要性。LangChain通过模块化设计解决了大模型应用开发中的效率低下和局限性问题,提供了标准化的接口和丰富的抽象层,使开发者能够轻松接入不同大模型并构建高效的应用程序。文中详细讲解了几个关键模块,包括Model I/O、Retrieval、Chains、Memory、Agents和Callbacks,以及如何安装和使用LangChain进行开发。此外,还展示了具体的代码示例,如如何调用OpenAI的API、构建LLMChain链路、设置回调机制和实现对话记忆功能。 适合人群:对大语言模型有一定了解并且有兴趣开发基于LLM的应用程序的研发人员和技术爱好者。 使用场景及目标:①帮助开发者快速掌握LangChain的基本概念和使用方法;②提供实用的代码示例,便于开发者实际操作;③解释如何通过LangChain克服大模型应用开发中的常见难题,如模型差异、输出不稳定等。 阅读建议:鉴于LangChain涉及较多的专业术语和技术细节,建议读者在阅读时结合官方文档和示例代码一起学习,尤其是对于核心模块的理解和实践。同时,关注GitHub上的最新版本更新,以获取最新的特性和改进。
网络伴侣 iCompanion 2.1 网络计费软件,功能全面,支持ISDN
app开发
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
app开发
移动开发_Flutter_轮子推荐_开发效率提升_1742851671.zip
内容概要:本文详细介绍了往复活塞杆密封件在瞬态条件下热弹流润滑仿真的Python实现。首先定义了几何、材料和工况参数,然后分别构建了流体力学、热力学和固体力学模型。流体力学模型使用有限差分法求解瞬态雷诺方程,热力学模型考虑了温度和压力对粘度的影响,固体力学模型则采用了Mooney-Rivlin超弹性模型和Prony级数描述的粘弹性松弛。最后通过耦合求解实现了整个系统的时间积分,并绘制了液膜厚度和压力分布图。文中还讨论了模型的特点、简化假设以及扩展建议。 适合人群:机械工程领域的研究人员和技术人员,尤其是对密封件性能优化感兴趣的从业者。 使用场景及目标:适用于研究往复活塞杆密封件的工作机理及其在不同工况下的表现,帮助工程师理解和预测密封件的动态特性,从而改进设计和选材。 其他说明:该实现基于论文中的理论框架,但在实际应用时可能需要进一步调整和完善。
人人商城V3-3.2.1版本.zip 亲测能用
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
Java面向对象编程,出现的示例代码
蓝桥杯python,蓝桥杯python相关资源,真题,蓝桥杯,蓝桥杯Python练习系统题库,蓝桥杯Python练习系统题库
rgrgdfsegfasgrsredgf
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
Lotus Notes 4.65 是 IBM 旗下早期版本的企业级协作平台,主要面向办公自动化和非结构化数据管理领域。以下为综合信息整理: 一、版本背景与定位 核心架构 Lotus Notes 4.65 属于客户端-服务器架构的早期版本,其服务器端为 Lotus Domino18。 客户端功能:集成电子邮件、日历、联系人管理、文档数据库访问16。 服务器功能:支持分布式文档存储、跨平台数据同步及安全权限管理18。 技术特性 数据库技术:采用非结构化文档数据库,支持表单、视图、代理等自定义数据管理工具68。 工作流引擎:内置开发环境(Domino Designer),可定制审批流程、文档跟踪等企业级应用18。 跨平台兼容性:支持 Windows 95/98、NT 等早期操作系统,依赖 TCP/IP 协议实现网络通信25。
内容概要:本文档详细介绍了Go语言的基础知识及其特性,旨在帮助初学者快速上手并掌握这门语言。首先概述了Go语言的特点,包括简洁高效的语法、强大的并发模型、跨平台支持以及丰富的标准库。接着逐步讲解了环境安装、基础语法、控制结构、集合类型、函数定义、结构体与方法、并发编程、错误处理等方面的内容。最后提供了包管理和学习资源的推荐,鼓励读者通过实战项目进一步提升技能。 适合人群:对编程有一定兴趣但尚未接触过Go语言的学习者,尤其是希望快速掌握一门高效并发编程语言的开发者。 使用场景及目标:①作为新手教程,帮助读者建立对Go语言的基本认识;②提供详细的语法指导,使读者能够独立完成简单的程序编写;③介绍并发编程和错误处理机制,培养解决实际问题的能力。 阅读建议:建议读者跟随文档内容进行实践操作,在理解和记忆的基础上多做练习,同时利用提供的学习资源加深理解。