1. //自定义绘制图形,支持 点,线,面,矩形,圆,标识,可自定义绘制过程中的和绘制完的预览
  2. this.drawGraphic = function(view,_mode,_callback,_GraphicProperty){
  3. //清空所有可能的监听和画到一半的图形
  4. if(handler){
  5. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
  6. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  7. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  8. handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  9. }
  10. if(activeShapePoints||activeShape||floatingPoint||boundaryPoints.length>0||returnGraphic){
  11. if(floatingPoint){
  12. view.entities.remove(floatingPoint);
  13. floatingPoint = undefined;
  14. }
  15. if(activeShape){
  16. view.entities.remove(activeShape);
  17. activeShape = undefined;
  18. }
  19. activeShapePoints = [];
  20. if(boundaryPoints.length>0){
  21. for(let i=0;i<boundaryPoints.length;i++){
  22. view.entities.remove(boundaryPoints[i]);
  23. }
  24. }
  25. }
  26. //配置
  27. var drawingMode = _mode;
  28. var GraphicProperty;
  29. if(_GraphicProperty===null||_GraphicProperty===""||_GraphicProperty===undefined){
  30. GraphicProperty = {}
  31. }else{
  32. GraphicProperty=_GraphicProperty
  33. }
  34. //监听左键点击事件
  35. function listenClick(_view,_callback) {
  36. handler = new Cesium.ScreenSpaceEventHandler(view.scene.canvas);
  37. handler.setInputAction(function(movement) {
  38. let position = view.scene.pickPosition(movement.position);
  39. let screenPosition = movement.position;
  40. let callbackObj = {};
  41. callbackObj.cartesian3=position;
  42. callbackObj.movement=movement;
  43. callbackObj.screenPosition=screenPosition;
  44. _callback(callbackObj,handler);
  45. },Cesium.ScreenSpaceEventType.LEFT_CLICK);
  46. }
  47. //模式判断
  48. if(drawingMode==='point'){
  49. listenClick(_view, function(callbackObj, handler) {
  50. let position = callbackObj.cartesian3;
  51. let Point;
  52. //构造实体
  53. if(GraphicProperty.style&&GraphicProperty.style.point){
  54. Point = view.entities.add({
  55. id:GraphicProperty.id||null,
  56. description:GraphicProperty.description||'',
  57. name:GraphicProperty.name||'',
  58. position:position,
  59. point:GraphicProperty.style.point
  60. });
  61. }else{
  62. Point = view.entities.add({
  63. type:'Selection tool',
  64. position:position,
  65. point:{
  66. color: Cesium.Color.WHITE,
  67. pixelSize: 10,
  68. outlineColor: Cesium.Color.BLACK,
  69. outlineWidth: 0,
  70. show: true,
  71. }
  72. });
  73. }
  74. //回调产生的点
  75. if(_callback){
  76. _callback(Point);
  77. }
  78. //销毁左键监听
  79. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
  80. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  81. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  82. handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  83. });
  84. }
  85. else if(drawingMode==='marker'){
  86. if(GraphicProperty.style&&GraphicProperty.style.billboard){
  87. listenClick(_view, function(callbackObj, handler) {
  88. //此时场景中的点
  89. let position = callbackObj.cartesian3;
  90. //赋值,构造点实体Entity
  91. let Marker = view.entities.add({
  92. id:GraphicProperty.id||null,
  93. description:GraphicProperty.description||null,
  94. name:GraphicProperty.name||'',
  95. type:'Selection tool',
  96. show:GraphicProperty.show||true,
  97. position:position,
  98. billboard:GraphicProperty.style.billboard
  99. });
  100. //回调构造的点
  101. if(_callback){
  102. _callback(Marker);
  103. }
  104. //销毁
  105. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
  106. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  107. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  108. handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  109. });
  110. }else{
  111. listenClick(_view, function(callbackObj, handler) {
  112. //此时场景中的点
  113. let position = callbackObj.cartesian3;
  114. //赋值,构造点实体Entity
  115. let Marker = view.entities.add({
  116. type:'Selection tool',
  117. show: true,
  118. position:position,
  119. point:{
  120. color: Cesium.Color.WHITE,
  121. pixelSize: 10,
  122. outlineColor: Cesium.Color.BLACK,
  123. outlineWidth: 0,
  124. show: true,
  125. }
  126. });
  127. //回调构造的点
  128. if(_callback){
  129. _callback(Marker);
  130. }
  131. //销毁
  132. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
  133. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  134. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  135. handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  136. });
  137. }
  138. }
  139. else{
  140. handler = new Cesium.ScreenSpaceEventHandler(view.canvas);
  141. //取消自带的双击放大监听
  142. view.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  143. //构造点,例如在活动的提示点
  144. function createPoint(worldPosition) {
  145. var point = view.entities.add({
  146. position : worldPosition,
  147. point : {
  148. color : Cesium.Color.WHITE,
  149. pixelSize : 5,
  150. }
  151. });
  152. return point;
  153. }
  154. //绘制图形
  155. function drawShape(positionData) {
  156. var shape;
  157. if (drawingMode === 'polyline') {
  158. if(GraphicProperty.style&&GraphicProperty.style.polyline){
  159. GraphicProperty.style.polyline.positions=positionData;
  160. shape = view.entities.add({
  161. id:GraphicProperty.id||null,
  162. name:GraphicProperty.name||'',
  163. description:GraphicProperty.description||'',
  164. polyline : GraphicProperty.style.polyline
  165. });
  166. }else{
  167. shape = view.entities.add({
  168. polyline : {
  169. positions : positionData,
  170. width : 3
  171. }
  172. });
  173. }
  174. }
  175. else if (drawingMode === 'polygon') {
  176. if(GraphicProperty.style&&GraphicProperty.style.polygon){
  177. GraphicProperty.style.polygon.hierarchy=positionData;
  178. GraphicProperty.style.polygon.perPositionHeight=true;
  179. shape = view.entities.add({
  180. id:GraphicProperty.id||null,
  181. name:GraphicProperty.name||'',
  182. description:GraphicProperty.description||'',
  183. polygon:GraphicProperty.style.polygon
  184. });
  185. }else{
  186. shape = view.entities.add({
  187. polygon: {
  188. hierarchy: positionData,
  189. material: new Cesium.ColorMaterialProperty(Cesium.Color.WHITE.withAlpha(0.7)),
  190. perPositionHeight:true
  191. }
  192. });
  193. }
  194. }
  195. else if (drawingMode === 'circle'){
  196. //当positionData为数组时绘制最终图,如果为function则绘制动态图
  197. let xyz = new Cesium.Cartesian3(activeShapePoints[0].x, activeShapePoints[0].y, activeShapePoints[0].z);
  198. //转WGS84
  199. let wgs84 = view.scene.globe.ellipsoid.cartesianToCartographic(xyz);
  200. let height = wgs84.height;
  201. let value = typeof positionData.getValue === 'function' ? positionData.getValue(0) : positionData;
  202. if(GraphicProperty.style&&GraphicProperty.style.ellipse){
  203. GraphicProperty.style.ellipse.semiMinorAxis=new Cesium.CallbackProperty(function () {
  204. //半径 两点间距离
  205. var r = Math.sqrt(Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2));
  206. return r ? r : r + 1;
  207. }, false);
  208. GraphicProperty.style.ellipse.semiMajorAxis=new Cesium.CallbackProperty(function () {
  209. var r = Math.sqrt(Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2));
  210. return r ? r : r + 1;
  211. }, false);
  212. GraphicProperty.style.ellipse.height=height;
  213. shape = view.entities.add({
  214. position: activeShapePoints[0],
  215. id:GraphicProperty.id||null,
  216. name:GraphicProperty.name||'',
  217. description:GraphicProperty.description||'',
  218. ellipse:GraphicProperty.style.ellipse
  219. });
  220. }
  221. else{
  222. shape = view.entities.add({
  223. position: activeShapePoints[0],
  224. ellipse: {
  225. semiMinorAxis: new Cesium.CallbackProperty(function () {
  226. //半径 两点间距离
  227. var r = Math.sqrt(Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2));
  228. return r ? r : r + 1;
  229. }, false),
  230. semiMajorAxis: new Cesium.CallbackProperty(function () {
  231. var r = Math.sqrt(Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2));
  232. return r ? r : r + 1;
  233. }, false),
  234. material: GraphicProperty.material||Cesium.Color.BLUE.withAlpha(0.5),
  235. height:height,
  236. outline: true
  237. }
  238. });
  239. }
  240. }
  241. else if (drawingMode === 'rectangle'){
  242. let xyz = new Cesium.Cartesian3(activeShapePoints[0].x, activeShapePoints[0].y, activeShapePoints[0].z);
  243. //转WGS84
  244. let wgs84 = view.scene.globe.ellipsoid.cartesianToCartographic(xyz);
  245. let height = wgs84.height;
  246. //当positionData为数组时绘制最终图,如果为function则绘制动态图
  247. let arr = typeof positionData.getValue === 'function' ? positionData.getValue(0) : positionData;
  248. if(GraphicProperty.style&&GraphicProperty.style.rectangle){
  249. GraphicProperty.style.rectangle.coordinates=new Cesium.CallbackProperty(function () {
  250. return Cesium.Rectangle.fromCartesianArray(arr);
  251. }, false);
  252. GraphicProperty.style.rectangle.height=height;
  253. shape = view.entities.add({
  254. id:GraphicProperty.id||null,
  255. name:GraphicProperty.name||'',
  256. description:GraphicProperty.description||'',
  257. rectangle : GraphicProperty.style.rectangle
  258. });
  259. }else{
  260. shape = view.entities.add({
  261. rectangle : {
  262. coordinates : new Cesium.CallbackProperty(function () {
  263. return Cesium.Rectangle.fromCartesianArray(arr);
  264. }, false),
  265. material : Cesium.Color.GREEN.withAlpha(0.5),
  266. height:height
  267. }
  268. });
  269. }
  270. }
  271. return shape;
  272. }
  273. //左键监听,每一次绘制都要留下记录
  274. handler.setInputAction(function(event) {
  275. //在场景中使用深度拾取scene.pickPosition globe的pick还有camera的pick在场景中拾取不准确
  276. var earthPosition = view.scene.pickPosition(event.position);
  277. //当鼠标不在地表时,earthPosition切成未定义undefined
  278. if (Cesium.defined(earthPosition)) {
  279. if (activeShapePoints.length === 0) {
  280. floatingPoint = createPoint(earthPosition);
  281. activeShapePoints.push(earthPosition);
  282. var dynamicPositions = new Cesium.CallbackProperty(function () {
  283. if (drawingMode === 'polygon') {
  284. return new Cesium.PolygonHierarchy(activeShapePoints);
  285. }
  286. return activeShapePoints;
  287. }, false);
  288. activeShape = drawShape(dynamicPositions);
  289. }
  290. activeShapePoints.push(earthPosition);
  291. let boundaryPoint=createPoint(earthPosition);
  292. boundaryPoints.push(boundaryPoint);
  293. }
  294. }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  295. //鼠标移动的监听
  296. handler.setInputAction(function(event) {
  297. if (Cesium.defined(floatingPoint)) {
  298. var newPosition = view.scene.pickPosition(event.endPosition);
  299. if (Cesium.defined(newPosition)) {
  300. floatingPoint.position.setValue(newPosition);
  301. activeShapePoints.pop();
  302. activeShapePoints.push(newPosition);
  303. }
  304. }
  305. }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  306. //重置图形,形成最终形态,把动态过程中的图形全部去掉
  307. function terminateShape() {
  308. activeShapePoints.pop();
  309. let final_Entity;
  310. if(activeShapePoints.length){
  311. final_Entity = drawShape(activeShapePoints);//绘制最终图
  312. }
  313. view.entities.remove(floatingPoint);
  314. view.entities.remove(activeShape);
  315. floatingPoint = undefined;
  316. activeShape = undefined;
  317. activeShapePoints = [];
  318. for(let i=0;i<boundaryPoints.length;i++){
  319. view.entities.remove(boundaryPoints[i]);
  320. }
  321. return final_Entity;
  322. }
  323. //右键监听,结束画图
  324. handler.setInputAction(function(event) {
  325. returnGraphic = terminateShape();
  326. if(_callback){
  327. _callback(returnGraphic);
  328. }
  329. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
  330. handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
  331. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  332. handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  333. }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
  334. }
  335. };
  1. 点、标注、面、线、圆、矩形的style式样构造按照Cesium自己的那个graphic来构造
  1. //构造polygon属性
  2. function constructPolygon(_param){
  3. if(!_param){
  4. _param={};
  5. }
  6. let PolygonlEntity = {};
  7. PolygonlEntity.polygon = {
  8. hierarchy: _param.hierarchy||null,
  9. show:_param.show||true,
  10. fill:_param.fill||true,
  11. outline: _param.outline || false,
  12. outlineWidth: _param.maximumHeights || null,
  13. outlineColor: _param.show || true,
  14. distanceDisplayCondition: _param.distanceDisplayCondition || undefined,
  15. material:_param.material||Cesium.Color.WHITE,
  16. perPositionHeight:_param.perPositionHeight||true //这个属性是false时会始终贴在地表,不会变成空间性的面
  17. };
  18. return PolygonlEntity;
  19. };
  20.  
  21. //构造polyline属性
  22. function constructPolyline(_param) {
  23. if(!_param){
  24. _param={};
  25. }
  26. let PolylineEntity = {};
  27. PolylineEntity.polyline = {
  28. width: _param.width || 1.0,
  29. positions: _param.positions||null,
  30. show: _param.show || true,
  31. material: _param.material || Cesium.Color.WHITE,
  32. distanceDisplayCondition: _param.distanceDisplayCondition || undefined
  33. };
  34. return PolylineEntity;
  35. };
  36.  
  37. //构造rectangle属性
  38. function constructRectangle(_param) {
  39. if(!_param){
  40. _param={};
  41. }
  42. let RectangleEntity = {};
  43. RectangleEntity.rectangle = {
  44. coordinates: _param.coordinates||null,
  45. show: _param.show || true,
  46. fill: _param.fill || true,
  47. material: _param.material || Cesium.Color.WHITE,
  48. distanceDisplayCondition: _param.distanceDisplayCondition || undefined
  49. };
  50. return RectangleEntity;
  51. };
  52.  
  53. //构造point属性
  54. function constructPoint(_param) {
  55. let PointEntity = {};
  56. if (!_param) {
  57. _param = {}
  58. }
  59. PointEntity.point = {
  60. color: _param.color || Cesium.Color.WHITE,
  61. pixelSize: _param.pixelSize || 1,
  62. outlineColor: _param.outlineColor || Cesium.Color.BLACK,
  63. outlineWidth: _param.outlineWidth || 0,
  64. show: _param.show || true,
  65. scaleByDistance: _param.scaleByDistance || null,
  66. translucencyByDistance: _param.translucencyByDistance || null,
  67. heightReference: _param.heightReference || Cesium.HeightReference.NONE,
  68. distanceDisplayCondition: _param.distanceDisplayCondition || undefined,
  69. };
  70. return PointEntity;
  71. };
  72.  
  73. //构造marker(billboard)属性
  74. function constructBillboard(_param) {
  75. if(!_param){
  76. _param={};
  77. }
  78. let BillboardEntity = {};
  79. BillboardEntity.billboard = {
  80. image: _param.image||null,
  81. show: _param.show || true,
  82. scale: _param.scale || 1.0,
  83. eyeOffset: _param.eyeOffset || Cesium.Cartesian3.ZERO,
  84. pixelOffset: _param.pixelOffset || Cesium.Cartesian2.ZERO,
  85. // sizeInMeters:_param.sizeInMeters||true,
  86. horizontalOrigin: _param.horizontalOrigin || Cesium.HorizontalOrigin.CENTER, //水平方向 中心
  87. verticalOrigin: _param.verticalOrigin || Cesium.VerticalOrigin.CENTER, //垂直方向 底部
  88. rotation: _param.rotation || 0,
  89. heightReference: _param.heightReference || Cesium.HeightReference.NONE,
  90. distanceDisplayCondition:_param.distanceDisplayCondition ||undefined
  91. // pixelOffsetScaleByDistance:_param.pixelOffsetScaleByDistance
  92. };
  93. return BillboardEntity
  94. };
  95.  
  96. //构造circle(ellipse)的属性
  97. function constructEllipse(_param) {
  98. if(!_param){
  99. _param={};
  100. }
  101. let EllipseEntity = {};
  102. EllipseEntity.ellipse = {
  103. semiMinorAxis: _param.semiMinorAxis || 2000,
  104. semiMajorAxis: _param.semiMajorAxis || 2000,
  105. height: _param.height || 0,
  106. material: _param.material || Cesium.Color.WHITE,
  107. };
  108. return EllipseEntity;
  109. };
  1.  

绘制

  1. let pointStyle = {
  2. style: constructPoint({
  3. color: Cesium.Color.RED,
  4. pixelSize: 10,
  5. outlineColor: Cesium.Color.BLACK,
  6. outlineWidth: 0,
  7. show: true,
  8. distanceDisplayCondition: camera.DistanceDisplayCondition(0.1, 2500.0)
  9. })
  10. };
  11.  
  12. let markerStyle = {
  13. style: constructBillboard({
  14. image: 'images/pic.png',
  15. scale: 0.3,
  16. verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  17. pixelOffset: coordinates.createCatesian2(0, -20),
  18. })
  19. };
  20.  
  21. let rectangleStyle = {
  22. style: constructRectangle({
  23. material:style.setColorWithAlpha(Cesium.Color.GREEN,0.5)
  24. })
  25. };
  26.  
  27. let circleStyle = {
  28. style: constructEllipse({
  29. material:style.setColorWithAlpha(Cesium.Color.DARKGOLDENROD,0.5)
  30. })
  31. };
  32.  
  33. //绘制
  34. let drawarr = [];
  35. function draW(e) {
  36. switch (e) {
  37. case 'point':
  38. drawGraphic(view,'point',function (_entity) {
  39. drawarr.push(_entity);
  40. },pointStyle);
  41. break;
  42. case 'polyline':
  43. drawGraphic(view,'polyline',function (_entity) {
  44. drawarr.push(_entity);
  45. },polylineStyle);
  46. break;
  47. case 'polygon':
  48. drawGraphic(view,'polygon',function (_entity) {
  49. drawarr.push(_entity);
  50. },polygonStyle);
  51. break;
  52. case 'marker':
  53. drawGraphic(view,'marker',function (_entity) {
  54. drawarr.push(_entity);
  55. },markerStyle);
  56. break;
  57. case 'circle':
  58. drawGraphic(view,'circle',function (_entity) {
  59. drawarr.push(_entity);
  60. },circleStyle);
  61. break;
  62. case 'rectangle':
  63. drawGraphic(view,'rectangle',function (_entity) {
  64. drawarr.push(_entity);
  65. },rectangleStyle);
  66. break;
  67. }
  68. }
  1. 最终效果:
  2.  

Cesium动态绘制实体(点、标注、面、线、圆、矩形)的更多相关文章

  1. Cesium 动态绘制点线面(附源码下载)

    我写的这个点线面绘制融入了增删改的功能.其中可以通过手动点击地图进行动态绘制线面,也支持通过给定坐标数组来进行线面的增加.绘制好的线面,可以点击进行修改:以上介绍了我的大概的要给操作,下面以面的构建来 ...

  2. CoreGraphics--画线/圆/矩形

    - (void)drawRect:(CGRect)rect { // Drawing code NSLog(@"drawRect自动调用"); //画图步骤 //获取上下文(/画笔 ...

  3. CAD绘制一个对齐标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimAligned 绘制一个对齐标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 第一条界线开始点X值 DOUBLE ...

  4. CAD绘制一个线型标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimRotated 绘制一个线型标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 输入第一条界线的起始点X值 DOUB ...

  5. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  6. iOS可视化动态绘制连通图(Swift版)

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  7. CAD如何动态绘制带面积周长的圆?

    CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...

  8. CAD绘制一个角度标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimAngular 绘制一个角度标注.详细说明如下: 参数 说明 DOUBLE dAngleVertexX 角度标注的顶点的X值 DOUBLE dA ...

  9. CAD绘制一个直径标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimDiametric 绘制一个直径标注.详细说明如下: 参数 说明 DOUBLE dChordPointX 在被标注的曲线上的第一个点X值 DOU ...

随机推荐

  1. 【STACK】Several待填的坑

    待学的习: https://www.cnblogs.com/xiao-ju-ruo-xjr/p/9149792.html 待写的题: loj#3184:「CEOI2018」斐波那契表示法 luoguP ...

  2. 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)

    第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...

  3. 使用Azure CLI创建Linux虚拟机

    Azure提供了三种方式创建虚拟机,分别是Azure CLI.Azure PowerShell和Azure门户.本文介绍使用Azure CLI来创建Linux虚拟机. 使用Azure CLI创建Lin ...

  4. 用 F# 手写 TypeScript 转 C# 类型绑定生成器

    前言 我们经常会遇到这样的事情:有时候我们找到了一个库,但是这个库是用 TypeScript 写的,但是我们想在 C# 调用,于是我们需要设法将原来的 TypeScript 类型声明翻译成 C# 的代 ...

  5. 从txt文本内读取数据(逐行读取),执行循环

    如下图,名称为1.txt的文本文件内有链接若干条,预期是循环读取txt文本内链接,而后访问该链接 脚本如下: for line in open('C:\\Users\\Beckham\\Desktop ...

  6. PDO和Mysqli的区别

    参考:http://www.cnblogs.com/feng18/p/6523646.html 人家写的不错

  7. learn more ,study less(二):整体性学习技术(上)

    前言:在学习整体性学习概念时,一个很好的方法是把它比喻成下棋,首先你要了解下棋的 基本规则和基本目标,本书第一部分可以看做是介绍关于整体性学习的一整套规则和目标. 一旦你理解了下棋的基本规则,你就要开 ...

  8. pymysql连接提示format: a number is required, not str

    最近想随手写一个简单的员工管理系统,第一次使用python连接数据库,在这个过程中就遇到了一些问题,遂记录 遇到问题习惯性百度一下,很多教程都不适合新手,有些还不知道是不是瞎写的,所以我觉得有必要自己 ...

  9. 手把手教你用C#做疫情传播仿真

    手把手教你用C#做疫情传播仿真 在上篇文章中,我介绍了用C#做的疫情传播仿真程序的使用和配置,演示了其运行效果,但没有着重讲其中的代码. 今天我将抽丝剥茧,手把手分析程序的架构,以及妙趣横生的细节. ...

  10. 删除我的电脑wps、百度网盘图标

    删除我的电脑wps.百度网盘图标 删除下面子项 输入"计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Expl ...