boundary_constraint_pane.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. ////////////////////////////////////////////////////////////////////////////
  2. // System Pre-define Functions
  3. // 95099372-ef3e-11ea-9c81-bf848405c62e
  4. //Callback of data preparation stage before UI is fully loaded.
  5. function OnInitializeData(reload, preview) {
  6. PUI(()=>{
  7. //you can access the 'ui' namespace in the parent form using the variable 'pui' here.
  8. //The 'pui' variable is valid in all functions of this document.
  9. //For robustness, you'd better use 'PUI(cb);' to access 'pui' variable.
  10. });
  11. // ui.stack_constraint.index = 1;
  12. // ui.stack_menu.index = 2;
  13. //control(true);
  14. //controls(true);
  15. //ui.stack_constraint.index = 2;
  16. //ui.stack_menu.index = 2;
  17. }
  18. //Callback after UI is fully loaded and displayed.
  19. function OnReady(reload, preview) {
  20. PUI(()=>{
  21. //you can access the 'ui' namespace in the parent form using the variable 'pui' here.
  22. //The 'pui' variable is valid in all functions of this document.
  23. //For robustness, you'd better use 'PUI(cb);' to access 'pui' variable.
  24. });
  25. }
  26. function OnCloseForm() {
  27. }
  28. function OnException(err) {
  29. //ui.MessageBox('Error', '' + err, MessageBox.Icon.Critical, MessageBox.Button.Ok);
  30. }
  31. //////////////////////////////////////////////////////////////////////////
  32. // Callback Functions.
  33. // 641a254c-ef3e-11ea-bc8a-379bb908bdd7
  34. function OnGetFaceName(){
  35. const str = unit.form.mainfrm.OnGetFaceName();
  36. if(!str) {
  37. unit.form.mainfrm.OnCueline('请选择面进行添加', 'red');
  38. return;
  39. }
  40. // 匹配type对应内容的正则表达式,以type:开头,后面跟着非冒号的内容直到遇到空格或者字符串结束
  41. const typeRegex = /type:([^point]+)/;
  42. // 匹配center坐标对应内容的正则表达式
  43. //const centerRegex = /point:([\d. ]+)/;
  44. const typeMatch = str.match(typeRegex);
  45. const typeInfo = typeMatch? typeMatch[1] : null;
  46. //const centerMatch = str.match(centerRegex);
  47. //const centerCoords = centerMatch? centerMatch[1].split(' ').map(x => x.trim()) : null;
  48. const match = str.match(/point:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/);
  49. const centerCoords = match.slice(1, 4);
  50. ui.type.value = typeInfo;
  51. ui.xc.value = centerCoords[0];
  52. ui.yc.value = centerCoords[1];
  53. ui.zc.value = centerCoords[2];
  54. }
  55. function OnCPointAddEnd(){
  56. const str = unit.form.mainfrm.OnGetName();
  57. if(str.includes('P') || str.includes('B')){
  58. const typeInfo = str.split(' ').slice(1, 4).join(' ');
  59. const partCoords = str.match(/center:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/).slice(1).map(Number);
  60. ui.ctpyee.value = typeInfo;
  61. ui.cxe.value = partCoords[0];
  62. ui.cye.value = partCoords[1];
  63. ui.cze.value = partCoords[2];
  64. unit.form.mainfrm.OnCueline('添加成功', 'green');
  65. }else{
  66. unit.form.mainfrm.OnCueline('请选择点进行添加', 'red');
  67. return;
  68. }
  69. }
  70. function OnCPointAddStart(){
  71. const str = unit.form.mainfrm.OnGetName();
  72. if(str.includes('P') || str.includes('B')) {
  73. // 匹配center坐标对应内容的正则表达式
  74. const typeInfo = str.split(' ').slice(1, 4).join(' ');
  75. const partCoords = str.match(/center:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/).slice(1).map(Number);
  76. ui.ctypes.value = typeInfo;
  77. ui.cxs.value = partCoords[0];
  78. ui.cys.value = partCoords[1];
  79. ui.czs.value = partCoords[2];
  80. }else{
  81. unit.form.mainfrm.OnCueline('请选择点进行添加', 'red');
  82. return;
  83. }
  84. }
  85. function OnSPointAddEnd(){
  86. const str = unit.form.mainfrm.OnGetName();
  87. if(str.includes('P') || str.includes('B')) {
  88. // 匹配center坐标对应内容的正则表达式
  89. const typeInfo = str.split(' ').slice(1, 4).join(' ');
  90. const partCoords = str.match(/center:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/).slice(1).map(Number);
  91. ui.stypee.value = typeInfo;
  92. ui.sxe.value = partCoords[0];
  93. ui.sye.value = partCoords[1];
  94. ui.sze.value = partCoords[2];
  95. }else{
  96. unit.form.mainfrm.OnCueline('请选择点进行添加', 'red');
  97. return;
  98. }
  99. }
  100. function OnSPointAddStart(){
  101. const str = unit.form.mainfrm.OnGetName();
  102. if(str.includes('P') || str.includes('B')) {
  103. // 匹配center坐标对应内容的正则表达式
  104. const typeInfo = str.split(' ').slice(1, 4).join(' ');
  105. const partCoords = str.match(/center:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/).slice(1).map(Number);
  106. ui.stypes.value = typeInfo;
  107. ui.sxs.value = partCoords[0];
  108. ui.sys.value = partCoords[1];
  109. ui.szs.value = partCoords[2];
  110. }else{
  111. unit.form.mainfrm.OnCueline('请选择点进行添加', 'red');
  112. return;
  113. }
  114. }
  115. function OnGetName(){
  116. const str = unit.form.mainfrm.OnGetName();
  117. console.log(str);
  118. if(str.includes('P') || str.includes('B')) {
  119. const typeInfo = str.split(' ').slice(1, 4).join(' ');
  120. const partCoords = str.match(/center:([-\d.]+)\s+([-\d.]+)\s+([-\d.]+)/).slice(1).map(Number);
  121. ui.type.value = typeInfo;
  122. ui.xc.value = partCoords[0];
  123. ui.yc.value = partCoords[1];
  124. ui.zc.value = partCoords[2];
  125. }else{
  126. unit.form.mainfrm.OnCueline('请选择点进行添加', 'red');
  127. return;
  128. }
  129. }
  130. //修改约束
  131. function OnModify(){
  132. if(ui.limit_constraint.index === 0 && ui.constraint_type.index === 0) {
  133. let name = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).unique;
  134. unit.form.mainfrm.OnModifyConstrains(ui.xc.value, ui.yc.value, ui.zc.value, name);
  135. let color = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).color;
  136. let Load = {
  137. "constraint":"固定支撑",
  138. "约束类型":ui.constraint_type.value,
  139. "type":ui.type.value,
  140. "xc":ui.xc.value,
  141. "yc":ui.yc.value,
  142. "zc":ui.zc.value,
  143. "固定支撑属性xd":ui.con_xn.value,
  144. "固定支撑属性xr":ui.con_xr.value,
  145. "固定支撑属性yd":ui.con_yn.value,
  146. "固定支撑属性yr":ui.con_yr.value,
  147. "固定支撑属性zd":ui.con_zn.value,
  148. "固定支撑属性zr":ui.con_zr.value,
  149. "cons_type":"constraints",
  150. "color":color,
  151. "unique":name
  152. };
  153. unit.form.tree.ModifyConstraint(Load);
  154. unit.form.mainfrm.OnCueline('修改成功', 'green');
  155. }
  156. if(ui.limit_constraint.index ===1 && ui.misConstraints.index === 0 ) {
  157. let name = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).unique;
  158. var str = unit.form.mainfrm.OnModifyBeams(ui.pb_size.value, ui.pb_xDiration.value, ui.pb_yDiration.value, ui.pb_zDiration.value, ui.pb_xCoord.value, ui.pb_yCoord.value, ui.pb_zCoord.value, ui.R.value, ui.G.value, ui.B.value, ui.pb_node_size.value, name);
  159. const match = str.match(/centers:([\s\S]*)/);
  160. if (match) {
  161. var centerCoords = match[1].trim().split(/\s+/).map(Number);
  162. console.log(centerCoords[0]);
  163. }
  164. let color = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).color;
  165. let Load = {
  166. "constraint":"梁",
  167. "非约束类型":ui.misConstraints.value,
  168. "梁约束位置xDirection":ui.pb_xDiration.value,
  169. "梁约束位置yDirection":ui.pb_yDiration.value,
  170. "梁约束位置zDirection":ui.pb_zDiration.value,
  171. "梁约束位置xCoord":ui.pb_xCoord.value,
  172. "梁约束位置yCoord":ui.pb_yCoord.value,
  173. "梁约束位置zCoord":ui.pb_zCoord.value,
  174. "梁约束参数半径":ui.rad.value,
  175. "梁约束参数长度":ui.pb_length.value,
  176. "梁约束参数个数":ui.pb_size.value,
  177. "弹性模量":ui.m.value,
  178. "泊松比":ui.poi.value,
  179. "梁节点大小半径":ui.pb_node_size.value,
  180. "R":ui.R.value,
  181. "G":ui.G.value,
  182. "B":ui.B.value,
  183. "point":centerCoords,
  184. "cons_type":"beams",
  185. "color":color,
  186. "unique":name
  187. };
  188. unit.form.tree.ModifyConstraint(Load);
  189. unit.form.mainfrm.OnCueline('修改成功', 'green');
  190. }
  191. if(ui.limit_constraint.index ===1 && ui.misConstraints.index === 1 ) {
  192. let name = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).unique;
  193. unit.form.mainfrm.OnModifySpring(ui.sxs.value, ui.sys.value, ui.szs.value, ui.sxe.value, ui.sye.value, ui.sze.value, ui.sr.value, ui.sg.value, ui.sb.value, name);
  194. let color = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).color;
  195. let Load = {
  196. "constraint":"弹簧",
  197. "非约束类型":ui.misConstraints.value,
  198. "弹簧坐标x":ui.sxs.value,
  199. "弹簧坐标y":ui.sys.value,
  200. "弹簧坐标z":ui.szs.value,
  201. "stypes":ui.stypes.value,
  202. "弹簧终点x":ui.sxe.value,
  203. "弹簧终点y":ui.sye.value,
  204. "弹簧终点z":ui.sze.value,
  205. "stypee":ui.stypee.value,
  206. "stiffness_x":ui.sstifx.value,
  207. "stiffness_y":ui.sstify.value,
  208. "stiffness_z":ui.sstifz.value,
  209. "R":ui.sr.value,
  210. "G":ui.sg.value,
  211. "B":ui.sb.value,
  212. "cons_type":"spring",
  213. "color":color,
  214. "unique":name
  215. };
  216. unit.form.tree.ModifyConstraint(Load);
  217. unit.form.mainfrm.OnCueline('修改成功', 'green');
  218. }
  219. if(ui.limit_constraint.index ===1 && ui.misConstraints.index === 2 ) {
  220. let name = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).unique;
  221. unit.form.mainfrm.OnModifyConnects(ui.cxs.value, ui.cys.value, ui.czs.value, ui.cxe.value, ui.cye.value, ui.cze.value, ui.cr.value, ui.cg.value, ui.cb.value, name);
  222. let color = model.acax_app.model.constrain.Get(model.acax_app.model.constrain.Current()).color;
  223. let Load = {
  224. "constraint":"连接",
  225. "非约束类型":ui.misConstraints.value,
  226. "弹簧坐标x":ui.cxs.value,
  227. "弹簧坐标y":ui.cys.value,
  228. "弹簧坐标z":ui.czs.value,
  229. "ctypes":ui.ctypes.value,
  230. "弹簧终点x":ui.cxe.value,
  231. "弹簧终点y":ui.cye.value,
  232. "弹簧终点z":ui.cze.value,
  233. "ctpyee":ui.ctpyee.value,
  234. "弹簧材料xn":ui.cxn.value,
  235. "弹簧材料yn":ui.cyn.value,
  236. "弹簧材料zn":ui.czn.value,
  237. "弹簧材料xr":ui.cxr.value,
  238. "弹簧材料yr":ui.cyr.value,
  239. "弹簧材料zr":ui.czr.value,
  240. "R":ui.cr.value,
  241. "G":ui.cg.value,
  242. "B":ui.cb.value,
  243. "cons_type":"connect",
  244. "color":color,
  245. "unique":name
  246. };
  247. unit.form.tree.ModifyConstraint(Load);
  248. unit.form.mainfrm.OnCueline('修改成功', 'green');
  249. }
  250. }
  251. function OnChangeBeam(){
  252. if(parseFloat(ui.pb_length.value) <= 0 || parseFloat(ui.rad.value) <= 0 || parseFloat(ui.m.value) <= 0 || parseFloat(ui.poi.value) <= 0 || parseFloat(ui.rad.value) <= 0){
  253. unit.form.mainfrm.OnChangePicture(3, 3);
  254. //unit.form.mainfrm.OnCueline('<h4 style="font-family:arial;color: red;font-size:20px;">非常抱歉,您输入的数据不在参数范围内!</h4>');
  255. unit.form.mainfrm.OnCueline('您输入的数据不在参数范围内!', 'red');
  256. }else{
  257. unit.form.mainfrm.OnChangePicture(3, 2);
  258. //unit.form.mainfrm.OnCueline('<h4 style="font-family:arial;color: Blue;font-size:20px;">恭喜您,您输入了正确的数据!</h4>');
  259. unit.form.mainfrm.OnCueline('您输入了正确的数据!', 'blue');
  260. }
  261. }
  262. function OnFix(){
  263. let temp = unit.form.tree.GetCurUniqueName();
  264. let name = temp;
  265. let constrain_data = model.acax_app.model.constrain.Database();
  266. //console.log(workcondition_data);
  267. let i = 0;
  268. let j = 0;
  269. let constrain_arr = Object.keys(constrain_data.db);
  270. //console.log(constrain_data.db);
  271. name = name + "fix0";
  272. let loopCount = 0;
  273. while(1 && loopCount < 5000){
  274. for( i = 0;i < constrain_arr.length;++i) {
  275. if(constrain_data.db[constrain_arr[i]].unique === name) {
  276. ++j;
  277. name = temp + "fix" + j;
  278. break;
  279. }
  280. }
  281. if(i === constrain_arr.length) {
  282. break;
  283. }
  284. loopCount++;
  285. }
  286. if (loopCount === 5000) {
  287. console.warn("可能出现异常情况,循环次数达到最大限制,未能成功生成唯一名字。");
  288. return;
  289. }
  290. let name1 = unit.form.mainfrm.OnConstrains(ui.xc.value, ui.yc.value, ui.zc.value, name);
  291. name1 = name1.replace(temp, "");
  292. unit.form.mainfrm.OnChangePicture(3, 2);
  293. let color = unit.form.tree.getRandomHexColor();
  294. let Load = {
  295. "constraint":"固定支撑",
  296. "约束类型":ui.constraint_type.value,
  297. "type":ui.type.value,
  298. "xc":ui.xc.value,
  299. "yc":ui.yc.value,
  300. "zc":ui.zc.value,
  301. "固定支撑属性xd":ui.con_xn.value,
  302. "固定支撑属性xr":ui.con_xr.value,
  303. "固定支撑属性yd":ui.con_yn.value,
  304. "固定支撑属性yr":ui.con_yr.value,
  305. "固定支撑属性zd":ui.con_zn.value,
  306. "固定支撑属性zr":ui.con_zr.value,
  307. "cons_type":"constraints",
  308. "color":color,
  309. "unique":name
  310. };
  311. // console.log(name1);
  312. if(ui.type.value === '--') {
  313. unit.form.mainfrm.OnCueline('未添加中心坐标', 'green');
  314. }else{
  315. unit.form.tree.CreateBoundary(Load, name1);
  316. unit.form.mainfrm.OnCueline('您完成了固定支撑属性的添加,请用鼠标右键选中需要施加约束的物体并按快捷键T或者t进行添加!', 'green');
  317. }
  318. }
  319. function OnBeam2(){
  320. unit.form.mainfrm.OnSend('beamHightLight2 ' + ui.m_seg.value + ' ' + ui.m_len.value + ' ' + ui.m_radius.value + ' ' + ui.m_mat.value + ' ' + ui.m_poi.value + ' ' + ui.m_R.value + ' '+ ui.m_G.value + ' ' + ui.m_B.value + ' ' + ui.m_ras.value);
  321. model.clearStr();
  322. unit.form.mainfrm.OnChangePicture(3, 2);
  323. unit.form.mainfrm.OnCueline('您成功做好了不均匀梁的添加!', 'green');
  324. }
  325. function OnConnect(){
  326. let temp = unit.form.tree.GetCurUniqueName();
  327. let name = temp;
  328. let constrain_data = model.acax_app.model.constrain.Database();
  329. let i = 0;
  330. let j = 0;
  331. let constrain_arr = Object.keys(constrain_data.db);
  332. name = name + "con0";
  333. let loopCount = 0;
  334. while(1 && loopCount < 5000){
  335. for( i = 0;i < constrain_arr.length;++i) {
  336. if(constrain_data.db[constrain_arr[i]].unique === name) {
  337. ++j;
  338. name = temp + "con" + j;
  339. break;
  340. }
  341. }
  342. if(i === constrain_arr.length) {
  343. break;
  344. }
  345. loopCount++;
  346. }
  347. if (loopCount === 5000) {
  348. console.warn("可能出现异常情况,循环次数达到最大限制,未能成功生成唯一名字。");
  349. return;
  350. }
  351. let name1 = unit.form.mainfrm.OnConnects(ui.cxs.value, ui.cys.value, ui.czs.value, ui.cxe.value, ui.cye.value, ui.cze.value, ui.cr.value, ui.cg.value, ui.cb.value, name);
  352. name1 = name1.replace(temp, "");
  353. //console.log(name1);
  354. unit.form.mainfrm.OnChangePicture(3, 2);
  355. let color = unit.form.tree.getRandomHexColor();
  356. let Load = {
  357. "constraint":"连接",
  358. "非约束类型":ui.misConstraints.value,
  359. "弹簧坐标x":ui.cxs.value,
  360. "弹簧坐标y":ui.cys.value,
  361. "弹簧坐标z":ui.czs.value,
  362. "ctypes":ui.ctypes.value,
  363. "弹簧终点x":ui.cxe.value,
  364. "弹簧终点y":ui.cye.value,
  365. "弹簧终点z":ui.cze.value,
  366. "ctpyee":ui.ctpyee.value,
  367. "弹簧材料xn":ui.cxn.value,
  368. "弹簧材料yn":ui.cyn.value,
  369. "弹簧材料zn":ui.czn.value,
  370. "弹簧材料xr":ui.cxr.value,
  371. "弹簧材料yr":ui.cyr.value,
  372. "弹簧材料zr":ui.czr.value,
  373. "R":ui.cr.value,
  374. "G":ui.cg.value,
  375. "B":ui.cb.value,
  376. "cons_type":"connect",
  377. "color":color,
  378. "unique":name
  379. };
  380. //console.log(name1);
  381. if(ui.ctypes.value === '--' || ui.ctpyee.value === '--') {
  382. unit.form.mainfrm.OnCueline('未添加弹簧坐标', 'red');
  383. }else{
  384. unit.form.tree.CreateBoundary(Load, name1);
  385. unit.form.mainfrm.OnCueline('您成功地做好了连接!', 'green');
  386. }
  387. }
  388. function onEndMessage(){
  389. controls(false);
  390. }
  391. function onStartMessage(){
  392. controls(true);
  393. }
  394. function controls(idx){
  395. ui.pb_start_message.enable = !idx;
  396. ui.pb_start_mes.enable = !idx;
  397. ui.pb_start_x.enable = idx;
  398. ui.pb_start_y.enable = idx;
  399. ui.pb_start_z.enable = idx;
  400. ui.pb_end_message.enable = idx;
  401. ui.pb_end_mes.enable = idx;
  402. ui.pb_end_x.enable = !idx;
  403. ui.pb_end_y.enable = !idx;
  404. ui.pb_end_z.enable = !idx;
  405. if(idx === true){
  406. model.setStartEnd(0);
  407. }
  408. if(idx === false){
  409. model.setStartEnd(1);
  410. }
  411. }
  412. function OnChangeValue(){
  413. ui.pb_pass.enable = false;
  414. }
  415. function OnReturn(){
  416. unit.form.mainfrm.menu(4);
  417. }
  418. function OnFile(){
  419. ui.pb_pass.enable = true;
  420. model.setCon(1);
  421. if(ui.stack_menu.index === 0){
  422. let id = parent.setTimeout(() => {
  423. unit.form.mainfrm.OnSend('0');
  424. }, 100);
  425. unit.form.mainfrm.OnSend('beamSave ' + model.getCurrentDirectory());
  426. }
  427. if(ui.stack_menu.index === 1){
  428. let id = parent.setTimeout(() => {
  429. unit.form.mainfrm.OnSend('0');
  430. }, 100);
  431. unit.form.mainfrm.OnSend('springSave ' + model.getCurrentDirectory());
  432. }
  433. }
  434. function OnSpring(){
  435. let temp = unit.form.tree.GetCurUniqueName();
  436. let name = temp;
  437. let constrain_data = model.acax_app.model.constrain.Database();
  438. //console.log(workcondition_data);
  439. let i = 0;
  440. let j = 0;
  441. let constrain_arr = Object.keys(constrain_data.db);
  442. //console.log(constrain_data.db);
  443. name = name + "spring0";
  444. let loopCount = 0;
  445. while(1&&loopCount < 5000){
  446. for( i = 0;i < constrain_arr.length;++i) {
  447. if(constrain_data.db[constrain_arr[i]].unique === name) {
  448. ++j;
  449. name = temp + "spring" + j;
  450. break;
  451. }
  452. }
  453. if(i === constrain_arr.length) {
  454. break;
  455. }
  456. loopCount++;
  457. }
  458. if (loopCount === 5000) {
  459. console.warn("可能出现异常情况,循环次数达到最大限制,未能成功生成唯一名字。");
  460. return;
  461. }
  462. let name1 = unit.form.mainfrm.OnSpring(ui.sxs.value, ui.sys.value, ui.szs.value, ui.sxe.value, ui.sye.value, ui.sze.value, ui.sr.value, ui.sg.value, ui.sb.value, name);
  463. name1 = name1.replace(temp, "");
  464. unit.form.mainfrm.OnChangePicture(3, 2);
  465. let color = unit.form.tree.getRandomHexColor();
  466. let Load = {
  467. "constraint":"弹簧",
  468. "非约束类型":ui.misConstraints.value,
  469. "弹簧坐标x":ui.sxs.value,
  470. "弹簧坐标y":ui.sys.value,
  471. "弹簧坐标z":ui.szs.value,
  472. "stypes":ui.stypes.value,
  473. "弹簧终点x":ui.sxe.value,
  474. "弹簧终点y":ui.sye.value,
  475. "弹簧终点z":ui.sze.value,
  476. "stypee":ui.stypee.value,
  477. "stiffness_x":ui.sstifx.value,
  478. "stiffness_y":ui.sstify.value,
  479. "stiffness_z":ui.sstifz.value,
  480. "R":ui.sr.value,
  481. "G":ui.sg.value,
  482. "B":ui.sb.value,
  483. "cons_type":"spring",
  484. "color":color,
  485. "unique":name
  486. };
  487. //console.log(name1);
  488. if(ui.stypes.value === '--' || ui.stypee.value === '--') {
  489. unit.form.mainfrm.OnCueline('未添加弹簧坐标', 'green');
  490. }else{
  491. unit.form.tree.CreateBoundary(Load, name1);
  492. unit.form.mainfrm.OnCueline('您完成了弹簧约束的添加!', 'green');
  493. }
  494. }
  495. function OnBeam(){
  496. let temp = unit.form.tree.GetCurUniqueName();
  497. let name = temp;
  498. let constrain_data = model.acax_app.model.constrain.Database();
  499. //console.log(workcondition_data);
  500. let i = 0;
  501. let j = 0;
  502. let constrain_arr = Object.keys(constrain_data.db);
  503. //console.log(constrain_data.db);
  504. name = name + "beam0";
  505. let loopCount = 0;
  506. while(1&&loopCount < 5000){
  507. for( i = 0;i < constrain_arr.length;++i) {
  508. if(constrain_data.db[constrain_arr[i]].unique.split(" ")[0] === name) {
  509. ++j;
  510. name = temp + "beam" + j;
  511. break;
  512. }
  513. }
  514. if(i === constrain_arr.length) {
  515. break;
  516. }
  517. loopCount++;
  518. }
  519. if (loopCount === 5000) {
  520. console.warn("可能出现异常情况,循环次数达到最大限制,未能成功生成唯一名字。");
  521. return;
  522. }
  523. name = name + " B " + j;
  524. const str =unit.form.mainfrm.OnBeams(ui.pb_size.value, ui.pb_xDiration.value, ui.pb_yDiration.value, ui.pb_zDiration.value, ui.pb_xCoord.value, ui.pb_yCoord.value, ui.pb_zCoord.value, ui.R.value, ui.G.value, ui.B.value, ui.pb_node_size.value, name);
  525. console.log(str);
  526. let name1 = str.split(' ')[0].split(':')[1];
  527. name1 = name1.replace(temp, "");
  528. //const centerRegex = /centers:([\d. ]+)/;
  529. //const centerMatch = str.match(centerRegex);
  530. //const centerCoords = centerMatch? centerMatch[1].split(' ').map(x => x.trim()) : null;
  531. const match = str.match(/centers:([\s\S]*)/);
  532. if (match) {
  533. var centerCoords = match[1].trim().split(/\s+/).map(Number);
  534. console.log(centerCoords[0]);
  535. }
  536. let color = unit.form.tree.getRandomHexColor();
  537. //console.log(centerCoords);
  538. unit.form.mainfrm.OnChangePicture(3, 2);
  539. let Load = {
  540. "constraint":"梁",
  541. "非约束类型":ui.misConstraints.value,
  542. "梁约束位置xDirection":ui.pb_xDiration.value,
  543. "梁约束位置yDirection":ui.pb_yDiration.value,
  544. "梁约束位置zDirection":ui.pb_zDiration.value,
  545. "梁约束位置xCoord":ui.pb_xCoord.value,
  546. "梁约束位置yCoord":ui.pb_yCoord.value,
  547. "梁约束位置zCoord":ui.pb_zCoord.value,
  548. "梁约束参数半径":ui.rad.value,
  549. "梁约束参数长度":ui.pb_length.value,
  550. "梁约束参数个数":ui.pb_size.value,
  551. "弹性模量":ui.m.value,
  552. "泊松比":ui.poi.value,
  553. "梁节点大小半径":ui.pb_node_size.value,
  554. "R":ui.R.value,
  555. "G":ui.G.value,
  556. "B":ui.B.value,
  557. "point":centerCoords,
  558. "cons_type":"beams",
  559. "color":color,
  560. "unique":name
  561. };
  562. //console.log(name1);
  563. unit.form.tree.CreateBoundary(Load, name1);
  564. unit.form.mainfrm.OnCueline('您完成了梁约束的添加!', 'green');
  565. }
  566. function control(idx){
  567. ui.pb_start.enable = !idx;
  568. ui.pb_x.enable = idx;
  569. ui.pb_y.enable = idx;
  570. ui.pb_z.enable = idx;
  571. ui.pb_end.enable = idx;
  572. ui.pb_X.enable = !idx;
  573. ui.pb_Y.enable = !idx;
  574. ui.pb_Z.enable = !idx;
  575. if(idx === true){
  576. model.setStartEnd(0);
  577. }
  578. if(idx === false){
  579. model.setStartEnd(1);
  580. }
  581. }
  582. function OnEed(){
  583. control(false);
  584. }
  585. function OnStart(){
  586. control(true);
  587. }
  588. function OnChangeMenu(){
  589. ui.stack_menu.index = parseFloat(ui.misConstraints.index);
  590. // console.log(ui.no_limit_constraint.index === 1);
  591. //console.log(ui.limit_constraint.index);
  592. if(ui.stack_menu.index === 3){
  593. model.setBeam(true);
  594. }else{
  595. model.setBeam(false);
  596. }
  597. }
  598. function OnChangeConstraint(){
  599. ui.stack_constraint.index = ui.limit_constraint.index;
  600. }
  601. function ChangeRadiobutton(idx) {
  602. ui.limit_constraint.index = parseInt(idx);
  603. }
  604. //The message corresponding callback executed by the docker pane.
  605. // when calling [side_pane].fireEvent(type,para) in the main form.
  606. function OnParentDockerMessage(type, para) {
  607. }
  608. //////////////////////////////////////////////////////////////////////////
  609. // Utils Functions.
  610. // 6c165ad6-ef3e-11ea-987c-b761a131c2fe
  611. CW_DeclareVariable("idx",
  612. val => {
  613. ui.limit_constraint.index = val;
  614. }, () => {});
  615. CW_DeclareVariable("pb_x",
  616. val => {
  617. ui.pb_x.value = val;
  618. ui.pb_start_x.value = val;
  619. }, () => {});
  620. CW_DeclareVariable("pb_y",
  621. val => {
  622. ui.pb_y.value = val;
  623. ui.pb_start_y.value = val;
  624. }, () => {});
  625. CW_DeclareVariable("pb_z",
  626. val => {
  627. ui.pb_z.value = val;
  628. ui.pb_start_z.value = val;
  629. }, () => {});
  630. CW_DeclareVariable("pb_X",
  631. val => {
  632. ui.pb_X.value = val;
  633. ui.pb_end_x.value = val;
  634. }, () => {});
  635. CW_DeclareVariable("pb_Y",
  636. val => {
  637. ui.pb_Y.value = val;
  638. ui.pb_end_y.value = val;
  639. }, () => {});
  640. CW_DeclareVariable("pb_Z",
  641. val => {
  642. ui.pb_Z.value = val;
  643. ui.pb_end_z.value = val;
  644. }, () => {});
  645. CW_DeclareVariable("listbox",
  646. val => {
  647. ui.listbox.list = [
  648. val
  649. ];
  650. }, () => {});
  651. CW_DeclareVariable("start_mes",
  652. val => {
  653. ui.pb_type1.value = val;
  654. ui.pb_start_mes.value = val;
  655. }, () => {});
  656. CW_DeclareVariable("end_mes",
  657. val => {
  658. ui.pb_type2.value = val;
  659. ui.pb_end_mes.value = val;
  660. }, () => {});
  661. CW_DeclareVariable("change1",
  662. val => {
  663. ui.stack_constraint.index = val;
  664. }, () => {});
  665. CW_DeclareVariable("change2",
  666. val => {
  667. ui.stack_menu.index = val;
  668. ui.misConstraints.index = val;
  669. }, () => {});
  670. //固定支撑
  671. CW_DeclareVariable("setConstraint0",
  672. val => {
  673. ui.type.value = val.type;
  674. ui.xc.value=val.xc;
  675. ui.yc.value=val.yc;
  676. ui.zc.value=val.zc;
  677. ui.con_xn.value = val["固定支撑属性xd"];
  678. ui.con_xr.value = val["固定支撑属性xr"];
  679. ui.con_yn.value = val["固定支撑属性yd"];
  680. ui.con_yr.value = val["固定支撑属性yr"];
  681. ui.con_zn.value = val["固定支撑属性zd"];
  682. ui.con_zr.value = val["固定支撑属性zr"];
  683. }, () => {});
  684. //梁
  685. CW_DeclareVariable("setConstraint1",
  686. val => {
  687. ui.pb_xDiration.value = val["梁约束位置xDirection"];
  688. ui.pb_yDiration.value = val["梁约束位置yDirection"];
  689. ui.pb_zDiration.value = val["梁约束位置zDirection"];
  690. ui.pb_xCoord.value = val["梁约束位置xCoord"];
  691. ui.pb_yCoord.value = val["梁约束位置yCoord"];
  692. ui.pb_zCoord.value = val["梁约束位置zCoord"];
  693. ui.rad.value = val["梁约束参数半径"];
  694. ui.pb_length.value = val["梁约束参数长度"];
  695. ui.pb_size.value = val["梁约束参数个数"];
  696. ui.m.value = val["弹性模量"];
  697. ui.poi.value = val["泊松比"];
  698. ui.pb_node_size.value = val["梁节点大小半径"];
  699. ui.R.value = val.R;
  700. ui.G.value = val.G;
  701. ui.B.value = val.B;
  702. }, () => {});
  703. //弹簧
  704. CW_DeclareVariable("setConstraint2",
  705. val => {
  706. ui.sxs.value = val["弹簧坐标x"];
  707. ui.sys.value = val["弹簧坐标y"];
  708. ui.szs.value = val["弹簧坐标z"];
  709. ui.stypes.value = val.stypes;
  710. ui.sxe.value = val["弹簧终点x"];
  711. ui.sye.value = val["弹簧终点y"];
  712. ui.sze.value = val["弹簧终点z"];
  713. ui.stypee.value = val.stypee;
  714. ui.sstifx.value = val.stiffness_x;
  715. ui.sstify.value = val.stiffness_y;
  716. ui.sstifz.value = val.stiffness_z;
  717. ui.sr.value = val.R;
  718. ui.sg.value = val.G;
  719. ui.sb.value = val.B;
  720. }, () => {});
  721. //连接
  722. CW_DeclareVariable("setConstraint3",
  723. val => {
  724. ui.cxs.value = val["弹簧坐标x"];
  725. ui.cys.value= val["弹簧坐标y"];
  726. ui.czs.value= val["弹簧坐标z"];
  727. ui.ctypes.value= val.ctypes;
  728. ui.cxe.value= val["弹簧终点x"];
  729. ui.cye.value= val["弹簧终点y"];
  730. ui.cze.value= val["弹簧终点z"];
  731. ui.ctpyee.value= val.ctpyee;
  732. ui.cxn.value = val["弹簧材料xn"];
  733. ui.cyn.value= val["弹簧材料yn"];
  734. ui.czn.value= val["弹簧材料zn"];
  735. ui.cxr.value= val["弹簧材料xr"];
  736. ui.cyr.value= val["弹簧材料yr"];
  737. ui.czr.value= val["弹簧材料zr"];
  738. ui.cr.value = val.R;
  739. ui.cg.value = val.G;
  740. ui.cb.value = val.B;
  741. }, () => {});
  742. function onDragFile(filepath) {
  743. }
  744. function PUI(cb) {
  745. if(pui){cb();}
  746. }
  747. /*Usage of BLOCK_EVENT
  748. BLOCK_EVENT(()=>{
  749. ui.[name].[var] = ...;
  750. });
  751. */
  752. function BLOCK_EVENT(cb) {
  753. ui.block_event = true;
  754. cb();
  755. ui.block_event = false;
  756. }
  757. //////////////////////////////////////////////////////////////////////////
  758. // template codes for cw callback js.
  759. function CW_DeclareVariable(name, setter, getter) {
  760. if(typeof(__DeclareVariable) === 'function') {
  761. __DeclareVariable(name, setter, getter);
  762. }
  763. }
  764. function CW_DeclareOuterVariable(name) {
  765. if(typeof(__DeclareOuterVariable) === 'function') {
  766. __DeclareOuterVariable(name);
  767. }
  768. }