github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/DATAIN.go (about) 1 //This file is part of EESLISM. 2 // 3 //Foobar is free software : you can redistribute itand /or modify 4 //it under the terms of the GNU General Public License as published by 5 //the Free Software Foundation, either version 3 of the License, or 6 //(at your option) any later version. 7 // 8 //Foobar is distributed in the hope that it will be useful, 9 //but WITHOUT ANY WARRANTY; without even the implied warranty of 10 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 11 //GNU General Public License for more details. 12 // 13 //You should have received a copy of the GNU General Public License 14 //along with Foobar.If not, see < https://www.gnu.org/licenses/>. 15 16 package eeslism 17 18 import ( 19 "fmt" 20 "os" 21 "strconv" 22 ) 23 24 /* 25 26 入力データの読み込み 27 FILE=DATAIN.c 28 Create Date=1999.6.7 29 */ 30 31 func HISASHI(fi *EeTokens, sb *sunblk) { 32 sb.snbname = fi.GetToken() 33 34 // 色の初期値 35 sb.rgb[0] = 0.0 36 sb.rgb[1] = 0.2 37 sb.rgb[2] = 0.0 38 39 for fi.IsEnd() == false { 40 NAME := fi.GetToken() 41 if NAME[0] == ';' { 42 break 43 } 44 45 if NAME == "-xy" { 46 sb.x = fi.GetFloat() 47 sb.y = fi.GetFloat() 48 } else if NAME == "-DW" { 49 sb.D = fi.GetFloat() 50 sb.W = fi.GetFloat() 51 } else if NAME == "-a" { 52 sb.WA = fi.GetFloat() 53 } else if NAME == "-rgb" { 54 sb.rgb[0] = fi.GetFloat() 55 sb.rgb[1] = fi.GetFloat() 56 sb.rgb[2] = fi.GetFloat() 57 } else { 58 fmt.Printf("ERROR parameter----HISASI: %s\n", NAME) 59 60 os.Exit(1) 61 } 62 } 63 } 64 65 /*--------------------------------------------------------------*/ 66 67 func BARUKO(fi *EeTokens, sb *sunblk) { 68 sb.ref = 0.0 69 70 sb.rgb[0] = 0.0 71 sb.rgb[1] = 0.2 72 sb.rgb[2] = 0.0 73 74 sb.snbname = fi.GetToken() 75 76 for fi.IsEnd() == false { 77 NAME := fi.GetToken() 78 if NAME[0] == ';' { 79 break 80 } 81 82 if NAME == "-xy" { 83 sb.x = fi.GetFloat() 84 sb.y = fi.GetFloat() 85 } else if NAME == "-DHWh" { 86 sb.D = fi.GetFloat() 87 sb.H = fi.GetFloat() 88 sb.W = fi.GetFloat() 89 sb.h = fi.GetFloat() 90 } else if NAME == "-ref" { 91 sb.ref = fi.GetFloat() 92 } else if NAME == "-rgb" { 93 sb.rgb[0] = fi.GetFloat() 94 sb.rgb[1] = fi.GetFloat() 95 sb.rgb[2] = fi.GetFloat() 96 } else { 97 fmt.Printf("ERROR parameter----WBARUKONI: %s\n", NAME) 98 99 os.Exit(1) 100 } 101 } 102 } 103 104 /*------------------------------------------------------------------*/ 105 106 func SODEK(fi *EeTokens, sb *sunblk) { 107 sb.rgb[0] = 0.0 108 sb.rgb[1] = 0.2 109 sb.rgb[2] = 0.0 110 111 sb.snbname = fi.GetToken() 112 113 for fi.IsEnd() == false { 114 NAME := fi.GetToken() 115 if NAME[0] == ';' { 116 break 117 } 118 119 if NAME == "-xy" { 120 sb.x = fi.GetFloat() 121 sb.y = fi.GetFloat() 122 } else if NAME == "-DH" { 123 sb.D = fi.GetFloat() 124 sb.H = fi.GetFloat() 125 } else if NAME == "-a" { 126 sb.WA = fi.GetFloat() 127 } else if NAME == "-rgb" { 128 sb.rgb[0] = fi.GetFloat() 129 sb.rgb[1] = fi.GetFloat() 130 sb.rgb[2] = fi.GetFloat() 131 } else { 132 fmt.Printf("ERROR parameter----SODEKABE: %s\n", NAME) 133 134 os.Exit(1) 135 } 136 } 137 } 138 139 /*-----------------------------------------------------------------------*/ 140 141 func SCREEN(fi *EeTokens, sb *sunblk) { 142 sb.rgb[0] = 0.0 143 sb.rgb[1] = 0.2 144 sb.rgb[2] = 0.0 145 146 sb.snbname = fi.GetToken() 147 148 for fi.IsEnd() == false { 149 NAME := fi.GetToken() 150 if NAME[0] == ';' { 151 break 152 } 153 154 if NAME == "-xy" { 155 sb.x = fi.GetFloat() 156 sb.y = fi.GetFloat() 157 } else if NAME == "-DHW" { 158 sb.D = fi.GetFloat() 159 sb.H = fi.GetFloat() 160 sb.W = fi.GetFloat() 161 } else if NAME == "-rgb" { 162 sb.rgb[0] = fi.GetFloat() 163 sb.rgb[1] = fi.GetFloat() 164 sb.rgb[2] = fi.GetFloat() 165 } else { 166 fmt.Printf("ERROR paramater---MADOHIYOKE: %s\n", NAME) 167 168 os.Exit(1) 169 } 170 } 171 } 172 173 /*----------------------------------------------------------------*/ 174 175 func rmpdata(fi *EeTokens, rp *RRMP, _wp []MADO) { 176 rp.ref = 0.0 177 rp.grpx = 1.0 178 179 rp.rgb[0] = 0.9 180 rp.rgb[1] = 0.9 181 rp.rgb[2] = 0.9 182 183 rp.rmpname = fi.GetToken() 184 rp.wallname = fi.GetToken() 185 186 for fi.IsEnd() == false { 187 NAME := fi.GetToken() 188 if NAME[0] == ';' { 189 break 190 } 191 192 if NAME == "-xyb" { 193 rp.xb0 = fi.GetFloat() 194 rp.yb0 = fi.GetFloat() 195 } else if NAME == "-WH" { 196 rp.Rw = fi.GetFloat() 197 rp.Rh = fi.GetFloat() 198 } else if NAME == "-ref" { 199 rp.ref = fi.GetFloat() 200 } else if NAME == "-grpx" { 201 rp.grpx = fi.GetFloat() 202 } else if NAME == "-rgb" { 203 rp.rgb[0] = fi.GetFloat() 204 rp.rgb[1] = fi.GetFloat() 205 rp.rgb[2] = fi.GetFloat() 206 } else { 207 fmt.Printf("ERROR parameter----RMP: %s\n", NAME) 208 os.Exit(1) 209 } 210 } 211 212 rp.sumWD = 0 213 for _, wp := range _wp { 214 NAME := fi.GetToken() 215 if NAME[0] == ';' { 216 break 217 } 218 219 wp.ref = 0.0 220 wp.grpx = 1.0 221 222 wp.rgb[0] = 0.0 223 wp.rgb[1] = 0.3 224 wp.rgb[2] = 0.8 225 226 if NAME != "WD" { 227 fmt.Printf("ERROR parameter----WD: %s\n", NAME) 228 os.Exit(1) 229 } 230 231 rp.sumWD++ 232 233 wp.winname = fi.GetToken() 234 235 for fi.IsEnd() == false { 236 NAME := fi.GetToken() 237 if NAME[0] == ';' { 238 break 239 } 240 241 if NAME == "-xyr" { 242 wp.xr = fi.GetFloat() 243 wp.yr = fi.GetFloat() 244 } else if NAME == "-WH" { 245 wp.Ww = fi.GetFloat() 246 wp.Wh = fi.GetFloat() 247 } else if NAME == "-ref" { 248 wp.ref = fi.GetFloat() 249 } else if NAME == "-grpx" { 250 wp.grpx = fi.GetFloat() 251 } else if NAME == "-rgb" { 252 wp.rgb[0] = fi.GetFloat() 253 wp.rgb[1] = fi.GetFloat() 254 wp.rgb[2] = fi.GetFloat() 255 } else { 256 fmt.Printf("ERROR parameter----WD: %s\n", NAME) 257 os.Exit(1) 258 } 259 } 260 } 261 } 262 263 /*------------------------------------------------------------------*/ 264 func rectdata(fi *EeTokens, obs *OBS) { 265 obs.ref[0] = 0.0 266 267 obs.rgb[0] = 0.7 268 obs.rgb[1] = 0.7 269 obs.rgb[2] = 0.7 270 271 obs.obsname = fi.GetToken() 272 273 for fi.IsEnd() == false { 274 NAME := fi.GetToken() 275 if NAME[0] == ';' { 276 break 277 } 278 279 if NAME == "-xyz" { 280 obs.x = fi.GetFloat() 281 obs.y = fi.GetFloat() 282 obs.z = fi.GetFloat() 283 } else if NAME == "-WH" { 284 obs.W = fi.GetFloat() 285 obs.H = fi.GetFloat() 286 } else if NAME == "-WaWb" { 287 obs.Wa = fi.GetFloat() 288 obs.Wb = fi.GetFloat() 289 } else if NAME == "-ref" { 290 obs.ref[0] = fi.GetFloat() 291 } else if NAME == "-rgb" { 292 obs.rgb[0] = fi.GetFloat() 293 obs.rgb[1] = fi.GetFloat() 294 obs.rgb[2] = fi.GetFloat() 295 } else { 296 fmt.Printf("ERROR parameter----OBS.rect: %s\n", NAME) 297 os.Exit(1) 298 } 299 } 300 } 301 302 /*------------------------------------------------------------------*/ 303 func cubdata(fi *EeTokens, obs *OBS) { 304 for i := 0; i < 3; i++ { 305 obs.ref[i] = 0.0 306 } 307 308 obs.rgb[0] = 0.7 309 obs.rgb[1] = 0.7 310 obs.rgb[2] = 0.7 311 312 obs.obsname = fi.GetToken() 313 314 for fi.IsEnd() == false { 315 NAME := fi.GetToken() 316 if NAME[0] == ';' { 317 break 318 } 319 320 if NAME == "-xyz" { 321 obs.x = fi.GetFloat() 322 obs.y = fi.GetFloat() 323 obs.z = fi.GetFloat() 324 } else if NAME == "-WDH" { 325 obs.W = fi.GetFloat() 326 obs.D = fi.GetFloat() 327 obs.H = fi.GetFloat() 328 } else if NAME == "-Wa" { 329 obs.Wa = fi.GetFloat() 330 } else if NAME == "-ref0" { 331 obs.ref[0] = fi.GetFloat() 332 } else if NAME == "-ref1" { 333 obs.ref[1] = fi.GetFloat() 334 } else if NAME == "-ref2" { 335 obs.ref[2] = fi.GetFloat() 336 } else if NAME == "-ref3" { 337 obs.ref[3] = fi.GetFloat() 338 } else if NAME == "-rgb" { 339 obs.rgb[0] = fi.GetFloat() 340 obs.rgb[1] = fi.GetFloat() 341 obs.rgb[2] = fi.GetFloat() 342 } else { 343 fmt.Printf("ERROR parameter----OBS.cube: %s\n", NAME) 344 os.Exit(1) 345 } 346 } 347 } 348 349 /*-------------------------------------------------------------------*/ 350 func tridata(fi *EeTokens, obs *OBS) { 351 obs.ref[0] = 0.0 352 353 obs.rgb[0] = 0.7 354 obs.rgb[1] = 0.7 355 obs.rgb[2] = 0.7 356 357 obs.obsname = fi.GetToken() 358 359 for fi.IsEnd() == false { 360 NAME := fi.GetToken() 361 if NAME[0] == ';' { 362 break 363 } 364 365 if NAME == "-xyz" { 366 obs.x = fi.GetFloat() 367 obs.y = fi.GetFloat() 368 obs.z = fi.GetFloat() 369 } else if NAME == "-WH" { 370 obs.W = fi.GetFloat() 371 obs.H = fi.GetFloat() 372 } else if NAME == "-WaWb" { 373 obs.Wa = fi.GetFloat() 374 obs.Wb = fi.GetFloat() 375 } else if NAME == "-ref" { 376 obs.ref[0] = fi.GetFloat() 377 } else if NAME == "-rgb" { 378 obs.rgb[0] = fi.GetFloat() 379 obs.rgb[1] = fi.GetFloat() 380 obs.rgb[2] = fi.GetFloat() 381 } else { 382 fmt.Printf("ERROR parameter----OBS.triangle: %s\n", NAME) 383 os.Exit(1) 384 } 385 } 386 } 387 388 /*-------------------------------------------------------------------*/ 389 // 20170503 higuchi add 390 func dividdata(fi *EeTokens, monten *int, DE *float64) { 391 var NAME string 392 393 for fi.IsEnd() == false { 394 NAME = fi.GetToken() 395 if NAME[0] == ';' { 396 break 397 } 398 399 if NAME == "DE" { 400 var err error 401 s := fi.GetToken() 402 *DE, err = strconv.ParseFloat(s, 64) 403 if err != nil { 404 fmt.Printf("ERROR parameter----DIVID: %s\n", NAME) 405 } 406 } else if NAME == "MONT" { 407 var err error 408 s := fi.GetToken() 409 *monten, err = strconv.Atoi(s) 410 if err != nil { 411 fmt.Printf("ERROR parameter----DIVID: %s\n", NAME) 412 } 413 } else { 414 fmt.Printf("ERROR parameter----DIVID: %s\n", NAME) 415 416 os.Exit(1) 417 } 418 } 419 420 NAME = fi.GetToken() 421 } 422 423 func treedata(fi *EeTokens, treen *int, tree *[]TREE) { 424 var i int 425 var Ntree int 426 var tred *TREE 427 428 // BDPの数を数える 429 Ntree = InputCount(fi, ";") 430 fmt.Printf("<treedata> Ntree=%d\n", Ntree) 431 432 if Ntree > 0 { 433 *tree = make([]TREE, Ntree) 434 435 // 構造体の初期化 436 for i = 0; i < Ntree; i++ { 437 tred = &(*tree)[i] 438 439 tred.treename = "" 440 tred.treetype = "" 441 tred.x = 0.0 442 tred.y = 0.0 443 tred.z = 0.0 444 tred.W1 = 0.0 445 tred.W2 = 0.0 446 tred.W3 = 0.0 447 tred.W4 = 0.0 448 tred.H1 = 0.0 449 tred.H2 = 0.0 450 tred.H3 = 0.0 451 } 452 } 453 454 *treen = 0 455 456 for i = 0; i < Ntree; i++ { 457 tred = &(*tree)[i] 458 459 var NAME string 460 NAME = fi.GetToken() 461 if NAME[0] == '*' { 462 break 463 } 464 465 tred.treetype = NAME 466 467 NAME = fi.GetToken() 468 tred.treename = NAME 469 470 if tred.treetype == "treeA" { 471 for fi.IsEnd() == false { 472 NAME = fi.GetToken() 473 if NAME[0] == ';' { 474 break 475 } 476 477 if NAME == "-xyz" { 478 tred.x = fi.GetFloat() 479 tred.y = fi.GetFloat() 480 tred.z = fi.GetFloat() 481 } else if NAME == "-WH1" { 482 tred.W1 = fi.GetFloat() 483 tred.H1 = fi.GetFloat() 484 } else if NAME == "-WH2" { 485 tred.W2 = fi.GetFloat() 486 tred.H2 = fi.GetFloat() 487 } else if NAME == "-WH3" { 488 tred.W3 = fi.GetFloat() 489 tred.H3 = fi.GetFloat() 490 } else if NAME == "-WH4" { 491 tred.W4 = fi.GetFloat() 492 } else { 493 fmt.Printf("ERROR parameter----TREE: %s %s\n", tred.treename, NAME) 494 os.Exit(1) 495 } 496 } 497 } else { 498 fmt.Printf("ERROR parameter----TREE: %s\n", tred.treetype) 499 os.Exit(1) 500 } 501 502 (*treen)++ 503 } 504 } 505 506 /*-------------------------*/ 507 func polydata(fi *EeTokens, polyn *int, poly *[]POLYGN) { 508 var i int 509 var Npoly int 510 var polyp *POLYGN 511 512 // BDPの数を数える 513 Npoly = InputCount(fi, ";") 514 fmt.Printf("<polydata> Npoly=%d\n", Npoly) 515 516 if Npoly > 0 { 517 *poly = make([]POLYGN, Npoly) 518 519 // 構造体の初期化 520 for i = 0; i < Npoly; i++ { 521 polyp = &(*poly)[i] 522 polyp.polyknd = "" 523 polyp.polyname = "" 524 polyp.wallname = "" 525 polyp.polyd = 0 526 polyp.ref = 0.0 527 polyp.refg = 0.0 528 polyp.grpx = 0.0 529 polyp.P = nil 530 matinit(polyp.rgb[:], 3) 531 } 532 } 533 534 *polyn = 0 535 for i = 0; i < Npoly; i++ { 536 polyp = &(*poly)[i] 537 538 var NAME string 539 NAME = fi.GetToken() 540 if NAME[0] == '*' { 541 break 542 } 543 544 polyp.grpx = 1.0 545 546 polyp.rgb[0] = 0.9 547 polyp.rgb[1] = 0.9 548 polyp.rgb[2] = 0.9 549 550 polyp.polyknd = NAME 551 552 if polyp.polyknd != "RMP" && polyp.polyknd != "OBS" { 553 fmt.Printf("ERROR parameter----POLYGON: %s <RMP> or <OBS> \n", polyp.polyknd) 554 os.Exit(1) 555 } 556 557 polyp.polyd = fi.GetInt() 558 polyp.P = make([]XYZ, polyp.polyd) 559 560 polyp.polyname = fi.GetToken() 561 polyp.wallname = fi.GetToken() 562 563 for fi.IsEnd() == false { 564 NAME = fi.GetToken() 565 if NAME[0] == ';' { 566 break 567 } 568 569 if NAME == "-xyz" { 570 for i = 0; i < polyp.polyd; i++ { 571 polyp.P[i].X = fi.GetFloat() 572 polyp.P[i].Y = fi.GetFloat() 573 polyp.P[i].Z = fi.GetFloat() 574 } 575 576 } else if NAME == "-rgb" { 577 polyp.rgb[0] = fi.GetFloat() 578 polyp.rgb[1] = fi.GetFloat() 579 polyp.rgb[2] = fi.GetFloat() 580 } else if NAME == "-ref" { 581 polyp.ref = fi.GetFloat() 582 } else if NAME == "-refg" { 583 polyp.refg = fi.GetFloat() 584 } else if NAME == "-grpx" { 585 polyp.grpx = fi.GetFloat() 586 } else { 587 fmt.Printf("ERROR parameter----POLYGON: %s\n", NAME) 588 os.Exit(1) 589 } 590 } 591 (*polyn)++ 592 } 593 } 594 595 /*---------------------------------------------------------------------------*/ 596 func bdpdata(fi *EeTokens, bdpn *int, bp *[]BBDP, Exsf *EXSFS) { 597 598 var rp *RRMP 599 var wp *MADO 600 var sb *sunblk 601 var Nbdp int 602 var bbdp *BBDP 603 604 // BDPの数を数える 605 Nbdp = InputCount(fi, "*") 606 //printf("<bdpdata> Nbdp=%d\n", Nbdp) 607 608 if Nbdp > 0 { 609 *bp = make([]BBDP, Nbdp) 610 if *bp == nil { 611 fmt.Printf("<bdpdata> bpのメモリが確保できません\n") 612 } 613 614 for i := 0; i < Nbdp; i++ { 615 bbdp = &(*bp)[i] 616 bbdp.bdpname = "" 617 bbdp.exh = 0 618 bbdp.exw = 0. 619 bbdp.sumRMP = 0 620 bbdp.sumsblk = 0 621 bbdp.x0 = 0 622 bbdp.y0 = 0 623 bbdp.z0 = 0. 624 bbdp.Wa = 0 625 bbdp.Wb = 0. 626 bbdp.SBLK = nil 627 bbdp.RMP = nil 628 bbdp.exsfname = "" 629 } 630 } 631 632 *bdpn = 0 633 634 for i := 0; i < Nbdp; i++ { 635 bbdp = &(*bp)[i] 636 637 var NAME string 638 NAME = fi.GetToken() 639 if NAME[0] == '*' { 640 break 641 } 642 643 if NAME != "BDP" { 644 fmt.Printf("error BDP\n") 645 os.Exit(1) 646 } 647 648 bbdp.bdpname = fi.GetToken() 649 650 for fi.IsEnd() == false { 651 NAME = fi.GetToken() 652 if NAME[0] == ';' { 653 break 654 } 655 656 if NAME == "-xyz" { 657 bbdp.x0 = fi.GetFloat() 658 bbdp.y0 = fi.GetFloat() 659 bbdp.z0 = fi.GetFloat() 660 } else if NAME == "-WA" { 661 bbdp.Wa = fi.GetFloat() 662 } else if NAME == "-WB" { 663 bbdp.Wb = fi.GetFloat() 664 } else if NAME == "-WH" { 665 bbdp.exw = fi.GetFloat() 666 bbdp.exh = fi.GetFloat() 667 } else if NAME == "-exs" { 668 // Satoh修正(2018/1/23) 669 bbdp.exsfname = fi.GetToken() 670 671 //外表面の検索 672 id := false 673 for _, Exs := range Exsf.Exs { 674 if bbdp.exsfname == Exs.Name { 675 bbdp.Wa = Exs.Wa 676 bbdp.Wb = Exs.Wb 677 id = true 678 break 679 } 680 } 681 if id == false { 682 fmt.Printf("BDP<%s> %s is not found in EXSRF\n", bbdp.bdpname, bbdp.exsfname) 683 } 684 } else { 685 fmt.Printf("ERROR parameter----BDP %s\n", NAME) 686 os.Exit(1) 687 } 688 } 689 690 // SBLKの個数を数えてメモリを確保 691 Nsblk := SBLKCount(fi) 692 if Nsblk > 0 { 693 bbdp.SBLK = make([]sunblk, Nsblk) 694 695 for i := 0; i < Nsblk; i++ { 696 sb = &bbdp.SBLK[i] 697 698 sb.D = 0.0 699 sb.H = 0.0 700 sb.h = 0.0 701 sb.ref = 0.0 702 sb.W = 0.0 703 sb.WA = 0.0 704 sb.x = 0.0 705 sb.y = 0.0 706 sb.sbfname = "" 707 sb.snbname = "" 708 matinit(sb.rgb[:], 3) 709 } 710 } 711 712 // RMPの個数を数えてメモリを確保 713 Nrmp := RMPCount(fi) 714 if Nrmp > 0 { 715 bbdp.RMP = make([]RRMP, Nrmp) 716 for i := 0; i < Nrmp; i++ { 717 rp = &bbdp.RMP[i] 718 rp.rmpname = "" 719 rp.wallname = "" 720 rp.sumWD = 0 721 rp.ref = 0.0 722 rp.xb0 = 0.0 723 rp.yb0 = 0.0 724 rp.Rw = 0.0 725 rp.Rh = 0.0 726 rp.grpx = 0.0 727 matinit(rp.rgb[:], 3) 728 rp.WD = nil 729 } 730 } 731 732 // if rp != nil { 733 // wp = rp.WD 734 // } 735 736 sb_idx := 0 737 rp_idx := 0 738 for i := 0; i < len(*bp); i++ { 739 bbdp = &(*bp)[i] 740 741 sb = &bbdp.SBLK[sb_idx] 742 rp = &bbdp.RMP[rp_idx] 743 744 NAME = fi.GetToken() 745 if NAME[0] == '*' { 746 break 747 } 748 749 if NAME == "SBLK" { 750 sb.ref = 0.0 751 sb.sbfname = fi.GetToken() 752 753 if sb.sbfname == "HISASI" { 754 HISASHI(fi, sb) 755 } else if sb.sbfname == "BARUKONI" { 756 BARUKO(fi, sb) 757 } else if sb.sbfname == "SODEKABE" { 758 SODEK(fi, sb) 759 } else if sb.sbfname == "MADOHIYOKE" { 760 SCREEN(fi, sb) 761 } else { 762 fmt.Printf("ERROR----\nhiyoke no syurui <HISASI> or <BARUKONI> or <SODEKABE> or <MADOHIYOKE> : %s \n", sb.sbfname) 763 os.Exit(1) 764 } 765 766 sb_idx++ 767 bbdp.sumsblk++ 768 } else if NAME == "RMP" { 769 // WDの数を数えてメモリを確保 770 Nwd := WDCount(fi) 771 772 if Nwd > 0 { 773 rp.WD = make([]MADO, Nwd) 774 for i := 0; i < Nwd; i++ { 775 wp = &rp.WD[i] 776 wp.winname = "" 777 matinit(wp.rgb[:], 3) 778 wp.grpx = 0.0 779 wp.ref = 0.0 780 wp.Wh = 0.0 781 wp.xr = 0.0 782 wp.yr = 0.0 783 } 784 } 785 rp.ref = 0.0 786 bbdp.sumRMP++ 787 rmpdata(fi, rp, rp.WD) 788 789 rp_idx++ 790 } else { 791 fmt.Printf("ERROR----<SBLK> or <RMP> : %s \n", NAME) 792 os.Exit(1) 793 } 794 } 795 796 (*bdpn)++ 797 } 798 } 799 800 /*--------------------------------------------------------------------------*/ 801 func obsdata(fi *EeTokens, obsn *int, obs *[]OBS) { 802 var i, Nobs int 803 var obsp *OBS 804 805 // Count the number of OBS entries 806 Nobs = InputCount(fi, ";") 807 if Nobs > 0 { 808 *obs = make([]OBS, Nobs) 809 for i = 0; i < Nobs; i++ { 810 obsp = &(*obs)[i] 811 obsp.fname = "" 812 obsp.obsname = "" 813 obsp.x = 0.0 814 obsp.y = 0.0 815 obsp.z = 0.0 816 obsp.H = 0.0 817 obsp.D = 0.0 818 obsp.W = 0.0 819 obsp.Wa = 0.0 820 obsp.Wb = 0.0 821 matinit(obsp.ref[:], 4) 822 matinit(obsp.rgb[:], 3) 823 } 824 } 825 826 *obsn = 0 827 for i = 0; i < Nobs; i++ { 828 obsp = &(*obs)[i] 829 830 NAME := fi.GetToken() 831 if NAME[0] == '*' { 832 break 833 } 834 835 obsp.fname = NAME 836 837 for i = 0; i < 4; i++ { 838 obsp.ref[i] = 0.0 839 } 840 841 if obsp.fname == "rect" { 842 rectdata(fi, obsp) 843 } else if obsp.fname == "cube" { 844 cubdata(fi, obsp) 845 } else if obsp.fname == "r_tri" || obsp.fname == "i_tri" { 846 tridata(fi, obsp) 847 } else { 848 fmt.Printf("ERROR parameter----OBS : %s\n", obsp.fname) 849 os.Exit(1) 850 } 851 852 (*obsn)++ 853 } 854 } 855 856 func InputCount(fi *EeTokens, key string) int { 857 N := 0 858 ad := fi.GetPos() 859 860 for fi.IsEnd() == false { 861 s := fi.GetToken() 862 if s == "*" { 863 break 864 } 865 866 N++ 867 868 for fi.IsEnd() == false { 869 s = fi.GetToken() 870 871 if s == key { 872 break 873 } 874 } 875 } 876 877 fi.RestorePos(ad) 878 return N 879 } 880 881 func SBLKCount(fi *EeTokens) int { 882 N := 0 883 ad := fi.GetPos() 884 885 var s string 886 for fi.IsEnd() == false { 887 s = fi.GetToken() 888 if s == "*" { 889 break 890 } 891 892 if s == "SBLK" { 893 N++ 894 } 895 } 896 897 fi.RestorePos(ad) 898 return N 899 } 900 901 func RMPCount(fi *EeTokens) int { 902 N := 0 903 ad := fi.GetPos() 904 905 var s string 906 for fi.IsEnd() == false { 907 s = fi.GetToken() 908 if s == "*" { 909 break 910 } 911 912 if s == "RMP" { 913 N++ 914 } 915 } 916 917 fi.RestorePos(ad) 918 919 return N 920 } 921 922 func WDCount(fi *EeTokens) int { 923 N := 0 924 ad := fi.GetPos() 925 926 Flg := 0 927 for fi.IsEnd() == false { 928 s := fi.GetToken() 929 930 if s == "WD" { 931 N++ 932 } 933 934 if s == ";" { 935 if Flg == 1 { 936 break 937 } else { 938 Flg = 1 939 } 940 } else { 941 Flg = 0 942 } 943 } 944 945 fi.RestorePos(ad) 946 947 return N 948 } 949 950 func OPcount(Nbdp int, _Bdp []BBDP, Npoly int, _poly []POLYGN) int { 951 Nop := 0 952 953 for i := 0; i < Nbdp; i++ { 954 Bdp := &_Bdp[i] 955 Nop += Bdp.sumRMP 956 for j := 0; j < Bdp.sumRMP; j++ { 957 RMP := &Bdp.RMP[i] 958 Nop += RMP.sumWD 959 } 960 } 961 962 for i := 0; i < Npoly; i++ { 963 poly := &_poly[i] 964 if poly.polyknd == "RMP" { 965 Nop++ 966 } 967 } 968 969 return Nop 970 } 971 972 func LPcount(Nbdp int, _Bdp []BBDP, Nobs int, _Obs []OBS, Ntree int, Npoly int, _poly []POLYGN) int { 973 Nlp := 0 974 975 //初期化 976 for i := 0; i < Nbdp; i++ { 977 Bdp := &_Bdp[i] 978 for j := 0; j < Bdp.sumsblk; j++ { 979 snbk := &Bdp.SBLK[j] 980 if snbk.sbfname == "BARUKONI" { 981 Nlp += 5 982 } else { 983 Nlp++ 984 } 985 } 986 } 987 988 for i := 0; i < Nobs; i++ { 989 Obs := &_Obs[i] 990 if Obs.fname == "cube" { 991 Nlp += 4 992 } else { 993 Nlp++ 994 } 995 } 996 997 // 樹木用 998 Nlp += Ntree * 20 999 1000 // ポリゴン 1001 for i := 0; i < Npoly; i++ { 1002 poly := &_poly[i] 1003 if poly.polyknd == "RMP" || poly.polyknd == "OBS" { 1004 Nlp++ 1005 } 1006 } 1007 1008 return Nlp 1009 }