/static/js/MxDraw/mxcustom.js

https://github.com/3xxx/engineercms · JavaScript · 346 lines · 157 code · 50 blank · 139 comment · 55 complexity · 41b6ae406611789c5efdffefd3230a51 MD5 · raw file

  1. // �����Զ���ʵ�庯��
  2. function InsertCustomEntity() {
  3. var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
  4. getPt.message = "��ȡ��һ��";
  5. if (getPt.go() != 1)
  6. return;
  7. var frstPt = getPt.value();
  8. if (frstPt == null)
  9. return;
  10. var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
  11. getSecondPt.message = "��ȡ�ڶ���";
  12. getSecondPt.basePoint = frstPt;
  13. getSecondPt.setUseBasePt(true);
  14. if (getSecondPt.go() != 1)
  15. return;
  16. var secondPt = getSecondPt.value();
  17. if (secondPt == null)
  18. return;
  19. var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity", "");
  20. ent.SetPoint("spt", frstPt);
  21. ent.SetPoint("ept", secondPt);
  22. ent.SetString("MxObjectAppName", "�ҵ��Զ���ʵ����");
  23. }
  24. // ��ʽ���ַ���
  25. function formatNumber(num, pattern) {
  26. var strarr = num ? num.toString().split('.') : ['0'];
  27. var fmtarr = pattern ? pattern.split('.') : [''];
  28. var retstr = '';
  29. // ��������
  30. var str = strarr[0];
  31. var fmt = fmtarr[0];
  32. var i = str.length - 1;
  33. var comma = false;
  34. for (var f = fmt.length - 1; f >= 0; f--) {
  35. switch (fmt.substr(f, 1)) {
  36. case '#':
  37. if (i >= 0) retstr = str.substr(i--, 1) + retstr;
  38. break;
  39. case '0':
  40. if (i >= 0) retstr = str.substr(i--, 1) + retstr;
  41. else retstr = '0' + retstr;
  42. break;
  43. case ',':
  44. comma = true;
  45. retstr = ',' + retstr;
  46. break;
  47. }
  48. }
  49. if (i >= 0) {
  50. if (comma) {
  51. var l = str.length;
  52. for (; i >= 0; i--) {
  53. retstr = str.substr(i, 1) + retstr;
  54. if (i > 0 && ((l - i) % 3) == 0) retstr = ',' + retstr;
  55. }
  56. }
  57. else retstr = str.substr(0, i + 1) + retstr;
  58. }
  59. retstr = retstr + '.';
  60. // ����������
  61. str = strarr.length > 1 ? strarr[1] : '';
  62. fmt = fmtarr.length > 1 ? fmtarr[1] : '';
  63. i = 0;
  64. for (var f = 0; f < fmt.length; f++) {
  65. switch (fmt.substr(f, 1)) {
  66. case '#':
  67. if (i < str.length) retstr += str.substr(i++, 1);
  68. break;
  69. case '0':
  70. if (i < str.length) retstr += str.substr(i++, 1);
  71. else retstr += '0';
  72. break;
  73. }
  74. }
  75. return retstr.replace(/^,+/, '').replace(/\.$/, '');
  76. }
  77. // �Զ���ʵ����ƺ���
  78. /*
  79. function ExplodeFun(pCustomEntity, pWorldDraw) {
  80. var sGuid = pCustomEntity.Guid;
  81. if (sGuid == "TestMxCustomEntity") {
  82. if (!pCustomEntity.IsHave("ept"))
  83. return;
  84. var stp = pCustomEntity.GetPoint("spt");
  85. if (stp == null)
  86. return;
  87. var ept = pCustomEntity.GetPoint("ept");
  88. if (ept == null)
  89. return;
  90. var mxUtility = mxOcx.NewUtility();
  91. var vec = ept.SumVector(stp);
  92. vec.Mult(0.5);
  93. var midPt = mxOcx.NewPoint();
  94. midPt.x = stp.x;
  95. midPt.y = stp.y;
  96. midPt.Add(vec);
  97. var dAng = vec.Angle();
  98. dAng = mxUtility.GetDimAngle(dAng);
  99. var dDis = 0.0;
  100. dDis = stp.DistanceTo(ept);
  101. var sTxt = "L=" + formatNumber(dDis, '#.##');
  102. dAng = dAng * 180.0 / 3.14159265;
  103. vec.RotateByXyPlan(3.14159265 / 2.0);
  104. vec.Normalize();
  105. vec.Mult(10);
  106. stp.Add(vec);
  107. ept.Add(vec);
  108. pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);
  109. vec.Mult(2);
  110. stp.Sum(vec);
  111. ept.Sum(vec);
  112. pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);
  113. pWorldDraw.SetColorIndex(1);
  114. pWorldDraw.DrawText(midPt.x, midPt.y, sTxt, 5, dAng,
  115. 1, 2);
  116. mxOcx.SetEventRet(1);
  117. }
  118. }
  119. */
  120. // �����Զ���ʵ��е�
  121. /*function GetGripPointsFun(pCustomEntity) {
  122. var sGuid = pCustomEntity.Guid;
  123. if (sGuid == "TestMxCustomEntity") {
  124. if (!pCustomEntity.IsHave("ept"))
  125. return;
  126. var stp = pCustomEntity.GetPoint("spt");
  127. if (stp == null)
  128. return;
  129. var ept = pCustomEntity.GetPoint("ept");
  130. if (ept == null)
  131. return;
  132. var ret = mxOcx.NewResbuf();
  133. ret.AddPoint(stp);
  134. ret.AddPoint(ept);
  135. mxOcx.SetEventRetEx(ret);
  136. }
  137. }*/
  138. // �ƶ��Զ���ʵ��е�
  139. /*function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {
  140. var sGuid = pCustomEntity.Guid;
  141. if (sGuid == "TestMxCustomEntity") {
  142. if (!pCustomEntity.IsHave("ept"))
  143. return;
  144. var stp = pCustomEntity.GetPoint("spt");
  145. if (stp == null)
  146. return;
  147. var ept = pCustomEntity.GetPoint("ept");
  148. if (ept == null)
  149. return;
  150. if (lGridIndex == 0) {
  151. stp.x = stp.x + dOffsetX;
  152. stp.y = stp.y + dOffsetY;
  153. pCustomEntity.SetPoint("spt", stp);
  154. }
  155. else {
  156. ept.x = ept.x + dOffsetX;
  157. ept.y = ept.y + dOffsetY;
  158. pCustomEntity.SetPoint("ept", ept);
  159. }
  160. mxOcx.SetEventRet(1);
  161. }
  162. }*/
  163. // �任�Զ���ʵ��
  164. function TransformByFun(pCustomEntity, pMatXform) {
  165. var sGuid = pCustomEntity.Guid;
  166. if (sGuid == "TestMxCustomEntity") {
  167. if (!pCustomEntity.IsHave("ept"))
  168. return;
  169. var stp = pCustomEntity.GetPoint("spt");
  170. if (stp == null)
  171. return;
  172. var ept = pCustomEntity.GetPoint("ept");
  173. if (ept == null)
  174. return;
  175. stp.TransformBy(pMatXform);
  176. ept.TransformBy(pMatXform);
  177. pCustomEntity.SetPoint("spt", stp);
  178. pCustomEntity.SetPoint("ept", ept);
  179. mxOcx.SetEventRet(1);
  180. }
  181. }
  182. // �����Զ���ʵ����С���
  183. function GetGeomExtentsFun(pCustomEntity) {
  184. var sGuid = pCustomEntity.Guid;
  185. if (sGuid == "TestMxCustomEntity") {
  186. if (!pCustomEntity.IsHave("ept"))
  187. return;
  188. var stp = pCustomEntity.GetPoint("spt");
  189. if (stp == null)
  190. return;
  191. var ept = pCustomEntity.GetPoint("ept");
  192. if (ept == null)
  193. return;
  194. var ret = mxOcx.NewResbuf();
  195. ret.AddPoint(stp);
  196. ret.AddPoint(ept);
  197. mxOcx.SetEventRetEx(ret);
  198. }
  199. }
  200. function GetOsnapPointsFun(pCustomEntity, lOsnapMode, dPickPointX, dPickPointY, dLastPointX, dLastPointY) {
  201. // enum OsnapMode { kOsModeEnd = 1,
  202. // kOsModeMid = 2,
  203. // kOsModeCen = 3,
  204. // kOsModeNode = 4,
  205. // kOsModeQuad = 5,
  206. // kOsModeIns = 7,
  207. // kOsModePerp = 8,
  208. // kOsModeTan = 9,
  209. // kOsModeNear = 10,
  210. // kOsModeInt = 11
  211. // };
  212. var sGuid = pCustomEntity.Guid;
  213. if (sGuid == "TestMxCustomEntity")
  214. {
  215. if(!pCustomEntity.IsHave("ept") )
  216. return;
  217. var stp = pCustomEntity.GetPoint("spt");
  218. if(stp == null)
  219. return;
  220. var ept = pCustomEntity.GetPoint("ept");
  221. if(ept == null)
  222. return;
  223. if(lOsnapMode == 1)
  224. {
  225. // �˵㲶׽��
  226. var pickPoint = mxOcx.NewPoint();
  227. pickPoint.x = dPickPointX;
  228. pickPoint.y = dPickPointY;
  229. var dDis1 = pickPoint.DistanceTo(stp);
  230. var dDis2 = pickPoint.DistanceTo(ept);
  231. var ret = mxOcx.NewResbuf();
  232. if(dDis1 < dDis2)
  233. {
  234. ret.AddDouble(stp.x);
  235. ret.AddDouble(stp.y);
  236. }
  237. else {
  238. ret.AddDouble(ept.x);
  239. ret.AddDouble(ept.y);
  240. }
  241. mxOcx.SetEventRetEx(ret);
  242. }
  243. else if(lOsnapMode == 10)
  244. {
  245. // ����㲶׽.
  246. var pickPoint = mxOcx.NewPoint();
  247. pickPoint.x = dPickPointX;
  248. pickPoint.y = dPickPointY;
  249. var line = mxOcx.NewEntity("IMxDrawLine");
  250. line.EndPoint = ept;
  251. line.StartPoint = stp;
  252. var closePoint = line.GetClosestPointTo2(pickPoint,false);
  253. if(closePoint != null)
  254. {
  255. var ret = mxOcx.NewResbuf();
  256. ret.AddDouble(closePoint.x);
  257. ret.AddDouble(closePoint.y);
  258. mxOcx.SetEventRetEx(ret);
  259. }
  260. }
  261. }
  262. }