@arcgis/core 4.25.0-next.20220920 → 4.25.0-next.20220921
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AggregateGraphic.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{9f31ab2247c9defb882c.js → 01ac91fc0bc6b4d4e3c6.js} +1 -1
- package/assets/esri/core/workers/chunks/{8588cbecb8e808f451fe.js → 249e32af1f2d433fae4c.js} +1 -1
- package/assets/esri/core/workers/chunks/{5b16b30ac3166f33e81e.js → 26690f4ec1f3cb8099c2.js} +1 -1
- package/assets/esri/core/workers/chunks/{be93b0cef85665446944.js → 274b4cdf6c8d77e8a2e6.js} +1 -1
- package/assets/esri/core/workers/chunks/{d5650f455ce5ba15ad10.js → 2cae0ec5f60ab42a49aa.js} +1 -1
- package/assets/esri/core/workers/chunks/{f436c86f86236ea7ea04.js → 4641e10e0e8e9d257521.js} +1 -1
- package/assets/esri/core/workers/chunks/{7a45333de9ded92619c2.js → 466008f793c2e11e854c.js} +1 -1
- package/assets/esri/core/workers/chunks/{c9d655675552dcf6cef7.js → 4a699b41072ee88f0956.js} +1 -1
- package/assets/esri/core/workers/chunks/{14ea96e398f4842abe4e.js → 4fdd18f5cdaa0d82ebc1.js} +1 -1
- package/assets/esri/core/workers/chunks/{9662da3e1e37f3445186.js → 562b9619b8ee13734813.js} +1 -1
- package/assets/esri/core/workers/chunks/{8bab21bc6164a593278f.js → 771b92e524802de840ba.js} +1 -1
- package/assets/esri/core/workers/chunks/{4969b64dc17378d7781f.js → 7ce250cc6fbe68aef50d.js} +3 -3
- package/assets/esri/core/workers/chunks/{2c4938512dd726a177dd.js → 7fab18074b130b71a648.js} +1 -1
- package/assets/esri/core/workers/chunks/{f67357b3c6c591c9da5e.js → 872f1cb3596fb80e387f.js} +1 -1
- package/assets/esri/core/workers/chunks/{31de71018575457155e5.js → 8ee3da8677255b8c8709.js} +1 -1
- package/assets/esri/core/workers/chunks/{2e44aee22e70857b893c.js → 93631b10452b0e0189b3.js} +1 -1
- package/assets/esri/core/workers/chunks/{cb2dc84d972469445da6.js → 95cd9edca50ea163d50f.js} +1 -1
- package/assets/esri/core/workers/chunks/{d31bbb13af45ce8e45dc.js → acf9f753741b677afb44.js} +1 -1
- package/assets/esri/core/workers/chunks/{1455944edeba1560eb07.js → afdafa77f5ca1b9e3acc.js} +1 -1
- package/assets/esri/core/workers/chunks/{cf3e1ac63580bc495ea6.js → b4da35f1093f3731f9ac.js} +1 -1
- package/assets/esri/core/workers/chunks/bb0d86937faf0cd7d16d.js +1 -0
- package/assets/esri/core/workers/chunks/bf3e80023e156d5906c7.js +1 -0
- package/assets/esri/core/workers/chunks/{8ba83fee56dd4f306d87.js → c2a6ac7046134f725cf3.js} +1 -1
- package/assets/esri/core/workers/chunks/{5d3fabe66e1bce1b30fb.js → cc7569489b572b8b3b53.js} +1 -1
- package/assets/esri/core/workers/chunks/{fddd4ea487788e003fb1.js → d09f06eb4157a7c2c8ab.js} +1 -1
- package/assets/esri/core/workers/chunks/e064035f959d68e9603f.js +1 -0
- package/assets/esri/core/workers/chunks/{d92975e56a1290255252.js → e09df62cf35d636b0975.js} +1 -1
- package/assets/esri/core/workers/chunks/{674fa5b93704ef08c9e8.js → e0c763e05feb1c2093ba.js} +1 -1
- package/assets/esri/core/workers/chunks/{51289d2f5277af4023e9.js → ed33e019bc7775db2e50.js} +1 -1
- package/assets/esri/core/workers/chunks/ef95d6ab7b1c032ab4ad.js +1 -0
- package/assets/esri/core/workers/chunks/{169f4354a375db5de121.js → ffcbcb928b6cb8c596ad.js} +1 -1
- package/assets/esri/t9n/common_ar.json +1 -1
- package/assets/esri/t9n/common_bg.json +1 -1
- package/assets/esri/t9n/common_bs.json +1 -1
- package/assets/esri/t9n/common_ca.json +1 -1
- package/assets/esri/t9n/common_cs.json +1 -1
- package/assets/esri/t9n/common_da.json +1 -1
- package/assets/esri/t9n/common_de.json +1 -1
- package/assets/esri/t9n/common_el.json +1 -1
- package/assets/esri/t9n/common_es.json +1 -1
- package/assets/esri/t9n/common_et.json +1 -1
- package/assets/esri/t9n/common_fi.json +1 -1
- package/assets/esri/t9n/common_fr.json +1 -1
- package/assets/esri/t9n/common_he.json +1 -1
- package/assets/esri/t9n/common_hr.json +1 -1
- package/assets/esri/t9n/common_hu.json +1 -1
- package/assets/esri/t9n/common_id.json +1 -1
- package/assets/esri/t9n/common_it.json +1 -1
- package/assets/esri/t9n/common_ja.json +1 -1
- package/assets/esri/t9n/common_ko.json +1 -1
- package/assets/esri/t9n/common_lt.json +1 -1
- package/assets/esri/t9n/common_lv.json +1 -1
- package/assets/esri/t9n/common_nb.json +1 -1
- package/assets/esri/t9n/common_nl.json +1 -1
- package/assets/esri/t9n/common_pl.json +1 -1
- package/assets/esri/t9n/common_pt-BR.json +1 -1
- package/assets/esri/t9n/common_pt-PT.json +1 -1
- package/assets/esri/t9n/common_ro.json +1 -1
- package/assets/esri/t9n/common_ru.json +1 -1
- package/assets/esri/t9n/common_sk.json +1 -1
- package/assets/esri/t9n/common_sl.json +1 -1
- package/assets/esri/t9n/common_sr.json +1 -1
- package/assets/esri/t9n/common_sv.json +1 -1
- package/assets/esri/t9n/common_th.json +1 -1
- package/assets/esri/t9n/common_tr.json +1 -1
- package/assets/esri/t9n/common_uk.json +1 -1
- package/assets/esri/t9n/common_vi.json +1 -1
- package/assets/esri/t9n/common_zh-CN.json +1 -1
- package/assets/esri/t9n/common_zh-HK.json +1 -1
- package/assets/esri/t9n/common_zh-TW.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ar.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_bg.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_bs.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ca.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_cs.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_da.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_de.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_el.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_es.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_et.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_fi.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_fr.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_he.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_hr.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_hu.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_id.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_it.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ja.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ko.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_lt.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_lv.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_nb.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_nl.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_pl.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_pt-BR.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_pt-PT.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ro.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_ru.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_sk.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_sl.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_sr.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_sv.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_th.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_tr.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_uk.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_vi.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_zh-CN.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_zh-HK.json +1 -1
- package/assets/esri/widgets/Feature/t9n/Feature_zh-TW.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ar.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_bg.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_bs.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ca.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_cs.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_da.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_de.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_el.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_es.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_et.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_fi.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_fr.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_he.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_hr.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_hu.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_id.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_it.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ja.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ko.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_lt.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_lv.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_nb.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_nl.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_pl.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_pt-BR.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_pt-PT.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ro.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_ru.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_sk.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_sl.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_sr.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_sv.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_th.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_tr.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_uk.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_vi.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_zh-CN.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_zh-HK.json +1 -1
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_zh-TW.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ar.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_bg.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_bs.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ca.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_cs.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_da.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_de.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_el.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_es.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_et.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_fi.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_fr.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_he.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_hr.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_hu.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_id.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_it.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ja.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ko.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_lt.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_lv.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_nb.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_nl.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_pl.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_pt-BR.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_pt-PT.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ro.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_ru.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_sk.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_sl.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_sr.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_sv.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_th.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_tr.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_uk.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_vi.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_zh-CN.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_zh-HK.json +1 -1
- package/assets/esri/widgets/Popup/t9n/Popup_zh-TW.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ar.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_bg.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_bs.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ca.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_cs.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_da.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_de.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_el.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_es.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_et.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_fi.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_fr.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_he.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_hr.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_hu.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_id.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_it.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ja.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ko.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_lt.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_lv.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_nb.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_nl.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_pl.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_pt-BR.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_pt-PT.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ro.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_ru.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_sk.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_sl.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_sr.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_sv.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_th.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_tr.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_uk.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_vi.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_zh-CN.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_zh-HK.json +1 -1
- package/assets/esri/widgets/support/t9n/DatePicker_zh-TW.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ar.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_bg.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_bs.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ca.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_cs.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_da.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_de.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_el.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_es.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_et.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_fi.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_fr.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_he.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_hr.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_hu.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_id.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_it.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ja.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ko.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_lt.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_lv.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_nb.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_nl.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_pl.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_pt-BR.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_pt-PT.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ro.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_ru.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_sk.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_sl.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_sr.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_sv.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_th.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_tr.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_uk.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_vi.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_zh-CN.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_zh-HK.json +1 -1
- package/assets/esri/widgets/support/t9n/TimePicker_zh-TW.json +1 -1
- package/chunks/Compositing.glsl.js +4 -19
- package/chunks/HUDCompositing.glsl.js +7 -0
- package/chunks/Laserlines.glsl.js +5 -5
- package/chunks/OITCompositing.glsl.js +13 -0
- package/chunks/OverlayCompositing.glsl.js +8 -0
- package/chunks/Precipitation.glsl.js +1 -1
- package/chunks/ShadowHighlight.glsl.js +1 -1
- package/chunks/boundedPlane.js +1 -1
- package/chunks/cameraUtilsPlanar.js +1 -1
- package/chunks/cameraUtilsSpherical.js +1 -1
- package/chunks/mat3.js +1 -1
- package/chunks/quat.js +1 -1
- package/chunks/quat2.js +1 -1
- package/chunks/quatf64.js +1 -1
- package/chunks/sphere.js +1 -1
- package/chunks/vec3.js +1 -1
- package/chunks/vec3f32.js +1 -1
- package/chunks/vec4f64.js +1 -1
- package/core/VectorStack.js +1 -1
- package/core/libs/gl-matrix-2/factories/quatf64.js +1 -1
- package/core/libs/gl-matrix-2/factories/vec3f32.js +1 -1
- package/core/libs/gl-matrix-2/factories/vec4f64.js +1 -1
- package/core/libs/gl-matrix-2/math/mat3.js +1 -1
- package/core/libs/gl-matrix-2/math/quat.js +1 -1
- package/core/libs/gl-matrix-2/math/vec3.js +1 -1
- package/core/perspectiveUtils.js +1 -1
- package/geohash/GeohashTree.js +1 -1
- package/geometry/support/MeshTransform.js +1 -1
- package/geometry/support/axisAngle.js +1 -1
- package/geometry/support/axisAngleDegrees.js +1 -1
- package/geometry/support/lineSegment.js +1 -1
- package/geometry/support/meshUtils/exporters/gltf/gltf.js +1 -1
- package/geometry/support/meshUtils/exporters/gltf/node.js +1 -1
- package/geometry/support/meshUtils/georeference.js +1 -1
- package/geometry/support/meshUtils/loadGLTFMesh.js +1 -1
- package/geometry/support/meshUtils/projection.js +1 -1
- package/geometry/support/meshUtils/rotate.js +1 -1
- package/geometry/support/plane.js +1 -1
- package/interfaces.d.ts +70 -0
- package/layers/buildingSublayers/BuildingComponentSublayer.js +1 -1
- package/layers/graphics/featureConversionUtils.js +1 -1
- package/layers/mixins/EditBusLayer.js +1 -1
- package/layers/support/AggregateField.js +1 -1
- package/layers/support/ControlPointsGeoreference.js +1 -1
- package/layers/support/OutStatistic.js +1 -1
- package/layers/support/VoxelVolume.js +1 -1
- package/layers/support/voxelPlaneUtils.js +1 -1
- package/package.json +1 -1
- package/rest/support/AggregateFeatureSet.js +5 -0
- package/support/revision.js +1 -1
- package/views/2d/ViewState.js +1 -1
- package/views/2d/engine/flow/FlowDisplayObject.js +1 -1
- package/views/2d/engine/imagery/RasterVFTile.js +1 -1
- package/views/2d/engine/vectorTiles/VectorTile.js +1 -1
- package/views/2d/engine/webgl/OverlayContainer.js +1 -1
- package/views/2d/engine/webgl/TiledDisplayObject.js +1 -1
- package/views/2d/engine/webgl/WGLTile.js +1 -1
- package/views/2d/engine/webgl/WorldExtentClipRenderer.js +1 -1
- package/views/2d/layers/FeatureLayerView2D.js +1 -1
- package/views/2d/layers/features/controllers/FeatureController2D.js +1 -1
- package/views/2d/layers/features/schemaUtils.js +1 -1
- package/views/2d/layers/features/support/BinStore.js +1 -1
- package/views/2d/layers/features/support/ClusterStore.js +1 -1
- package/views/2d/layers/graphics/GraphicBoundsRenderer.js +1 -1
- package/views/2d/layers/support/DebugOverlay.js +1 -1
- package/views/2d/layers/support/FeatureLayerProxy.js +1 -1
- package/views/2d/layers/support/clusterUtils.js +1 -1
- package/views/3d/analysis/AreaMeasurement/support/MeasurementData.js +1 -1
- package/views/3d/analysis/Dimensioning/LengthDimensionSubTool.js +1 -1
- package/views/3d/analysis/Dimensioning/LengthDimensionVisualization.js +1 -1
- package/views/3d/analysis/Dimensioning/lengthDimensionUtils.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/analysis/Slice/SliceTool.js +1 -1
- package/views/3d/analysis/Slice/sliceToolConfig.js +1 -1
- package/views/3d/analysis/Slice/sliceToolUtils.js +1 -1
- package/views/3d/camera/constraintUtils/distance.js +1 -1
- package/views/3d/camera/constraintUtils/tilt.js +1 -1
- package/views/3d/environment/PanoramicAtmosphere.js +1 -1
- package/views/3d/environment/SceneViewEnvironmentManager.js +1 -1
- package/views/3d/environment/SimpleAtmosphere.js +1 -1
- package/views/3d/glTF/internal/Resource.js +1 -1
- package/views/3d/interactive/Manipulator3D.js +1 -1
- package/views/3d/interactive/editingTools/reshapeGraphic/edgeOffsetUtils.js +1 -1
- package/views/3d/interactive/editingTools/settings.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/ExtentTransformTool.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/GraphicScaleRotateTransform.js +1 -1
- package/views/3d/interactive/manipulatorUtils.js +1 -1
- package/views/3d/interactive/visualElements/ExtendedLineVisualElement.js +1 -1
- package/views/3d/interactive/visualElements/LineVisualElement.js +1 -1
- package/views/3d/interactive/visualElements/ParallelLineVisualElement.js +1 -1
- package/views/3d/layers/BuildingComponentSublayerView3D.js +1 -1
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/PointCloudLayerView3D.js +1 -1
- package/views/3d/layers/PointCloudWorker.js +1 -1
- package/views/3d/layers/SceneLayerGraphicsView3D.js +1 -1
- package/views/3d/layers/graphics/Deconflictor.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DFeatureProcessor.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLodInstanceGraphicLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DObject3DGraphicLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DObjectSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPathSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/objectResourceUtils.js +1 -1
- package/views/3d/layers/i3s/I3SElevationProvider.js +1 -1
- package/views/3d/layers/i3s/I3SIndex.js +1 -1
- package/views/3d/layers/i3s/I3SUtil.js +1 -1
- package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
- package/views/3d/layers/i3s/PointRenderer.js +1 -1
- package/views/3d/layers/support/FeatureTileVisibility3D.js +1 -1
- package/views/3d/layers/support/I3STreeDebugger.js +1 -1
- package/views/3d/layers/support/edgeUtils.js +1 -1
- package/views/3d/layers/support/uvUtils.js +1 -1
- package/views/3d/state/Frustum.js +1 -1
- package/views/3d/state/controllers/GamepadKeyboardController.js +1 -1
- package/views/3d/state/controllers/RotateController.js +1 -1
- package/views/3d/state/controllers/global/PinchAndPanController.js +1 -1
- package/views/3d/state/controllers/local/PinchAndPanController.js +1 -1
- package/views/3d/state/controllers/local/ZoomController.js +1 -1
- package/views/3d/state/controllers/momentum/ZoomPlanarMomentumController.js +1 -1
- package/views/3d/state/utils/navigationUtils.js +1 -1
- package/views/3d/support/FrustumExtentIntersection.js +1 -1
- package/views/3d/support/orientedBoundingBox.js +1 -1
- package/views/3d/support/pointsOfInterest/CameraOnSurface.js +1 -1
- package/views/3d/support/pointsOfInterest/CenterOnSurface.js +1 -1
- package/views/3d/support/pointsOfInterest/PointsOfInterest.js +1 -1
- package/views/3d/support/sunUtils.js +1 -1
- package/views/3d/terrain/OverlayRenderer.js +1 -1
- package/views/3d/terrain/PatchRenderData.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/Tile.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
- package/views/3d/webgl-engine/collections/Component/DepthRange.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
- package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/VertexPosition.glsl.js +2 -2
- package/views/3d/webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js +1 -1
- package/views/3d/webgl-engine/core/util/TwoVectorPosition.js +1 -1
- package/views/3d/webgl-engine/lib/Camera.js +1 -1
- package/views/3d/webgl-engine/lib/CompositingHelper.js +1 -1
- package/views/3d/webgl-engine/lib/GeometryRecord.js +1 -1
- package/views/3d/webgl-engine/lib/GeometryUtil.js +1 -1
- package/views/3d/webgl-engine/lib/Highlight.js +1 -1
- package/views/3d/webgl-engine/lib/Intersector.js +1 -1
- package/views/3d/webgl-engine/lib/Object3D.js +1 -1
- package/views/3d/webgl-engine/lib/ObjectAndLayerIdRenderHelper.js +1 -1
- package/views/3d/webgl-engine/lib/OffscreenRendering.js +1 -1
- package/views/3d/webgl-engine/lib/RenderGeometry.js +1 -1
- package/views/3d/webgl-engine/lib/ShadowMap.js +1 -1
- package/views/3d/webgl-engine/lib/depthRangeUtils.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/edgePreprocessing.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/InstanceData.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/InstanceOctree.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/pathGeometryUtils.js +1 -1
- package/views/3d/webgl-engine/lib/verticalOffsetUtils.js +1 -1
- package/views/3d/webgl-engine/lighting/SphericalHarmonics.js +1 -1
- package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/MeasurementArrowMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/NativeLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/shaders/Compositing.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/CompositingTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/CompositingTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/HUDCompositing.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HUDCompositingTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/OITCompositing.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/OITCompositingTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/OverlayCompositing.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/OverlayCompositingTechnique.js +5 -0
- package/views/draw/support/surfaceCoordinateSystems.js +1 -1
- package/views/interactive/coordinateHelper.js +1 -1
- package/views/interactive/editGeometry/operations/OffsetEdgeVertex.js +1 -1
- package/views/interactive/editGeometry/support/editPlaneUtils.js +1 -1
- package/views/interactive/snapping/RightAngleSnapper.js +1 -1
- package/views/interactive/snapping/featureSources/sceneLayerSource/SceneLayerSnappingSourceWorker.js +1 -1
- package/views/layers/FeatureLayerView.js +1 -1
- package/views/navigation/PanSphericalMomentumEstimator.js +1 -1
- package/views/support/Scheduler.js +1 -1
- package/views/support/euclideanAreaMeasurementUtils.js +1 -1
- package/views/support/geometry3dUtils.js +1 -1
- package/widgets/ElevationProfile/support/ProfileLines3D.js +1 -1
- package/widgets/ElevationProfile/support/constants.js +1 -1
- package/widgets/Feature/FeatureRelationship/FeatureRelationshipViewModel.js +1 -1
- package/widgets/Feature/FeatureRelationship.js +1 -1
- package/assets/esri/core/workers/chunks/0059699bf824f851d51c.js +0 -1
- package/assets/esri/core/workers/chunks/36dd5654df5c7f00406d.js +0 -1
- package/assets/esri/core/workers/chunks/de128d8a643b4297940b.js +0 -1
- package/assets/esri/core/workers/chunks/e00327925ca82b63fded.js +0 -1
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../../../../geometry.js";import e from"../../../../../core/Evented.js";import has from"../../../../../core/has.js";import{isNone as t,isSome as s,applySome as r}from"../../../../../core/maybe.js";import{diff as o,hasDiff as a}from"../../../../../core/accessorSupport/diffUtils.js";import{GeohashTree as i}from"../../../../../geohash/GeohashTree.js";import{setGeohashBuf as h,setGeohashXY as n}from"../../../../../geohash/geohashUtils.js";import{earth as l}from"../../../../../geometry/support/Ellipsoid.js";import{getInfo as u}from"../../../../../geometry/support/spatialReferenceUtils.js";import{quantizeX as g,quantizeY as c,convertFromPolygon as d}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeatureWithGeometry as f,OptimizedFeature as p}from"../../../../../layers/graphics/OptimizedFeature.js";import _ from"../../../../../layers/graphics/OptimizedGeometry.js";import{checkProjectionSupport as m,project as y}from"../../../../../layers/graphics/data/projectionSupport.js";import{TILE_SIZE as I}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TEXEL_MASK as v}from"../../../engine/webgl/DisplayId.js";import{Store2D as b}from"../Store2D.js";import{FeatureSetReaderJSON as R}from"./FeatureSetReaderJSON.js";import M from"../../../../../geometry/SpatialReference.js";import x from"../../../../../geometry/Polygon.js";import C from"../../../../../geometry/Extent.js";const L=12,j=64,w=1;class V extends f{constructor(e,t,s,r,o){super(new _([],[t,s]),r,null,e),this.geohashBoundsInfo=o}get count(){return this.attributes.cluster_count}static create(e,t,s,r,o,a,i,h){const n=new V(t,s,r,a,i);return n.displayId=e.createDisplayId(!0),n.referenceId=h,n.tileLevel=o,n}update(e,t,s,r,o,a){return this.geometry.coords[0]=e,this.geometry.coords[1]=t,this.tileLevel=s,this.attributes=r,this.geohashBoundsInfo=o,this.referenceId=null,this.referenceId=a,this}toJSON(){return{objectId:this.objectId,referenceId:1===this.attributes.cluster_count?this.referenceId:null,attributes:{...this.attributes,clusterId:this.objectId},geometry:{x:this.geometry.coords[0],y:this.geometry.coords[1]}}}}function B(e){return 57.29577951308232*e}class S extends b{constructor(t,s,r,o){super(t,r),this.events=new e,this._geohashLevel=0,this._tileLevel=0,this._aggregateValueRanges={},this._aggregateValueRangesChanged=!1,this._geohashBuf=[],this._clusters=new Map,this._tiles=new Map,this._serviceInfo=o,this.geometryInfo=t.geometryInfo,this._spatialReference=s,this._projectionSupportCheck=m(s,M.WGS84),this._bitsets.geohash=r.getBitset(r.createBitset()),this._bitsets.inserted=r.getBitset(r.createBitset())}destroy(){this._tree.destroy()}async updateSchema(e,s){const r=this._schema;try{await super.updateSchema(e,s),await this._projectionSupportCheck}catch(n){}const h=o(r,s);s&&(!t(h)||e.source||e.storage.filters)?((a(h,"params.fields")||!this._tree||e.source)&&(this._tree&&this._tree.destroy(),this._tree=new i(this._statisticFields,this._serviceInfo),this._rebuildTree(),has("esri-2d-update-debug")&&console.debug("Aggregate mesh needs update due to tree changing")),has("esri-2d-update-debug")&&console.debug("Applying Update - ClusterStore:",h),e.targets[s.name]=!0,e.mesh=!1,this._aggregateValueRanges={}):r&&(e.mesh=!0)}clear(){this._rebuildTree()}sweepFeatures(e,t){this._bitsets.inserted.forEachSet((s=>{if(!e.has(s)){const e=t.lookupByDisplayIdUnsafe(s);this._remove(e)}}))}sweepAggregates(e,t,s){this._clusters.forEach(((r,o)=>{r&&r.tileLevel!==s&&(e.releaseDisplayId(r.displayId),t.unsetAttributeData(r.displayId),this._clusters.delete(o))}))}onTileData(e,s,r,o,a=!0){if(!this._schema||t(s.addOrUpdate))return s;const i=this._getTransforms(e,this._spatialReference);{const e=s.addOrUpdate.getCursor();for(;e.next();)this._update(e,o)}if(s.status.mesh||!a)return s;const h=new Array,n=this._schema.params.clusterRadius;this._getClustersForTile(h,e,n,r,i),s.addOrUpdate=R.fromOptimizedFeatures(h,this._serviceInfo),s.addOrUpdate.attachStorage(r),s.clear=!0,s.end=!0;{const t=s.addOrUpdate.getCursor();for(;t.next();){const s=t.getDisplayId();this._bitsets.computed.unset(s),this.setComputedAttributes(r,t,s,e.scale)}}return this._aggregateValueRangesChanged&&s.end&&(this.events.emit("valueRangesChanged",{valueRanges:this._aggregateValueRanges}),this._aggregateValueRangesChanged=!1),s}onTileUpdate({added:e,removed:t}){if(e.length){const t=e[0].level;this._tileLevel=t,this._setGeohashLevel(t)}if(!this._schema)return;const s=this._schema.params.clusterRadius;t.forEach((e=>{this._tiles.delete(e.key.id),this._markTileClustersForDeletion(e,s)}))}getAggregate(e){for(const t of this._clusters.values())if((t?.displayId&v)==(e&v))return t.toJSON();return null}getAggregates(){const e=[];for(const t of this._clusters.values())t?.tileLevel===this._tileLevel&&e.push(t.toJSON());return e}getDisplayId(e){const t=this._clusters.get(e);return t?t.displayId:null}getFeatureDisplayIdsForAggregate(e){const t=this._clusters.get(e);return t?this._tree.getRegionDisplayIds(t.geohashBoundsInfo):[]}getDisplayIdForReferenceId(e){for(const t of this._clusters.values())if(t?.referenceId===e)return t.displayId;return null}getAggregateValueRanges(){return this._aggregateValueRanges}forEach(e){for(const[t,s]of this._clusters)s&&e(s,t)}size(){let e=0;return this.forEach((t=>e++)),e}_rebuildTree(){this._bitsets.computed.clear(),this._bitsets.inserted.clear(),this._tree&&this._tree.clear()}_remove(e){const t=e.getDisplayId(),s=e.getXHydrated(),r=e.getYHydrated(),o=this._geohashBuf[2*t],a=this._geohashBuf[2*t+1];this._bitsets.inserted.has(t)&&(this._bitsets.inserted.unset(t),this._tree.removeCursor(e,s,r,o,a,this._geohashLevel))}_update(e,t){const s=e.getDisplayId(),r=this._bitsets.inserted,o=t.isVisible(s);if(o===r.has(s))return;if(!o)return void this._remove(e);const a=e.getXHydrated(),i=e.getYHydrated();if(!this._setGeohash(s,a,i))return;const h=this._geohashBuf[2*s],n=this._geohashBuf[2*s+1];this._tree.insertCursor(e,s,a,i,h,n,this._geohashLevel),r.set(s)}_setGeohash(e,t,s){if(this._bitsets.geohash.has(e))return!0;const r=this._geohashBuf;if(this._spatialReference.isWebMercator){const o=B(t/l.radius),a=o-360*Math.floor((o+180)/360),i=B(Math.PI/2-2*Math.atan(Math.exp(-s/l.radius)));h(r,e,i,a,L)}else{const o=y({x:t,y:s},this._spatialReference,M.WGS84);if(!o)return!1;h(r,e,o.y,o.x,L)}return this._bitsets.geohash.set(e),!0}_getClustersForTile(e,o,a,i,h,n=!0){const l=this._schema.params.clusterPixelBuffer,u=2*a,d=Math.ceil(2**o.key.level*I/u)+1,f=Math.ceil(l/u)+0,_=Math.ceil(I/u),{row:m,col:y}=o.key,v=y*I,b=m*I,R=Math.floor(v/u)-f,M=Math.floor(b/u)-f,x=R+_+2*f,C=M+_+2*f,L=o.tileInfoView.getLODInfoAt(o.key.level);for(let I=R;I<=x;I++)for(let a=M;a<=C;a++){let l=I;L.wrap&&(l=I<0?I+d:I%d);const u=L.wrap&&I<0,f=L.wrap&&I%d!==I,_=this._lookupCluster(i,L,o.key.level,l,a,o);if(s(_)){const o=r(h,(e=>u?e.left:f?e.right:e.tile));if(n&&t(o))continue;if(!_.count)continue;if(s(o)&&n){const t=_.geometry.clone();let r=_.attributes;t.coords[0]=g(o,t.coords[0]),t.coords[1]=c(o,t.coords[1]),1===_.count&&s(_.referenceId)&&(r={..._.attributes,referenceId:_.referenceId});const a=new p(t,r);a.displayId=_.displayId,e.push(a)}}}}_getGeohashLevel(e){return Math.min(Math.ceil(e/2+2),L)}_setGeohashLevel(e){const t=this._getGeohashLevel(e),s=(Math.floor(t/w)+1)*w-1;if(this._geohashLevel!==s)return this._geohashLevel=s,this._rebuildTree(),void this._bitsets.geohash.clear()}_getTransforms(e,t){const s={originPosition:"upperLeft",scale:[e.resolution,e.resolution],translate:[e.bounds[0],e.bounds[3]]},r=u(t);if(!r)return{tile:s,left:null,right:null};const[o,a]=r.valid;return{tile:s,left:{...s,translate:[a,e.bounds[3]]},right:{...s,translate:[o-a+e.bounds[0],e.bounds[3]]}}}_getClusterId(e,t,s){return(15&e)<<28|(16383&t)<<14|16383&s}_markForDeletion(e,t,s){const r=this._getClusterId(e,t,s);this._clusters.delete(r)}_getClusterBounds(e,t,s){const r=this._schema.params.clusterRadius,o=2*r;let a=s%2?t*o:t*o-r;const i=s*o;let h=a+o;const n=i-o,l=2**e.level*I;e.wrap&&a<0&&(a=0),e.wrap&&h>l&&(h=l);const u=a/I,g=i/I,c=h/I,d=n/I;return[e.getXForColumn(u),e.getYForRow(g),e.getXForColumn(c),e.getYForRow(d)]}_getGeohash(e,t,s){const r={geohashX:0,geohashY:0};return n(r,t,e,s),r}_getGeohashBounds(e,t){const s=this._getGeohashLevel(e.key.level);if(this._spatialReference.isWebMercator){const[e,r,o,a]=t,i={x:e,y:r},h={x:o,y:a};let u=0,g=0,c=0,d=0;{const e=B(i.x/l.radius);u=e-360*Math.floor((e+180)/360),g=B(Math.PI/2-2*Math.atan(Math.exp(-i.y/l.radius)))}{const e=B(h.x/l.radius);c=e-360*Math.floor((e+180)/360),d=B(Math.PI/2-2*Math.atan(Math.exp(-h.y/l.radius)))}const f={geohashX:0,geohashY:0},p={geohashX:0,geohashY:0};n(f,g,u,s),n(p,d,c,s);return{bounds:[e,r,o,a],geohashBounds:{xLL:f.geohashX,yLL:f.geohashY,xTR:p.geohashX,yTR:p.geohashY},level:s}}const r=x.fromExtent(C.fromBounds(t,this._spatialReference)),o=y(r,this._spatialReference,M.WGS84,{densificationStep:e.resolution*j});if(!o)return null;const a=d(new _,o,!1,!1),i=a.coords.filter(((e,t)=>!(t%2))),h=a.coords.filter(((e,t)=>t%2)),u=Math.min(...i),g=Math.min(...h),c=Math.max(...i),f=Math.max(...h),p=this._getGeohash(u,g,s),m=this._getGeohash(c,f,s);return{bounds:t,geohashBounds:{xLL:p.geohashX,yLL:p.geohashY,xTR:m.geohashX,yTR:m.geohashY},level:s}}_lookupCluster(e,r,o,a,i,h){const n=this._getClusterId(o,a,i),l=this._clusters.get(n),u=this._getClusterBounds(r,a,i),g=this._getGeohashBounds(h,u);if(t(g))return null;const c=this._tree.getRegionStatistics(g),{count:d,xTotal:f,yTotal:p,referenceId:_}=c,m=d?f/d:0,y=d?p/d:0;if(0===d)return this._clusters.set(n,null),null;const I={cluster_count:d,...c.attributes},v=s(l)?l.update(m,y,o,I,g,_):V.create(e,n,m,y,o,I,g,_);if(0===d){const[e,t,s,r]=u;v.geometry.coords[0]=(e+s)/2,v.geometry.coords[1]=(t+r)/2}return this._clusters.set(n,v),this._updateAggregateValueRangeForCluster(v,v.tileLevel),v}_updateAggregateValueRangeForCluster(e,t){const s=this._aggregateValueRanges[t]||{minValue:1/0,maxValue:0},r=s.minValue,o=s.maxValue;s.minValue=Math.min(r,e.count),s.maxValue=Math.max(o,e.count),this._aggregateValueRanges[t]=s,r===s.minValue&&o===s.maxValue||(this._aggregateValueRangesChanged=!0)}_markTileClustersForDeletion(e,t){const s=2*t,r=Math.ceil(I/s),{row:o,col:a}=e.key,i=a*I,h=o*I,n=Math.floor(i/s),l=Math.floor(h/s);for(let u=n;u<n+r;u++)for(let t=l;t<l+r;t++)this._markForDeletion(e.key.level,u,t)}}export{V as ClusterInfo,S as ClusterStore};
|
|
5
|
+
import"../../../../../geometry.js";import e from"../../../../../core/Evented.js";import has from"../../../../../core/has.js";import{isNone as t,isSome as s,applySome as r}from"../../../../../core/maybe.js";import{diff as o,hasDiff as a}from"../../../../../core/accessorSupport/diffUtils.js";import{GeohashTree as i}from"../../../../../geohash/GeohashTree.js";import{setGeohashBuf as h,setGeohashXY as n}from"../../../../../geohash/geohashUtils.js";import{fromRect as l}from"../../../../../geometry/support/aaBoundingBox.js";import{earth as u}from"../../../../../geometry/support/Ellipsoid.js";import{getInfo as g}from"../../../../../geometry/support/spatialReferenceUtils.js";import{getBoundsOptimizedGeometry as c,quantizeX as d,quantizeY as f,convertFromPolygon as p}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeatureWithGeometry as m,OptimizedFeature as _}from"../../../../../layers/graphics/OptimizedFeature.js";import y from"../../../../../layers/graphics/OptimizedGeometry.js";import{checkProjectionSupport as I,project as b}from"../../../../../layers/graphics/data/projectionSupport.js";import{TILE_SIZE as v}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TEXEL_MASK as R}from"../../../engine/webgl/DisplayId.js";import{featureAdapter as M}from"../FeatureStore2D.js";import{Store2D as x}from"../Store2D.js";import{FeatureSetReaderJSON as C}from"./FeatureSetReaderJSON.js";import j from"../../../../../geometry/SpatialReference.js";import L from"../../../../../geometry/Polygon.js";import B from"../../../../../geometry/Extent.js";const F=12,w=64,S=1;class V extends m{constructor(e,t,s,r,o){super(new y([],[t,s]),r,null,e),this.geohashBoundsInfo=o}get count(){return this.attributes.cluster_count}static create(e,t,s,r,o,a,i,h){const n=new V(t,s,r,a,i);return n.displayId=e.createDisplayId(!0),n.referenceId=h,n.tileLevel=o,n}update(e,t,s,r,o,a){return this.geometry.coords[0]=e,this.geometry.coords[1]=t,this.tileLevel=s,this.attributes=r,this.geohashBoundsInfo=o,this.referenceId=null,this.referenceId=a,this}toJSON(){return{attributes:{...this.attributes,aggregateId:this.objectId,referenceId:1===this.attributes.cluster_count?this.referenceId:null},geometry:{x:this.geometry.coords[0],y:this.geometry.coords[1]}}}}function T(e){return 57.29577951308232*e}class D extends x{constructor(t,s,r,o){super(t,r),this.events=new e,this.objectIdField="aggregateId",this.featureAdapter=M,this._geohashLevel=0,this._tileLevel=0,this._aggregateValueRanges={},this._aggregateValueRangesChanged=!1,this._geohashBuf=[],this._clusters=new Map,this._tiles=new Map,this._serviceInfo=o,this.geometryInfo=t.geometryInfo,this._spatialReference=s,this._projectionSupportCheck=I(s,j.WGS84),this._bitsets.geohash=r.getBitset(r.createBitset()),this._bitsets.inserted=r.getBitset(r.createBitset())}destroy(){this._tree.destroy()}get featureSpatialReference(){return this._spatialReference}get fields(){return this._fields}async updateSchema(e,s){const r=this._schema;try{await super.updateSchema(e,s),await this._projectionSupportCheck}catch(n){}this._fields=this._schema.params.fields;const h=o(r,s);s&&(!t(h)||e.source||e.storage.filters)?((a(h,"params.fields")||!this._tree||e.source)&&(this._tree&&this._tree.destroy(),this._tree=new i(this._statisticFields,this._serviceInfo),this._rebuildTree(),has("esri-2d-update-debug")&&console.debug("Aggregate mesh needs update due to tree changing")),has("esri-2d-update-debug")&&console.debug("Applying Update - ClusterStore:",h),e.targets[s.name]=!0,e.mesh=!1,this._aggregateValueRanges={}):r&&(e.mesh=!0)}clear(){this._rebuildTree()}sweepFeatures(e,t){this._bitsets.inserted.forEachSet((s=>{if(!e.has(s)){const e=t.lookupByDisplayIdUnsafe(s);this._remove(e)}}))}sweepAggregates(e,t,s){this._clusters.forEach(((r,o)=>{r&&r.tileLevel!==s&&(e.releaseDisplayId(r.displayId),t.unsetAttributeData(r.displayId),this._clusters.delete(o))}))}onTileData(e,s,r,o,a=!0){if(!this._schema||t(s.addOrUpdate))return s;const i=this._getTransforms(e,this._spatialReference);{const e=s.addOrUpdate.getCursor();for(;e.next();)this._update(e,o)}if(s.status.mesh||!a)return s;const h=new Array,n=this._schema.params.clusterRadius;this._getClustersForTile(h,e,n,r,i),s.addOrUpdate=C.fromOptimizedFeatures(h,this._serviceInfo),s.addOrUpdate.attachStorage(r),s.clear=!0,s.end=!0;{const t=s.addOrUpdate.getCursor();for(;t.next();){const s=t.getDisplayId();this._bitsets.computed.unset(s),this.setComputedAttributes(r,t,s,e.scale)}}return this._aggregateValueRangesChanged&&s.end&&(this.events.emit("valueRangesChanged",{valueRanges:this._aggregateValueRanges}),this._aggregateValueRangesChanged=!1),s}onTileUpdate({added:e,removed:t}){if(e.length){const t=e[0].level;this._tileLevel=t,this._setGeohashLevel(t)}if(!this._schema)return;const s=this._schema.params.clusterRadius;t.forEach((e=>{this._tiles.delete(e.key.id),this._markTileClustersForDeletion(e,s)}))}getAggregate(e){for(const t of this._clusters.values())if((t?.displayId&R)==(e&R))return t.toJSON();return null}getAggregates(){const e=[];for(const t of this._clusters.values())t?.tileLevel===this._tileLevel&&e.push(t.toJSON());return e}getDisplayId(e){const t=this._clusters.get(e);return t?t.displayId:null}getFeatureDisplayIdsForAggregate(e){const t=this._clusters.get(e);return t?this._tree.getRegionDisplayIds(t.geohashBoundsInfo):[]}getDisplayIdForReferenceId(e){for(const t of this._clusters.values())if(t?.referenceId===e)return t.displayId;return null}getAggregateValueRanges(){return this._aggregateValueRanges}forEach(e){this._clusters.forEach((t=>{if(!t)return;const s=t.toJSON(),r=C.fromFeatures([s],{objectIdField:this.objectIdField,globalIdField:null,geometryType:this.geometryInfo.geometryType,fields:this.fields}).getCursor();r.next(),e(r)}))}forEachInBounds(e,t){}forEachBounds(e,s,r){const{hasM:o,hasZ:a}=this.geometryInfo;for(const i of e){const e=c([0,0,0,0],i.readGeometry(),a,o);t(e)||s(l(r,e))}}toArray(){const e=[];return this.forEach((t=>e.push(t))),e}size(){let e=0;return this.forEach((t=>e++)),e}_rebuildTree(){this._bitsets.computed.clear(),this._bitsets.inserted.clear(),this._tree&&this._tree.clear()}_remove(e){const t=e.getDisplayId(),s=e.getXHydrated(),r=e.getYHydrated(),o=this._geohashBuf[2*t],a=this._geohashBuf[2*t+1];this._bitsets.inserted.has(t)&&(this._bitsets.inserted.unset(t),this._tree.removeCursor(e,s,r,o,a,this._geohashLevel))}_update(e,t){const s=e.getDisplayId(),r=this._bitsets.inserted,o=t.isVisible(s);if(o===r.has(s))return;if(!o)return void this._remove(e);const a=e.getXHydrated(),i=e.getYHydrated();if(!this._setGeohash(s,a,i))return;const h=this._geohashBuf[2*s],n=this._geohashBuf[2*s+1];this._tree.insertCursor(e,s,a,i,h,n,this._geohashLevel),r.set(s)}_setGeohash(e,t,s){if(this._bitsets.geohash.has(e))return!0;const r=this._geohashBuf;if(this._spatialReference.isWebMercator){const o=T(t/u.radius),a=o-360*Math.floor((o+180)/360),i=T(Math.PI/2-2*Math.atan(Math.exp(-s/u.radius)));h(r,e,i,a,F)}else{const o=b({x:t,y:s},this._spatialReference,j.WGS84);if(!o)return!1;h(r,e,o.y,o.x,F)}return this._bitsets.geohash.set(e),!0}_getClustersForTile(e,o,a,i,h,n=!0){const l=this._schema.params.clusterPixelBuffer,u=2*a,g=Math.ceil(2**o.key.level*v/u)+1,c=Math.ceil(l/u)+0,p=Math.ceil(v/u),{row:m,col:y}=o.key,I=y*v,b=m*v,R=Math.floor(I/u)-c,M=Math.floor(b/u)-c,x=R+p+2*c,C=M+p+2*c,j=o.tileInfoView.getLODInfoAt(o.key.level);for(let v=R;v<=x;v++)for(let a=M;a<=C;a++){let l=v;j.wrap&&(l=v<0?v+g:v%g);const u=j.wrap&&v<0,c=j.wrap&&v%g!==v,p=this._lookupCluster(i,j,o.key.level,l,a,o);if(s(p)){const o=r(h,(e=>u?e.left:c?e.right:e.tile));if(n&&t(o))continue;if(!p.count)continue;if(s(o)&&n){const t=p.geometry.clone();let r=p.attributes;t.coords[0]=d(o,t.coords[0]),t.coords[1]=f(o,t.coords[1]),1===p.count&&s(p.referenceId)&&(r={...p.attributes,referenceId:p.referenceId});const a=new _(t,r);a.displayId=p.displayId,e.push(a)}}}}_getGeohashLevel(e){return Math.min(Math.ceil(e/2+2),F)}_setGeohashLevel(e){const t=this._getGeohashLevel(e),s=(Math.floor(t/S)+1)*S-1;if(this._geohashLevel!==s)return this._geohashLevel=s,this._rebuildTree(),void this._bitsets.geohash.clear()}_getTransforms(e,t){const s={originPosition:"upperLeft",scale:[e.resolution,e.resolution],translate:[e.bounds[0],e.bounds[3]]},r=g(t);if(!r)return{tile:s,left:null,right:null};const[o,a]=r.valid;return{tile:s,left:{...s,translate:[a,e.bounds[3]]},right:{...s,translate:[o-a+e.bounds[0],e.bounds[3]]}}}_getClusterId(e,t,s){return(15&e)<<28|(16383&t)<<14|16383&s}_markForDeletion(e,t,s){const r=this._getClusterId(e,t,s);this._clusters.delete(r)}_getClusterBounds(e,t,s){const r=this._schema.params.clusterRadius,o=2*r;let a=s%2?t*o:t*o-r;const i=s*o;let h=a+o;const n=i-o,l=2**e.level*v;e.wrap&&a<0&&(a=0),e.wrap&&h>l&&(h=l);const u=a/v,g=i/v,c=h/v,d=n/v;return[e.getXForColumn(u),e.getYForRow(g),e.getXForColumn(c),e.getYForRow(d)]}_getGeohash(e,t,s){const r={geohashX:0,geohashY:0};return n(r,t,e,s),r}_getGeohashBounds(e,t){const s=this._getGeohashLevel(e.key.level);if(this._spatialReference.isWebMercator){const[e,r,o,a]=t,i={x:e,y:r},h={x:o,y:a};let l=0,g=0,c=0,d=0;{const e=T(i.x/u.radius);l=e-360*Math.floor((e+180)/360),g=T(Math.PI/2-2*Math.atan(Math.exp(-i.y/u.radius)))}{const e=T(h.x/u.radius);c=e-360*Math.floor((e+180)/360),d=T(Math.PI/2-2*Math.atan(Math.exp(-h.y/u.radius)))}const f={geohashX:0,geohashY:0},p={geohashX:0,geohashY:0};n(f,g,l,s),n(p,d,c,s);return{bounds:[e,r,o,a],geohashBounds:{xLL:f.geohashX,yLL:f.geohashY,xTR:p.geohashX,yTR:p.geohashY},level:s}}const r=L.fromExtent(B.fromBounds(t,this._spatialReference)),o=b(r,this._spatialReference,j.WGS84,{densificationStep:e.resolution*w});if(!o)return null;const a=p(new y,o,!1,!1),i=a.coords.filter(((e,t)=>!(t%2))),h=a.coords.filter(((e,t)=>t%2)),l=Math.min(...i),g=Math.min(...h),c=Math.max(...i),d=Math.max(...h),f=this._getGeohash(l,g,s),m=this._getGeohash(c,d,s);return{bounds:t,geohashBounds:{xLL:f.geohashX,yLL:f.geohashY,xTR:m.geohashX,yTR:m.geohashY},level:s}}_lookupCluster(e,r,o,a,i,h){const n=this._getClusterId(o,a,i),l=this._clusters.get(n),u=this._getClusterBounds(r,a,i),g=this._getGeohashBounds(h,u);if(t(g))return null;const c=this._tree.getRegionStatistics(g),{count:d,xTotal:f,yTotal:p,referenceId:m}=c,_=d?f/d:0,y=d?p/d:0;if(0===d)return this._clusters.set(n,null),null;const I={cluster_count:d,...c.attributes},b=s(l)?l.update(_,y,o,I,g,m):V.create(e,n,_,y,o,I,g,m);if(0===d){const[e,t,s,r]=u;b.geometry.coords[0]=(e+s)/2,b.geometry.coords[1]=(t+r)/2}return this._clusters.set(n,b),this._updateAggregateValueRangeForCluster(b,b.tileLevel),b}_updateAggregateValueRangeForCluster(e,t){const s=this._aggregateValueRanges[t]||{minValue:1/0,maxValue:0},r=s.minValue,o=s.maxValue;s.minValue=Math.min(r,e.count),s.maxValue=Math.max(o,e.count),this._aggregateValueRanges[t]=s,r===s.minValue&&o===s.maxValue||(this._aggregateValueRangesChanged=!0)}_markTileClustersForDeletion(e,t){const s=2*t,r=Math.ceil(v/s),{row:o,col:a}=e.key,i=a*v,h=o*v,n=Math.floor(i/s),l=Math.floor(h/s);for(let u=n;u<n+r;u++)for(let t=l;t<l+r;t++)this._markForDeletion(e.key.level,u,t)}}export{V as ClusterInfo,D as ClusterStore};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{g as t,m as e,h as s,
|
|
5
|
+
import{g as t,m as e,h as s,s as r,r as i}from"../../../../chunks/mat3.js";import{c as o}from"../../../../chunks/mat3f32.js";import{f as a}from"../../../../chunks/vec2f32.js";import{f as n}from"../../../../chunks/vec3f32.js";import{normalizeMapX as f}from"../../../../geometry/support/normalizeUtils.js";import{DisplayObject as l}from"../../engine/DisplayObject.js";import{createProgramDescriptor as u}from"../../engine/webgl/Utils.js";import{BufferObject as c}from"../../../webgl/BufferObject.js";import{BlendFactor as _,PrimitiveType as h,DataType as m,Usage as d}from"../../../webgl/enums.js";import{VertexArrayObject as p}from"../../../webgl/VertexArrayObject.js";const g=Math.PI/180,v=4;class x extends l{constructor(t){super(),this._dvsMat3=o(),this._localOrigin={x:0,y:0},this._getBounds=t}destroy(){this._vao&&(this._vao.dispose(!0),this._vao=null,this._vertexBuffer=null,this._indexBuffer=null),this._program&&(this._program.dispose(),this._program=null)}doRender(t){const{context:e}=t,s=this._getBounds();if(s.length<1)return;this._createShaderProgram(e),this._updateMatricesAndLocalOrigin(t),this._updateBufferData(e,s),e.setBlendingEnabled(!0),e.setDepthTestEnabled(!1),e.setStencilWriteMask(0),e.setStencilTestEnabled(!1),e.setBlendFunction(_.ONE,_.ONE_MINUS_SRC_ALPHA),e.setColorMask(!0,!0,!0,!0);const r=this._program;e.bindVAO(this._vao),e.useProgram(r),r.setUniformMatrix3fv("u_dvsMat3",this._dvsMat3),e.gl.lineWidth(1),e.drawElements(h.LINES,8*s.length,m.UNSIGNED_INT,0),e.bindVAO()}_createTransforms(){return{dvs:o()}}_createShaderProgram(t){if(this._program)return;const e="precision highp float;\n uniform mat3 u_dvsMat3;\n\n attribute vec2 a_position;\n\n void main() {\n mediump vec3 pos = u_dvsMat3 * vec3(a_position, 1.0);\n gl_Position = vec4(pos.xy, 0.0, 1.0);\n }",s="precision mediump float;\n void main() {\n gl_FragColor = vec4(0.75, 0.0, 0.0, 0.75);\n }";this._program=t.programCache.acquire(e,s,b().attributes)}_updateMatricesAndLocalOrigin(o){const{state:l}=o,{displayMat3:u,size:c,resolution:_,pixelRatio:h,rotation:m,viewpoint:d}=l,p=g*m,{x:v,y:x}=d.targetGeometry,b=f(v,l.spatialReference);this._localOrigin.x=b,this._localOrigin.y=x;const y=h*c[0],B=h*c[1],M=_*y,A=_*B,O=t(this._dvsMat3);e(O,O,u),s(O,O,a(y/2,B/2)),r(O,O,n(c[0]/M,-B/A,1)),i(O,O,-p)}_updateBufferData(t,e){const{x:s,y:r}=this._localOrigin,i=2*v*e.length,o=new Float32Array(i),a=new Uint32Array(8*e.length);let n=0,f=0;for(const l of e)l&&(o[2*n+0]=l[0]-s,o[2*n+1]=l[1]-r,o[2*n+2]=l[0]-s,o[2*n+3]=l[3]-r,o[2*n+4]=l[2]-s,o[2*n+5]=l[3]-r,o[2*n+6]=l[2]-s,o[2*n+7]=l[1]-r,a[f+0]=n+0,a[f+1]=n+3,a[f+2]=n+3,a[f+3]=n+2,a[f+4]=n+2,a[f+5]=n+1,a[f+6]=n+1,a[f+7]=n+0,n+=4,f+=8);if(this._vertexBuffer?this._vertexBuffer.setData(o.buffer):this._vertexBuffer=c.createVertex(t,d.DYNAMIC_DRAW,o.buffer),this._indexBuffer?this._indexBuffer.setData(a):this._indexBuffer=c.createIndex(t,d.DYNAMIC_DRAW,a),!this._vao){const e=b();this._vao=new p(t,e.attributes,e.bufferLayouts,{geometry:this._vertexBuffer},this._indexBuffer)}}}const b=()=>u("bounds",{geometry:[{location:0,name:"a_position",count:2,type:m.FLOAT}]});export{x as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{g as e,h as t,
|
|
5
|
+
import{g as e,h as t,s}from"../../../../chunks/mat3.js";import{c as r}from"../../../../chunks/mat3f32.js";import{BufferObject as a}from"../../../webgl/BufferObject.js";import"../../../webgl/FramebufferObject.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../webgl/checkWebGLError.js";import"../../../webgl/context-util.js";import{DataType as i,BlendFactor as o,PrimitiveType as n,Usage as m}from"../../../webgl/enums.js";import"../../../../chunks/builtins.js";import"../../../webgl/Texture.js";import{VertexArrayObject as f}from"../../../webgl/VertexArrayObject.js";import{DisplayObject as h}from"../../engine/DisplayObject.js";import{VertexElementDescriptor as c}from"../../../webgl/VertexElementDescriptor.js";const _={geometry:[new c("a_PositionAndFlags",3,i.SHORT,0,6)]},u=new Map;u.set("a_PositionAndFlags",0);const l={vsPath:"debug/overlay",fsPath:"debug/overlay",attributes:u};class d extends h{constructor(e){super(),this._conf=e}static makeFlags(e,t){return e|t<<2}_createTransforms(){return{dvs:r()}}doRender(e){this._updateTransforms(e),this._ensureResources(e);const{context:t}=e;t.useProgram(this._program),this._program.setUniformMatrix3fv("u_dvsMat3",this.transforms.dvs),this._program.setUniform4fv("u_colors",this._conf.getColors(e)),this._program.setUniform1fv("u_opacities",this._conf.getOpacities(e));const{vertexData:s,indexData:r}=this._conf.getMesh(e);this._vertexBuffer.setData(s),this._indexBuffer.setData(r),t.bindVAO(this._vertexArray),t.setBlendingEnabled(!0),t.setBlendFunction(o.ONE,o.ONE_MINUS_SRC_ALPHA),t.setDepthTestEnabled(!1),t.setStencilTestEnabled(!1),t.setColorMask(!0,!0,!0,!0),t.drawElements(n.TRIANGLES,r.length,i.UNSIGNED_INT,0)}onDetach(){this._vertexArray&&(this._vertexArray.dispose(),this._vertexArray=null)}_updateTransforms(r){e(this.transforms.dvs),t(this.transforms.dvs,this.transforms.dvs,[-1,1]),s(this.transforms.dvs,this.transforms.dvs,[2/r.state.size[0],-2/r.state.size[1],1])}_ensureResources(e){const{context:t}=e;this._program||(this._program=e.painter.materialManager.getProgram(l)),this._vertexBuffer||(this._vertexBuffer=a.createVertex(t,m.STREAM_DRAW)),this._indexBuffer||(this._indexBuffer=a.createIndex(t,m.STREAM_DRAW)),this._vertexArray||(this._vertexArray=new f(t,u,_,{geometry:this._vertexBuffer},this._indexBuffer))}}export{d as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import{EsriPromise as t}from"../../../../core/Promise.js";import{createResolver as r,ignoreAbortErrors as s,throwIfNotAbortError as o}from"../../../../core/promiseUtils.js";import{open as i}from"../../../../core/workers/workers.js";import{property as n}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as a}from"../../../../core/accessorSupport/decorators/subclass.js";function c(e){return Array.isArray(e)}let l=class extends t{constructor(e){super(e),this._startupResolver=r(),this.isReady=!1}initialize(){this._controller=new AbortController,this.addResolvingPromise(this._startWorker(this._controller.signal))}destroy(){this._controller.abort(),this._connection&&this._connection.close()}set tileRenderer(e){this.client.tileRenderer=e}get closed(){return this._connection.closed}async startup(e,t,r,s){await this.when();const o=this._controller.signal,i=c(r.source)?{transferList:r.source,signal:o}:void 0,n={service:r,config:t,tileInfo:e.tileInfo.toJSON(),tiles:s};await this._connection.invoke("startup",n,i),this._startupResolver.resolve(),this._set("isReady",!0)}async updateTiles(e){return await this._startupResolver.promise,s(this._connection.invoke("updateTiles",e))}async update(e){const t={config:e};return await this._startupResolver.promise,this._connection.invoke("update",t)}async applyUpdate(e){return await this._startupResolver.promise,this._connection.invoke("applyUpdate",e)}async setHighlight(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.setHighlight",e))}async stop(){if(await this._startupResolver.promise,!this.closed)return s(this._connection.invoke("stop"))}async refresh(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.refresh",e))}async querySummaryStatistics(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.querySummaryStatistics",{query:e.toJSON(),params:t},r)}async queryUniqueValues(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryUniqueValues",{query:e.toJSON(),params:t},r)}async queryClassBreaks(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryClassBreaks",{query:e.toJSON(),params:t},r)}async queryHistogram(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryHistogram",{query:e.toJSON(),params:t},r)}async queryFeatures(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryFeatures",e.toJSON(),t)}async queryVisibleFeatures(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryVisibleFeatures",e.toJSON(),t)}async queryObjectIds(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryObjectIds",e.toJSON(),t)}async queryFeatureCount(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryFeatureCount",e.toJSON(),t)}async queryExtent(e,t){return this._connection.invoke("controller.queryExtent",e.toJSON(),t)}async queryLatestObservations(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryLatestObservations",e.toJSON(),t)}async queryStatistics(e){return await this._startupResolver.promise,this._connection.invoke("controller.queryStatistics",e)}async getObjectId(e){return await this._startupResolver.promise,this._connection.invoke("controller.getObjectId",e)}async getDisplayId(e){return await this._startupResolver.promise,this._connection.invoke("controller.getDisplayId",e)}async getFeatures(e){return await this._startupResolver.promise,this._connection.invoke("controller.getFeatures",e)}async getAggregates(){return await this._startupResolver.promise,this._connection.invoke("controller.getAggregates")}async getAggregateValueRanges(){return await this._startupResolver.promise,this._connection.invoke("controller.getAggregateValueRanges")}async mapValidDisplayIds(e){return await this._startupResolver.promise,this._connection.invoke("controller.mapValidDisplayIds",e)}async onEdits(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.onEdits",e))}async enableEvent(e,t){return await this._startupResolver.promise,s(this._connection.invoke("controller.enableEvent",{name:e,value:t}))}pauseStream(){return s(this._connection.invoke("controller.pauseStream"))}resumeStream(){return s(this._connection.invoke("controller.resumeStream"))}async _startWorker(e){try{this._connection=await i("Pipeline",{client:this.client,strategy:"dedicated",signal:e})}catch(t){o(t)}}};e([n()],l.prototype,"isReady",void 0),e([n({constructOnly:!0})],l.prototype,"client",void 0),e([n()],l.prototype,"tileRenderer",null),l=e([a("esri.views.2d.layers.support.FeatureLayerProxy")],l);const u=l;export{u as default};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import{EsriPromise as t}from"../../../../core/Promise.js";import{createResolver as r,ignoreAbortErrors as s,throwIfNotAbortError as o}from"../../../../core/promiseUtils.js";import{open as i}from"../../../../core/workers/workers.js";import{property as n}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as a}from"../../../../core/accessorSupport/decorators/subclass.js";function c(e){return Array.isArray(e)}let l=class extends t{constructor(e){super(e),this._startupResolver=r(),this.isReady=!1}initialize(){this._controller=new AbortController,this.addResolvingPromise(this._startWorker(this._controller.signal))}destroy(){this._controller.abort(),this._connection&&this._connection.close()}set tileRenderer(e){this.client.tileRenderer=e}get closed(){return this._connection.closed}async startup(e,t,r,s){await this.when();const o=this._controller.signal,i=c(r.source)?{transferList:r.source,signal:o}:void 0,n={service:r,config:t,tileInfo:e.tileInfo.toJSON(),tiles:s};await this._connection.invoke("startup",n,i),this._startupResolver.resolve(),this._set("isReady",!0)}async updateTiles(e){return await this._startupResolver.promise,s(this._connection.invoke("updateTiles",e))}async update(e){const t={config:e};return await this._startupResolver.promise,this._connection.invoke("update",t)}async applyUpdate(e){return await this._startupResolver.promise,this._connection.invoke("applyUpdate",e)}async setHighlight(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.setHighlight",e))}async stop(){if(await this._startupResolver.promise,!this.closed)return s(this._connection.invoke("stop"))}async refresh(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.refresh",e))}async querySummaryStatistics(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.querySummaryStatistics",{query:e.toJSON(),params:t},r)}async queryUniqueValues(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryUniqueValues",{query:e.toJSON(),params:t},r)}async queryClassBreaks(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryClassBreaks",{query:e.toJSON(),params:t},r)}async queryHistogram(e,t,r){return await this._startupResolver.promise,this._connection.invoke("controller.queryHistogram",{query:e.toJSON(),params:t},r)}async queryFeatures(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryFeatures",e.toJSON(),t)}async queryVisibleFeatures(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryVisibleFeatures",e.toJSON(),t)}async queryObjectIds(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryObjectIds",e.toJSON(),t)}async queryFeatureCount(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryFeatureCount",e.toJSON(),t)}async queryExtent(e,t){return this._connection.invoke("controller.queryExtent",e.toJSON(),t)}async queryLatestObservations(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryLatestObservations",e.toJSON(),t)}async queryStatistics(e){return await this._startupResolver.promise,this._connection.invoke("controller.queryStatistics",e)}async queryAggregates(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryAggregates",e.toJSON(),t)}async queryAggregateCount(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryAggregateCount",e.toJSON(),t)}async queryAggregateIds(e,t){return await this._startupResolver.promise,this._connection.invoke("controller.queryAggregateIds",e.toJSON(),t)}async getObjectId(e){return await this._startupResolver.promise,this._connection.invoke("controller.getObjectId",e)}async getDisplayId(e){return await this._startupResolver.promise,this._connection.invoke("controller.getDisplayId",e)}async getFeatures(e){return await this._startupResolver.promise,this._connection.invoke("controller.getFeatures",e)}async getAggregates(){return await this._startupResolver.promise,this._connection.invoke("controller.getAggregates")}async getAggregateValueRanges(){return await this._startupResolver.promise,this._connection.invoke("controller.getAggregateValueRanges")}async mapValidDisplayIds(e){return await this._startupResolver.promise,this._connection.invoke("controller.mapValidDisplayIds",e)}async onEdits(e){return await this._startupResolver.promise,s(this._connection.invoke("controller.onEdits",e))}async enableEvent(e,t){return await this._startupResolver.promise,s(this._connection.invoke("controller.enableEvent",{name:e,value:t}))}pauseStream(){return s(this._connection.invoke("controller.pauseStream"))}resumeStream(){return s(this._connection.invoke("controller.resumeStream"))}async _startWorker(e){try{this._connection=await i("Pipeline",{client:this.client,strategy:"dedicated",signal:e})}catch(t){o(t)}}};e([n()],l.prototype,"isReady",void 0),e([n({constructOnly:!0})],l.prototype,"client",void 0),e([n()],l.prototype,"tileRenderer",null),l=e([a("esri.views.2d.layers.support.FeatureLayerProxy")],l);const u=l;export{u as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../../core/Error.js";import has from"../../../../core/has.js";import
|
|
5
|
+
import e from"../../../../core/Error.js";import has from"../../../../core/has.js";import r from"../../../../core/Logger.js";import{isNone as i}from"../../../../core/maybe.js";import{createMD5Hash as t}from"../../../../core/MD5.js";import s from"../../../../layers/support/AggregateField.js";import l from"../../../../layers/support/OutStatistic.js";import a from"../../../../renderers/visualVariables/SizeVariable.js";import n from"../../../../renderers/visualVariables/support/SizeStop.js";import{LevelDependentSizeVariable as o}from"../../engine/LevelDependentSizeVariable.js";const u=r.getLogger("esri.views.2d.layers.support.clusterUtils");has.add("esri-cluster-arcade-enabled",!0);const d=has("esri-cluster-arcade-enabled"),p=(e,r,t,s)=>{const l=r.clone();if(!v(l))return l;if(e.push(...t.fields??[]),"visualVariables"in l){const r=(l.visualVariables||[]).filter((e=>"$view.scale"!==e.valueExpression)),a=c(r);r.forEach((r=>{"rotation"===r.type?r.field?r.field=y(e,r.field,"avg_angle","double"):r.valueExpression&&(r.field=b(e,r.valueExpression,"avg_angle","double"),r.valueExpression=null):r.normalizationField?(r.field=y(e,r.field,"avg_norm","double",r.normalizationField),r.normalizationField=null):r.field?r.field=y(e,r.field,"avg","double"):(r.field=b(e,r.valueExpression,"avg","double"),r.valueExpression=null)})),i(a)&&!f(r)&&(r.push(m(t,s)),l.dynamicClusterSize=!0),l.visualVariables=r}switch(l.type){case"simple":break;case"unique-value":l.field?l.field=y(e,l.field,"mode","string"):l.valueExpression&&(l.field=b(e,l.valueExpression,"mode","string"),l.valueExpression=null);break;case"class-breaks":l.normalizationField?(l.field=y(e,l.field,"avg_norm","double",l.normalizationField),l.normalizationField=null):l.field?l.field=y(e,l.field,"avg","double"):(l.field=b(e,l.valueExpression,"avg","double"),l.valueExpression=null)}return l},c=e=>{for(const r of e)if("size"===r.type)return r;return null},f=e=>{for(const r of e)if("cluster_count"===r.field)return!0;return!1},m=(e,r)=>{const t=[new n({value:0,size:0}),new n({value:1})];if(i(r))return new a({field:"cluster_count",stops:[...t,new n({value:2,size:0})]});const s=Object.keys(r).reduce(((i,s)=>({...i,[s]:[...t,new n({value:Math.max(2,r[s].minValue),size:e.clusterMinSize}),new n({value:Math.max(3,r[s].maxValue),size:e.clusterMaxSize})]})),{});return new o({field:"cluster_count",levels:s})},v=r=>{const i=i=>u.error(new e("Unsupported-renderer",i,{renderer:r}));if("unique-value"===r.type){if(r.field2||r.field3)return i("FeatureReductionCluster does not support multi-field UniqueValueRenderers"),!1}else if("class-breaks"===r.type){if(r.normalizationField){const e=r.normalizationType;if("field"!==e)return i(`FeatureReductionCluster does not support a normalizationType of ${e}`),!1}}else if("simple"!==r.type)return i(`FeatureReductionCluster does not support renderers of type ${r.type}`),!1;if(!d){if("valueExpression"in r&&r.valueExpression)return i("FeatureReductionCluster does not currently support renderer.valueExpression. Support will be added in a future release"),!1;if(("visualVariables"in r&&r.visualVariables||[]).some((e=>!(!("valueExpression"in e)||!e.valueExpression))))return i("FeatureReductionCluster does not currently support visualVariables with a valueExpression. Support will be added in a future release"),!1}return!0};function g(e,r,i){switch(e){case"avg":case"avg_angle":return`cluster_avg_${r}`;case"mode":return`cluster_type_${r}`;case"avg_norm":{const e=i,s="field",l=r.toLowerCase()+",norm:"+s+","+e.toLowerCase();return"cluster_avg_"+t(l)}}}function b(e,r,i,a){const n=t(r),o="mode"===i?`cluster_type_${n}`:`cluster_avg_${n}`;return e.some((e=>e.name===o))||e.push(new s({name:o,type:a,outStatistic:new l({onStatisticField:n,onStatisticValueExpression:r,statisticType:i})})),o}function y(e,r,i,t,a){if("cluster_count"===r||e.some((e=>e.name===r)))return r;const n=g(i,r,a);return e.some((e=>e.name===n))||("avg_norm"===i?e.push(new s({name:n,type:t,outStatistic:new l({onStatisticField:r,onStatisticValueExpression:`$feature.${r} / $feature.${a}`,statisticType:"avg"})})):e.push(new s({name:n,type:t,outStatistic:new l({onStatisticField:r,statisticType:i})}))),n}export{m as createClusterCountSizeVariable,p as createClusterRenderer,c as findSizeVV,f as hasClusterCountVV,v as isClusterCompatibleRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{deg2rad as e}from"../../../../../core/mathUtils.js";import{isSome as t,unwrapOr as s}from"../../../../../core/maybe.js";import{createLength as i,createArea as o}from"../../../../../core/quantityUtils.js";import{s as r,d as n}from"../../../../../chunks/vec2.js";import{a as h}from"../../../../../chunks/vec2f64.js";import{n as a,i as d,c as g,f as l,o as p,b as c,e as m,g as u,a as _}from"../../../../../chunks/vec3.js";import{c as C}from"../../../../../chunks/vec3f64.js";import{c as f}from"../../../../../chunks/vec4f64.js";import{canProjectWithoutEngine as S,canProjectToWGS84ComparableLonLat as L,projectPointToVector as P,projectPointToWGS84ComparableLonLat as R,projectDirection as j,projectVectorToVector as M}from"../../../../../geometry/projection.js";import{getSphericalPCPF as A,getReferenceEllipsoid as W}from"../../../../../geometry/projectionEllipsoid.js";import v from"../../../../../geometry/SpatialReference.js";import{Axis as w}from"../../../../../geometry/support/Axis.js";import{segmentIntersects as z}from"../../../../../geometry/support/intersectsBase.js";import{areaPoints2d as I}from"../../../../../geometry/support/triangle.js";import{MeasurementMode as U}from"../../interfaces.js";import{segmentLengthGeodesicVector as G,bestFitPlane as V,fitHemisphere as y,triangleAreaGeodesic as T,planePointDistance as F,boundingSphere as b,segmentLengthGeodesic as E,segmentLengthEuclidean as N}from"../../support/measurementUtils.js";import{midpoint as x}from"../../support/viewUtils.js";import{getElevationAtPoint as k}from"../../../support/ElevationProvider.js";import{makeOrthonormal as q,tangentFrame as D}from"../../../support/mathUtils.js";import{compactIndices as B}from"../../../webgl-engine/lib/Indices.js";import{triangulate as H}from"../../../../support/euclideanAreaMeasurementUtils.js";class X{constructor(e,t){this.positionsWorldCoords=[],this.positionsRenderCoords=[],this.positionsProjectedWorldCoords=[],this.positionsFittedRenderCoords=[],this.positionsGeographic=[],this.positionsSpherical=[],this.positionsStereographic=[],this.pathSegmentLengths=[],this.geodesicPathSegmentLengths=[],this.perimeterSegmentLengths=[],this.intersectingSegments=new Set,this.geodesicIntersectingSegments=new Set,this.areaCentroidWorldCoords=C(),this.areaCentroidRenderCoords=C(),this.geodesicAreaCentroidRenderCoords=C(),this._length=0,this._centroidRenderCoords=C(),this._planeWorldCoords=f(),this._worldUp=C(),this._worldTangent=C(),this._frame=[C(),C(),C()],this._pathVersion=-1,this._validMeasurement=!1,this._hasCursorPoint=!1,this._mode=null,this._tempU=C(),this._tempV=C(),this._tempVec3=C(),this._tempSphere={center:C(),radius:0},this._sceneView=e,this.unitNormalizer=t}update(e,s,o,r,n,h,d){const g=this.unitNormalizer,l=this._sceneView.renderSpatialReference,p=this.unitNormalizer.spatialReference,c=t(s);if(this._pathVersion===e.version&&this._validMeasurement===r&&!d&&this._hasCursorPoint===c&&this._mode===h){return!e.isValidPolygon&&(this._updateCursorSegmentLength(e,s),!0)}this._pathVersion=e.version,this._validMeasurement=r,this._hasCursorPoint=c;const m=e.numVertices;this._resize(m);const u=A(o.spatialReference),_=S(o.spatialReference,u)&&L(o.spatialReference),{positionsGeographic:C,positionsWorldCoords:f,positionsRenderCoords:j,positionsSpherical:M}=this;e.forEachVertexPosition(((e,t)=>{Z(o.elevationProvider,e),P(e,f[t],p),P(e,j[t],l),_&&(R(e,C[t]),P(e,M[t],u),a(M[t],M[t]))}));const W=this._updatePathLengths(r);if(this.pathLength=this._length>1?i(g.normalizeDistance(W),"meters"):null,_){const e=this._updateGeodesicPathLengths(r,p);this.geodesicPathLength=this._length>1?i(e,"meters"):null}else this.geodesicPathLength=null;return this._updateCursorSegmentLength(e,s),this._updateMode(e,h),r?(this._updateArea(o,g,l,p,n),_&&this._updateGeodesicArea(o),!0):(this.area=null,this.geodesicArea=null,this.perimeterLength=null,this.triangleIndices=null,this.geodesicTriangleIndices=null,this.intersectingSegments.clear(),this.geodesicIntersectingSegments.clear(),!0)}getData(){return{positionsWorldCoords:this.positionsWorldCoords,positionsRenderCoords:this.positionsRenderCoords,positionsProjectedWorldCoords:this.positionsProjectedWorldCoords,positionsFittedRenderCoords:this.positionsFittedRenderCoords,positionsGeographic:this.positionsGeographic,positionsSpherical:this.positionsSpherical,positionsStereographic:this.positionsStereographic,pathSegmentLengths:this.pathSegmentLengths,geodesicPathSegmentLengths:this.geodesicPathSegmentLengths,perimeterSegmentLengths:this.perimeterSegmentLengths,intersectingSegments:this.intersectingSegments,geodesicIntersectingSegments:this.geodesicIntersectingSegments,triangleIndices:this.triangleIndices,geodesicTriangleIndices:this.geodesicTriangleIndices,areaCentroidWorldCoords:this.areaCentroidWorldCoords,areaCentroidRenderCoords:this.areaCentroidRenderCoords,geodesicAreaCentroidRenderCoords:this.geodesicAreaCentroidRenderCoords,fittingMode:this.fittingMode,area:this.area,geodesicArea:this.geodesicArea,pathLength:this.pathLength,geodesicPathLength:this.geodesicPathLength,perimeterLength:this.perimeterLength,cursorSegmentLength:this.cursorSegmentLength,geodesicCursorSegmentLength:this.geodesicCursorSegmentLength,unitNormalizer:this.unitNormalizer,actualMeasurementMode:this.actualMeasurementMode}}_resize(e){for(e<this._length&&(this.positionsWorldCoords.length=e,this.positionsRenderCoords.length=e,this.positionsProjectedWorldCoords.length=e,this.positionsFittedRenderCoords.length=e,this.positionsGeographic.length=e,this.positionsSpherical.length=e,this.positionsStereographic.length=e,this.pathSegmentLengths.length=e,this.geodesicPathSegmentLengths.length=e,this.perimeterSegmentLengths.length=e,this._length=e);this._length<e;)this.positionsWorldCoords.push(C()),this.positionsRenderCoords.push(C()),this.positionsProjectedWorldCoords.push(h()),this.positionsFittedRenderCoords.push(C()),this.positionsGeographic.push(C()),this.positionsSpherical.push(C()),this.positionsStereographic.push(h()),this.pathSegmentLengths.push(0),this.geodesicPathSegmentLengths.push(0),this.perimeterSegmentLengths.push(0),++this._length}_updatePathLengths(e){const t=this.positionsWorldCoords,s=this.pathSegmentLengths;let i=0;for(let o=0;o<this._length;++o){const r=s[o]=d(t[o],t[(o+1)%this._length]);(o<this._length-1||e)&&(i+=r)}return i}_updateGeodesicPathLengths(e,t){const s=this.positionsGeographic,i=this.geodesicPathSegmentLengths;let o=0;for(let r=0;r<this._length;++r){const n=i[r]=G(s[r],s[(r+1)%this._length],t);(r<this._length-1||e)&&(o+=n)}return o}_updateArea(e,t,s,n,h){const a=e.renderCoordsHelper,d=this.positionsWorldCoords,C=this.positionsRenderCoords,f=this.positionsProjectedWorldCoords,S=this.positionsFittedRenderCoords,L=this._planeWorldCoords,P=this._centroidRenderCoords;x(C,P),a.worldUpAtPosition(P,this._worldUp),a.worldBasisAtPosition(P,w.X,this._worldTangent),j(P,this._worldUp,s,this._worldUp,n),j(P,this._worldTangent,s,this._worldTangent,n),d.length>2&&V(d,L),this.fittingMode=this._selectFittingMode(L,d,this._worldUp,h);let R=0;if("horizontal"===this.fittingMode){let e=-1/0;C.forEach(((t,s)=>{const i=a.getAltitude(C[s]);i>e&&(e=i,R=s)}))}const A=d[R];let W=L,v=this._worldTangent;"horizontal"===this.fittingMode?W=this._worldUp:"vertical"===this.fittingMode&&(W=this._tempVec3,v=this._worldUp,q(L,this._worldUp,W)),g(this._frame[2],W),q(v,W,this._frame[0]),l(this._frame[1],this._frame[0],this._frame[2]),p(this._frame[1],this._frame[1]);const z=this._tempVec3,I=this._tempU,U=this._tempV;for(let i=0;i<this._length;++i){const e=f[i],t=S[i];c(z,d[i],A),r(e,m(this._frame[0],z),m(this._frame[1],z)),u(I,this._frame[0],e[0]),u(U,this._frame[1],e[1]),_(z,I,U),_(z,z,A),M(z,n,t,s)}this.perimeterLength=this._length>0?i(t.normalizeDistance(this._updatePerimeterLengths()),"meters"):null,x(S,this.areaCentroidRenderCoords),M(this.areaCentroidRenderCoords,s,this.areaCentroidWorldCoords,n),this._updateIntersectingSegments(),this.area=0===this.intersectingSegments.size?o(t.normalizeArea(this._computeArea()),"square-meters"):null}_updateGeodesicArea(e){const{renderCoordsHelper:t,spatialReference:s}=e,{positionsSpherical:i,positionsStereographic:n}=this,h=this._tempVec3,a=y(i,h);if(!a)return void(this.geodesicArea=null);const d=this._tempU,g=this._tempV;D(h,d,g);for(let o=0;o<this._length;++o){const e=m(i[o],d),t=m(i[o],g),s=m(i[o],h);r(n[o],e/s,t/s)}u(h,h,W(s).radius),t.toRenderCoords(h,A(s),this.geodesicAreaCentroidRenderCoords),this._updateGeodesicIntersectingSegments(),this.geodesicArea=a&&0===this.geodesicIntersectingSegments.size?o(this._computeGeodesicArea(),"square-meters"):null}_updatePerimeterLengths(){const e=this.positionsProjectedWorldCoords,t=this.perimeterSegmentLengths;let s=0;for(let i=0;i<this._length;++i){s+=t[i]=n(e[i],e[(i+1)%this._length])}return s}_updateIntersectingSegments(){const e=this.positionsProjectedWorldCoords,t=this.intersectingSegments;t.clear();for(let s=0;s<this._length;++s)for(let i=s+2;i<this._length;++i){if((i+1)%this._length===s)continue;const o=e[s],r=e[(s+1)%this._length],n=e[i],h=e[(i+1)%this._length];z(o,r,n,h)&&(t.add(s),t.add(i))}}_computeArea(){const e=this.positionsProjectedWorldCoords,t=this.triangleIndices=B(H(e));let s=0;for(let i=0;i<t.length;i+=3)s+=I(e[t[i]],e[t[i+1]],e[t[i+2]]);return s}_updateGeodesicIntersectingSegments(){const e=this.positionsStereographic,t=this.geodesicIntersectingSegments;t.clear();for(let s=0;s<this._length;++s)for(let i=s+2;i<this._length;++i){if((i+1)%this._length===s)continue;const o=e[s],r=e[(s+1)%this._length],n=e[i],h=e[(i+1)%this._length];z(o,r,n,h)&&(t.add(s),t.add(i))}}_computeGeodesicArea(){const e=this.positionsGeographic,t=this.positionsStereographic,s=this.geodesicTriangleIndices=B(H(t));let i=0;for(let o=0;o<s.length;o+=3)i+=T(e[s[o]],e[s[o+1]],e[s[o+2]],v.WGS84);return i}_selectFittingMode(t,s,i,o){const r=s.map((e=>Math.abs(F(t,e)))).reduce(((e,t)=>Math.max(e,t)),0);b(s,this._tempSphere);const n=r/(2*this._tempSphere.radius),h=n<o.maxRelativeErrorCoplanar,a=n<o.maxRelativeErrorAlmostCoplanar;let d="horizontal";if(h)d="oblique";else if(a){d=Math.abs(m(i,t))>Math.cos(e(o.verticalAngleThreshold))?"horizontal":"vertical"}return d}_updateCursorSegmentLength(e,s){const o=e.lastPoint;!e.isValidPolygon&&t(o)&&t(s)?(this.geodesicCursorSegmentLength=i(E(o,s),"meters"),this.cursorSegmentLength=i(this.unitNormalizer.normalizeDistance(N(o,s,this.unitNormalizer.spatialReference)),"meters")):(this.geodesicCursorSegmentLength=null,this.cursorSegmentLength=null)}_updateMode(e,s){if(s===U.Auto){this.actualMeasurementMode="euclidean";let s=0;null!=this.geodesicPathLength&&(s+=this.geodesicPathLength.value),!e.isValidPolygon&&t(this.geodesicCursorSegmentLength)&&(s+=this.geodesicCursorSegmentLength.value),s>J&&(this.actualMeasurementMode="geodesic")}else this.actualMeasurementMode=s===U.Euclidean?"euclidean":"geodesic";null==this.geodesicPathLength&&(this.actualMeasurementMode="euclidean"),this._mode=s}}function Z(e,t){t.hasZ||(t.z=s(k(e,t,"ground"),0))}const J=1e5;export{X as MeasurementDataManager};
|
|
5
|
+
import{deg2rad as e}from"../../../../../core/mathUtils.js";import{isSome as t,unwrapOr as s}from"../../../../../core/maybe.js";import{createLength as i,createArea as o}from"../../../../../core/quantityUtils.js";import{s as r,d as n}from"../../../../../chunks/vec2.js";import{a as h}from"../../../../../chunks/vec2f64.js";import{n as a,i as d,c as g,f as l,x as p,b as c,e as m,g as u,a as _}from"../../../../../chunks/vec3.js";import{c as C}from"../../../../../chunks/vec3f64.js";import{c as f}from"../../../../../chunks/vec4f64.js";import{canProjectWithoutEngine as S,canProjectToWGS84ComparableLonLat as L,projectPointToVector as P,projectPointToWGS84ComparableLonLat as R,projectDirection as j,projectVectorToVector as M}from"../../../../../geometry/projection.js";import{getSphericalPCPF as A,getReferenceEllipsoid as W}from"../../../../../geometry/projectionEllipsoid.js";import v from"../../../../../geometry/SpatialReference.js";import{Axis as w}from"../../../../../geometry/support/Axis.js";import{segmentIntersects as z}from"../../../../../geometry/support/intersectsBase.js";import{areaPoints2d as I}from"../../../../../geometry/support/triangle.js";import{MeasurementMode as U}from"../../interfaces.js";import{segmentLengthGeodesicVector as G,bestFitPlane as V,fitHemisphere as y,triangleAreaGeodesic as T,planePointDistance as F,boundingSphere as b,segmentLengthGeodesic as x,segmentLengthEuclidean as E}from"../../support/measurementUtils.js";import{midpoint as N}from"../../support/viewUtils.js";import{getElevationAtPoint as k}from"../../../support/ElevationProvider.js";import{makeOrthonormal as q,tangentFrame as D}from"../../../support/mathUtils.js";import{compactIndices as B}from"../../../webgl-engine/lib/Indices.js";import{triangulate as H}from"../../../../support/euclideanAreaMeasurementUtils.js";class X{constructor(e,t){this.positionsWorldCoords=[],this.positionsRenderCoords=[],this.positionsProjectedWorldCoords=[],this.positionsFittedRenderCoords=[],this.positionsGeographic=[],this.positionsSpherical=[],this.positionsStereographic=[],this.pathSegmentLengths=[],this.geodesicPathSegmentLengths=[],this.perimeterSegmentLengths=[],this.intersectingSegments=new Set,this.geodesicIntersectingSegments=new Set,this.areaCentroidWorldCoords=C(),this.areaCentroidRenderCoords=C(),this.geodesicAreaCentroidRenderCoords=C(),this._length=0,this._centroidRenderCoords=C(),this._planeWorldCoords=f(),this._worldUp=C(),this._worldTangent=C(),this._frame=[C(),C(),C()],this._pathVersion=-1,this._validMeasurement=!1,this._hasCursorPoint=!1,this._mode=null,this._tempU=C(),this._tempV=C(),this._tempVec3=C(),this._tempSphere={center:C(),radius:0},this._sceneView=e,this.unitNormalizer=t}update(e,s,o,r,n,h,d){const g=this.unitNormalizer,l=this._sceneView.renderSpatialReference,p=this.unitNormalizer.spatialReference,c=t(s);if(this._pathVersion===e.version&&this._validMeasurement===r&&!d&&this._hasCursorPoint===c&&this._mode===h){return!e.isValidPolygon&&(this._updateCursorSegmentLength(e,s),!0)}this._pathVersion=e.version,this._validMeasurement=r,this._hasCursorPoint=c;const m=e.numVertices;this._resize(m);const u=A(o.spatialReference),_=S(o.spatialReference,u)&&L(o.spatialReference),{positionsGeographic:C,positionsWorldCoords:f,positionsRenderCoords:j,positionsSpherical:M}=this;e.forEachVertexPosition(((e,t)=>{Z(o.elevationProvider,e),P(e,f[t],p),P(e,j[t],l),_&&(R(e,C[t]),P(e,M[t],u),a(M[t],M[t]))}));const W=this._updatePathLengths(r);if(this.pathLength=this._length>1?i(g.normalizeDistance(W),"meters"):null,_){const e=this._updateGeodesicPathLengths(r,p);this.geodesicPathLength=this._length>1?i(e,"meters"):null}else this.geodesicPathLength=null;return this._updateCursorSegmentLength(e,s),this._updateMode(e,h),r?(this._updateArea(o,g,l,p,n),_&&this._updateGeodesicArea(o),!0):(this.area=null,this.geodesicArea=null,this.perimeterLength=null,this.triangleIndices=null,this.geodesicTriangleIndices=null,this.intersectingSegments.clear(),this.geodesicIntersectingSegments.clear(),!0)}getData(){return{positionsWorldCoords:this.positionsWorldCoords,positionsRenderCoords:this.positionsRenderCoords,positionsProjectedWorldCoords:this.positionsProjectedWorldCoords,positionsFittedRenderCoords:this.positionsFittedRenderCoords,positionsGeographic:this.positionsGeographic,positionsSpherical:this.positionsSpherical,positionsStereographic:this.positionsStereographic,pathSegmentLengths:this.pathSegmentLengths,geodesicPathSegmentLengths:this.geodesicPathSegmentLengths,perimeterSegmentLengths:this.perimeterSegmentLengths,intersectingSegments:this.intersectingSegments,geodesicIntersectingSegments:this.geodesicIntersectingSegments,triangleIndices:this.triangleIndices,geodesicTriangleIndices:this.geodesicTriangleIndices,areaCentroidWorldCoords:this.areaCentroidWorldCoords,areaCentroidRenderCoords:this.areaCentroidRenderCoords,geodesicAreaCentroidRenderCoords:this.geodesicAreaCentroidRenderCoords,fittingMode:this.fittingMode,area:this.area,geodesicArea:this.geodesicArea,pathLength:this.pathLength,geodesicPathLength:this.geodesicPathLength,perimeterLength:this.perimeterLength,cursorSegmentLength:this.cursorSegmentLength,geodesicCursorSegmentLength:this.geodesicCursorSegmentLength,unitNormalizer:this.unitNormalizer,actualMeasurementMode:this.actualMeasurementMode}}_resize(e){for(e<this._length&&(this.positionsWorldCoords.length=e,this.positionsRenderCoords.length=e,this.positionsProjectedWorldCoords.length=e,this.positionsFittedRenderCoords.length=e,this.positionsGeographic.length=e,this.positionsSpherical.length=e,this.positionsStereographic.length=e,this.pathSegmentLengths.length=e,this.geodesicPathSegmentLengths.length=e,this.perimeterSegmentLengths.length=e,this._length=e);this._length<e;)this.positionsWorldCoords.push(C()),this.positionsRenderCoords.push(C()),this.positionsProjectedWorldCoords.push(h()),this.positionsFittedRenderCoords.push(C()),this.positionsGeographic.push(C()),this.positionsSpherical.push(C()),this.positionsStereographic.push(h()),this.pathSegmentLengths.push(0),this.geodesicPathSegmentLengths.push(0),this.perimeterSegmentLengths.push(0),++this._length}_updatePathLengths(e){const t=this.positionsWorldCoords,s=this.pathSegmentLengths;let i=0;for(let o=0;o<this._length;++o){const r=s[o]=d(t[o],t[(o+1)%this._length]);(o<this._length-1||e)&&(i+=r)}return i}_updateGeodesicPathLengths(e,t){const s=this.positionsGeographic,i=this.geodesicPathSegmentLengths;let o=0;for(let r=0;r<this._length;++r){const n=i[r]=G(s[r],s[(r+1)%this._length],t);(r<this._length-1||e)&&(o+=n)}return o}_updateArea(e,t,s,n,h){const a=e.renderCoordsHelper,d=this.positionsWorldCoords,C=this.positionsRenderCoords,f=this.positionsProjectedWorldCoords,S=this.positionsFittedRenderCoords,L=this._planeWorldCoords,P=this._centroidRenderCoords;N(C,P),a.worldUpAtPosition(P,this._worldUp),a.worldBasisAtPosition(P,w.X,this._worldTangent),j(P,this._worldUp,s,this._worldUp,n),j(P,this._worldTangent,s,this._worldTangent,n),d.length>2&&V(d,L),this.fittingMode=this._selectFittingMode(L,d,this._worldUp,h);let R=0;if("horizontal"===this.fittingMode){let e=-1/0;C.forEach(((t,s)=>{const i=a.getAltitude(C[s]);i>e&&(e=i,R=s)}))}const A=d[R];let W=L,v=this._worldTangent;"horizontal"===this.fittingMode?W=this._worldUp:"vertical"===this.fittingMode&&(W=this._tempVec3,v=this._worldUp,q(L,this._worldUp,W)),g(this._frame[2],W),q(v,W,this._frame[0]),l(this._frame[1],this._frame[0],this._frame[2]),p(this._frame[1],this._frame[1]);const z=this._tempVec3,I=this._tempU,U=this._tempV;for(let i=0;i<this._length;++i){const e=f[i],t=S[i];c(z,d[i],A),r(e,m(this._frame[0],z),m(this._frame[1],z)),u(I,this._frame[0],e[0]),u(U,this._frame[1],e[1]),_(z,I,U),_(z,z,A),M(z,n,t,s)}this.perimeterLength=this._length>0?i(t.normalizeDistance(this._updatePerimeterLengths()),"meters"):null,N(S,this.areaCentroidRenderCoords),M(this.areaCentroidRenderCoords,s,this.areaCentroidWorldCoords,n),this._updateIntersectingSegments(),this.area=0===this.intersectingSegments.size?o(t.normalizeArea(this._computeArea()),"square-meters"):null}_updateGeodesicArea(e){const{renderCoordsHelper:t,spatialReference:s}=e,{positionsSpherical:i,positionsStereographic:n}=this,h=this._tempVec3,a=y(i,h);if(!a)return void(this.geodesicArea=null);const d=this._tempU,g=this._tempV;D(h,d,g);for(let o=0;o<this._length;++o){const e=m(i[o],d),t=m(i[o],g),s=m(i[o],h);r(n[o],e/s,t/s)}u(h,h,W(s).radius),t.toRenderCoords(h,A(s),this.geodesicAreaCentroidRenderCoords),this._updateGeodesicIntersectingSegments(),this.geodesicArea=a&&0===this.geodesicIntersectingSegments.size?o(this._computeGeodesicArea(),"square-meters"):null}_updatePerimeterLengths(){const e=this.positionsProjectedWorldCoords,t=this.perimeterSegmentLengths;let s=0;for(let i=0;i<this._length;++i){s+=t[i]=n(e[i],e[(i+1)%this._length])}return s}_updateIntersectingSegments(){const e=this.positionsProjectedWorldCoords,t=this.intersectingSegments;t.clear();for(let s=0;s<this._length;++s)for(let i=s+2;i<this._length;++i){if((i+1)%this._length===s)continue;const o=e[s],r=e[(s+1)%this._length],n=e[i],h=e[(i+1)%this._length];z(o,r,n,h)&&(t.add(s),t.add(i))}}_computeArea(){const e=this.positionsProjectedWorldCoords,t=this.triangleIndices=B(H(e));let s=0;for(let i=0;i<t.length;i+=3)s+=I(e[t[i]],e[t[i+1]],e[t[i+2]]);return s}_updateGeodesicIntersectingSegments(){const e=this.positionsStereographic,t=this.geodesicIntersectingSegments;t.clear();for(let s=0;s<this._length;++s)for(let i=s+2;i<this._length;++i){if((i+1)%this._length===s)continue;const o=e[s],r=e[(s+1)%this._length],n=e[i],h=e[(i+1)%this._length];z(o,r,n,h)&&(t.add(s),t.add(i))}}_computeGeodesicArea(){const e=this.positionsGeographic,t=this.positionsStereographic,s=this.geodesicTriangleIndices=B(H(t));let i=0;for(let o=0;o<s.length;o+=3)i+=T(e[s[o]],e[s[o+1]],e[s[o+2]],v.WGS84);return i}_selectFittingMode(t,s,i,o){const r=s.map((e=>Math.abs(F(t,e)))).reduce(((e,t)=>Math.max(e,t)),0);b(s,this._tempSphere);const n=r/(2*this._tempSphere.radius),h=n<o.maxRelativeErrorCoplanar,a=n<o.maxRelativeErrorAlmostCoplanar;let d="horizontal";if(h)d="oblique";else if(a){d=Math.abs(m(i,t))>Math.cos(e(o.verticalAngleThreshold))?"horizontal":"vertical"}return d}_updateCursorSegmentLength(e,s){const o=e.lastPoint;!e.isValidPolygon&&t(o)&&t(s)?(this.geodesicCursorSegmentLength=i(x(o,s),"meters"),this.cursorSegmentLength=i(this.unitNormalizer.normalizeDistance(E(o,s,this.unitNormalizer.spatialReference)),"meters")):(this.geodesicCursorSegmentLength=null,this.cursorSegmentLength=null)}_updateMode(e,s){if(s===U.Auto){this.actualMeasurementMode="euclidean";let s=0;null!=this.geodesicPathLength&&(s+=this.geodesicPathLength.value),!e.isValidPolygon&&t(this.geodesicCursorSegmentLength)&&(s+=this.geodesicCursorSegmentLength.value),s>J&&(this.actualMeasurementMode="geodesic")}else this.actualMeasurementMode=s===U.Euclidean?"euclidean":"geodesic";null==this.geodesicPathLength&&(this.actualMeasurementMode="euclidean"),this._mode=s}}function Z(e,t){t.hasZ||(t.z=s(k(e,t,"ground"),0))}const J=1e5;export{X as MeasurementDataManager};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../Color.js";import"../../../../geometry.js";import{LengthDimensionAxis as i,LengthDimensionOffsetDirection as n}from"../../../../analysis/dimensionUtils.js";import a from"../../../../analysis/LengthDimension.js";import"../../../../core/has.js";import{HandleOwner as s}from"../../../../core/HandleOwner.js";import o from"../../../../core/Handles.js";import{equals as r}from"../../../../core/lang.js";import{rad2deg as p}from"../../../../core/mathUtils.js";import{isNone as d,applySome as l,isSome as c,destroyMaybe as m,unwrapOr as u}from"../../../../core/maybe.js";import{ignoreAbortErrors as h}from"../../../../core/promiseUtils.js";import{watch as g,sync as f,syncAndInitial as _}from"../../../../core/reactiveUtils.js";import{pt2px as y}from"../../../../core/screenUtils.js";import{property as v}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as M}from"../../../../core/accessorSupport/decorators/subclass.js";import{k as S}from"../../../../chunks/mat4.js";import{c as w}from"../../../../chunks/mat4f64.js";import{g as C,b as x,f as j,c as P,e as D,l as b,s as H,p as O}from"../../../../chunks/vec3.js";import{c as R,Z as V,f as T}from"../../../../chunks/vec3f64.js";import{fromPositionAndNormal as k,create as U,signedDistance as z,normal as G}from"../../../../geometry/support/plane.js";import{sv3d as A}from"../../../../geometry/support/vectorStacks.js";import{clonePoint as F}from"../../../../layers/graphics/hydratedFeatures.js";import{directUp as I,headingFromGeometry as E,directStartToEnd as L,dimensionStartToEnd as W}from"./lengthDimensionUtils.js";import{settings as B}from"./settings.js";import{getRotateHeadingTexture as q}from"../Slice/images/Factory.js";import{Manipulator3D as N}from"../../interactive/Manipulator3D.js";import{createSphereManipulator as Z,createRotateManipulator as J,calculateInputRotationTransform as K,calculateTranslateRotateFromBases as Q}from"../../interactive/manipulatorUtils.js";import{SnappingVisualizer3D as X}from"../../interactive/SnappingVisualizer3D.js";import{screenToMap3D as Y,screenToRenderPlane as $,hideManipulatorWhileDragging as tt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{LineVisualElement as et}from"../../interactive/visualElements/LineVisualElement.js";import{createPolylineGeometry as it}from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as nt}from"../../webgl-engine/lib/Material.js";import{createStipplePatternSimple as at}from"../../webgl-engine/materials/lineStippleUtils.js";import{RibbonLineMaterial as st}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{createCoordinateHelper as ot}from"../../../interactive/coordinateHelper.js";import{createManipulatorDragEventPipeline as rt,resetProperties as pt}from"../../../interactive/dragEventPipeline.js";import{ManipulatorStateFlags as dt}from"../../../interactive/interfaces.js";import{EditGeometry as lt}from"../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as ct}from"../../../interactive/editGeometry/EditGeometryOperations.js";import{acquire as mt}from"../../../interactive/snapping/SceneSnappingManagerPool.js";import{SnappingContext as ut}from"../../../interactive/snapping/SnappingContext.js";import{SnappingPipeline as ht}from"../../../interactive/snapping/SnappingDragPipelineStep.js";import{SnappingOperation as gt}from"../../../interactive/snapping/SnappingOperation.js";import ft from"../../../../geometry/Point.js";let _t=class extends s{constructor(t){super(t),this._stagedDimension=null,this._computationManipulators=new Map,this._computationHandles=new o,this._snappingPipeline=new ht,this._snappingManagerResult=mt(t.view),this.addHandles(this._snappingManagerResult),this._unfocusedOffsetManipulatorMaterial=Dt(),this._focusedOffsetManipulatorMaterial=Dt(),this._updateManipulatorStyle(t.analysis.lineWidth),this._constraintSnappingIndicator=new et({view:t.view,attached:!0,width:1,color:e.toUnitRGBA(B.constraint.color),renderOccluded:nt.OccludeAndTransparent,stipplePattern:at(5)})}initialize(){this._snappingOperation=new gt({view:this.view}),this._rotateManipulatorTexture=q(this.view.toolViewManager.textures);const{computations:t}=this.analysisViewData;for(const e of t)this._addComputation(e);this.addHandles([t.on("after-add",(t=>this._addComputation(t.item))),t.on("after-remove",(t=>this._removeComputation(t.item)))]),this.addHandles([g((()=>({stagedPoint:this._snappingOperation.stagedPoint,stagedComputation:this._stagedComputation})),(({stagedPoint:t,stagedComputation:e})=>{if(d(e))return;const{dimension:i}=e;i.endPoint=l(t,(t=>F(t,new ft))),this._applyConstraint(e),this._updateHeadingFromCamera(e)}),f),g((()=>this._stagedDimension),(()=>{for(const[t,e]of this._computationManipulators)this._updateManipulators(t.geometry,t.dimension,e)}),_),g((()=>this.analysisViewData.selectedComputation),((t,e)=>{for(const i of[t,e])if(c(i)){const t=this._computationManipulators.get(i);this._updateManipulators(i.geometry,i.dimension,t)}}),_),g((()=>this.analysis.lineWidth),(t=>{this._updateManipulatorStyle(t)}))]),this.addHandles(this._constraintHandles),this.addHandles(this._snappingIndicatorHandles)}destroy(){this._snappingOperation=m(this._snappingOperation),this._computationHandles.destroy(),this._constraintSnappingIndicator.destroy()}get updating(){return this.updatingHandles.updating||this._snappingManager.updating}get hasGrabbedManipulators(){return this.parentTool.hasGrabbedManipulators}get _snappingManager(){return this._snappingManagerResult.snappingManager}get _activeComputation(){if(c(this._stagedComputation))return this._stagedComputation;const{selectedComputation:t}=this.analysisViewData;return this.hasGrabbedManipulators&&c(t)?t:null}get _stagedComputation(){const t=this._stagedDimension,e=this.analysisViewData.computations.at(-1);return d(t)||d(e)||e.dimension!==t?null:e}get _constraintHandles(){return[g((()=>{const t=this._activeComputation;if(d(t))return null;const{axis:e,offsetDirection:i}=t.dimension;return{axis:e,offsetDirection:i,computation:t}}),((t,e)=>{if(c(t)&&d(e)){const{axis:e,computation:i}=t;i.userSetAxis=e}if(d(t)&&c(e)){const{computation:t}=e;t.userSetAxis=null}}),f)]}get _snappingIndicatorHandles(){const t="snapping-indicator-event-handles";return[g((()=>({stagedComputation:this._stagedComputation,activeComputation:this._activeComputation})),(({stagedComputation:e,activeComputation:i})=>{const n=this._constraintSnappingIndicator;if(this.removeHandles(t),d(i))n.attached=!1;else if(i===e)n.attached=!0;else{const{start:e,end:a}=this._computationManipulators.get(i),s=()=>{n.attached=e.grabbing||a.grabbing};s(),this.addHandles([e.events.on("grab-changed",s),a.events.on("grab-changed",s)],t)}})),g((()=>{const t=this._activeComputation;return c(t)?t.geometry:null}),(t=>{const e=this._constraintSnappingIndicator;c(t)&&c(Ht(t,this.view))?(e.visible=!0,e.setGeometryFromSegment(t.directSegment)):e.visible=!1}),{equals:r})]}removeStaged(){c(this._stagedDimension)&&(this.analysis.dimensions.remove(this._stagedDimension),this._stagedDimension=null)}onDeactivate(){this.removeStaged(),this._snappingManager.doneSnapping()}onClick(t){const{_stagedDimension:e}=this;if(d(e)){const e=this._onUnstagedClick(t);return this.analysis.dimensions.add(e),null}return this._onStagedClick(t),e}onPointerMove({mapPoint:t,pointerType:e}){if("touch"===e)return;const i=this._snappingContext(e);this.updatingHandles.addPromise(h(this._snappingOperation.snap(t,this._snappingManager,i)))}onManipulatorSelectionChanged(){if(c(this.analysisViewData.selectedComputation)){this._computationManipulators.get(this.analysisViewData.selectedComputation).offset.selected||(this.analysisViewData.selectedDimension=null)}}_onUnstagedClick({mapPoint:t,pointerType:e}){const i="mouse"===e?u(this._snappingOperation.stagedPoint,t):t,n=new a({startPoint:F(i,new ft),endPoint:null});return this._stagedDimension=n,this._snappingManager.doneSnapping(),n}_onStagedClick({mapPoint:t,pointerType:e}){const i=this._stagedComputation;if(d(i))return;const n="mouse"===e?u(this._snappingOperation.stagedPoint,t):t;i.dimension.endPoint=F(n,new ft),this._applyConstraint(i),this._stagedDimension=null,this._snappingManager.doneSnapping()}_addComputation(t){if(this._computationManipulators.has(t))return;const e=this._createPointManipulator(t,{isStart:!0}),i=this._createPointManipulator(t,{isStart:!1}),n=this._createOffsetManipulator(t),a=this._createHeadingManipulator(t),s=new yt({start:e,end:i,offset:n,heading:a});this._setupComputationToManipulatorsSync(t,s),this._computationManipulators.set(t,s),this.manipulators.addMany(s.values())}_removeComputation(t){const e=this._computationManipulators.get(t);if(!d(e)){this._computationHandles.remove(t),this._computationManipulators.delete(t);for(const t of e.values())this.manipulators.remove(t)}}_setupComputationToManipulatorsSync(t,e){const{dimension:i}=t;this._computationHandles.add([g((()=>t.geometry),(t=>{this._updateManipulators(t,i,e)}),{..._,equals:r})],t)}_createPointManipulator(t,i){const{dimension:n}=t,{isStart:a}=i,s=a?"startPoint":"endPoint",o=Z(this.view,e.toUnitRGB(B.pointManipulators.color),B.pointManipulators.opacity);o.available=!1,o.radius=B.pointManipulators.radius,o.metadata=t.dimension,o.collisionPriority=1;const r=rt(o,((e,i,a,o)=>{const r=tt(e);i.next(r).next(Y(this.view)).next(this._snappingPipeline.createSnapDragEventPipelineStep({snappingContext:this._snappingContext(o),snappingManager:this._snappingManager,cancel:a,updatingHandles:this.updatingHandles}),this._snappingPipeline.next).next((e=>{const i=F(e.mapEnd,new ft);n[s]=i,this._applyConstraint(t),this._updateHeadingFromCamera(t)})),a.next(r).next(pt(n,[s]))}));return this._computationHandles.add(r,t),o}_createOffsetManipulator(t){const e=[T(-.5,0,0),T(.5,0,0)],{lengthFraction:i}=B.offsetManipulator,n=it(e.map((t=>C(R(),t,i)))),a=new N({view:this.view,renderObjects:[{geometry:n,material:this._unfocusedOffsetManipulatorMaterial,stateMask:dt.Unfocused|dt.Selected},{geometry:n,material:this._focusedOffsetManipulatorMaterial,stateMask:dt.Focused|dt.Selected}],collisionType:{type:"line",paths:[e]},radius:this._focusedOffsetWidth(this.analysis.lineWidth)/2,focusMultiplier:1,available:!1,autoScaleRenderObjects:!1,worldSized:!0,metadata:t.dimension}),s=rt(a,((e,i,n)=>{if(d(t.geometry))return;const{dimensionSegment:a,primaryOffsetAxis:s}=t.geometry,o=x(A.get(),a.endRenderSpace,a.startRenderSpace);j(o,o,s);const r=k(a.startRenderSpace,o,U()),p=k(a.startRenderSpace,s,U()),{dimension:l}=t,c=l.offset;let m=0;const u=tt(e);i.next(u).next($(this.view,r)).next((t=>{"start"===t.action&&(m=z(p,t.renderStart));const e=(z(p,t.renderEnd)-m)*this.view.renderCoordsHelper.unitInMeters;l.offset=c+e})),n.next(u).next(pt(l,["offset"]))}));return this._computationHandles.add(s,t),a}_createHeadingManipulator(t){const e=J(this.view,this._rotateManipulatorTexture.texture);e.metadata=t.dimension;const i=rt(e,((e,i,n)=>{const{dimension:a,geometry:s}=t,{renderCoordsHelper:o}=this.view;if(d(s))return;const r=I(A.get(),s,o),l=R(),c=Ct(R(),s,s.directSegment,o),m=k(c,r,U()),h=u(a.heading,(()=>E(s,o)));i.next($(this.view,m)).next((t=>{"start"===t.action&&P(l,t.renderStart);const e=G(m),i=K(l,t.renderEnd,c,e);a.heading=h-p(i)})),n.next(pt(a,["heading"]))}));return this._computationHandles.add(i,t),e}_updateManipulators(t,e,a){const{start:s,end:o,offset:r,heading:p}=a,l=c(t),m=this.analysisViewData.selectedDimension===e,u=l&&d(this._stagedDimension);for(const d of a.values())d===r?(d.available=u,d.selected=m):d.available=d===p?u&&m&&e.axis===i.Vertical&&e.offsetDirection===n.Side:u&&m;u&&(s.renderLocation=t.directSegment.startRenderSpace,o.renderLocation=t.directSegment.endRenderSpace,vt(r,t),p.available&&Mt(p,t,e,this.view.renderCoordsHelper))}_updateManipulatorStyle(t){const e=this._unfocusedOffsetWidth(t),i=this._focusedOffsetWidth(t);for(const{offset:n}of this._computationManipulators.values())n.radius=i/2;this._unfocusedOffsetManipulatorMaterial.setParameters({width:e}),this._focusedOffsetManipulatorMaterial.setParameters({width:i})}_snappingContext(t){return new ut({elevationInfo:{mode:"absolute-height",offset:0},pointer:t,editGeometryOperations:new ct(new lt("point",ot(!0,!1,this.view.spatialReference))),visualizer:new X})}_unfocusedOffsetWidth(t){return y(t)+B.offsetManipulator.linePaddingPx}_focusedOffsetWidth(t){return y(t)+B.offsetManipulator.focusedLinePaddingPx}_applyConstraint(t){const{dimension:e,geometry:a}=t,{startPoint:s,endPoint:o}=e;if(d(a)||d(s)||d(o))return;const r=Ht(a,this.view);if(d(r))c(t.userSetAxis)&&(e.axis=t.userSetAxis),e.offsetDirection=n.Up;else{const a=this._computationManipulators.get(t),p=this._stagedDimension===e||a.end.grabbing?o:s,d=p.clone();switch(r){case bt.Horizontal:e.axis=i.Horizontal,p===s?(d.z=o.z,e.startPoint=d):(d.z=s.z,e.endPoint=d);break;case bt.Vertical:e.axis=i.Vertical,e.offsetDirection=n.Side,p===s?(d.x=o.x,d.y=o.y,e.startPoint=d):(d.x=s.x,d.y=s.y,e.endPoint=d)}}}_updateHeadingFromCamera(t){const{dimension:e,geometry:i}=t;if(d(i))return;if(Ht(i,this.view)===bt.Vertical)return;const{directSegment:n}=i,{renderCoordsHelper:a}=this.view,s=I(A.get(),i,a),o=L(A.get(),i),r=j(A.get(),o,s),{viewForward:p}=this.view.state.camera;D(r,p)>0&&C(r,r,-1);const l=n.eval(.5,A.get());e.heading=a.headingAtPosition(l,r)}get testInfo(){return{getManipulatorsForDimension:t=>{for(const[e,i]of this._computationManipulators.entries())if(t===e.dimension)return i;return null},getComputationForDimension:t=>{for(const e of this._computationManipulators.keys())if(t===e.dimension)return e;return null},stagedDimension:this._stagedDimension,constraintSnappingIndicator:this._constraintSnappingIndicator}}};t([v({constructOnly:!0})],_t.prototype,"analysis",void 0),t([v({constructOnly:!0})],_t.prototype,"analysisViewData",void 0),t([v({constructOnly:!0})],_t.prototype,"manipulators",void 0),t([v({constructOnly:!0})],_t.prototype,"parentTool",void 0),t([v({constructOnly:!0,nonNullable:!0})],_t.prototype,"view",void 0),t([v({readOnly:!0})],_t.prototype,"updating",null),t([v()],_t.prototype,"hasGrabbedManipulators",null),t([v()],_t.prototype,"_stagedDimension",void 0),t([v()],_t.prototype,"_activeComputation",null),t([v()],_t.prototype,"_stagedComputation",null),_t=t([M("esri.views.3d.analysis.Dimensioning.LengthDimensionSubTool")],_t);class yt{constructor(t){this.start=t.start,this.end=t.end,this.offset=t.offset,this.heading=t.heading}values(){return[this.start,this.end,this.offset,this.heading]}}function vt(t,e){const{dimensionSegment:i,primaryOffsetAxis:n}=e,a=W(Ot,e),s=Q(a,n,V,Rt),o=b(a);S(s,s,H(Ot,o,o,o)),t.modelTransform=s,t.renderLocation=i.eval(.5,Ot)}function Mt(t,e,i,n){const{primaryOffsetAxis:a}=e;C(St,a,i.offset>=0?1:-1),W(wt,e),j(wt,wt,St);const s=Q(St,wt,V,Rt);t.modelTransform=s,t.renderLocation=Ct(Ot,e,e.dimensionSegment,n)}const St=R(),wt=R();function Ct(t,e,i,n){const{startRenderSpace:a,endRenderSpace:s}=i,o=xt(e,n)?a:s;return P(t,o)}function xt(t,e){const i=L(jt,t),n=I(Pt,t,e);return D(i,n)>0}const jt=R(),Pt=R();function Dt(){const{color:t,opacity:i}=B.offsetManipulator;return new st({color:[...e.toUnitRGB(t),i],width:1,renderOccluded:nt.OccludeAndTransparent,writeDepth:!1,hasPolygonOffset:!0})}var bt;function Ht(t,e){const{directSegment:i}=t,{constraintThresholdPx:n}=B,{camera:a}=e.state,s=I(A.get(),t,e.renderCoordsHelper),o=L(A.get(),t),r=C(A.get(),s,D(o,s)),p=x(A.get(),o,r),d=O(p),l=O(r),{startRenderSpace:c,endRenderSpace:m}=i,u=Math.max(a.computeRenderPixelSizeAt(c)*n,a.computeRenderPixelSizeAt(m)*n)**2;return d<u?bt.Vertical:l<u?bt.Horizontal:null}!function(t){t[t.Horizontal=0]="Horizontal",t[t.Vertical=1]="Vertical"}(bt||(bt={}));const Ot=R(),Rt=w();export{yt as LengthDimensionManipulators,_t as LengthDimensionSubTool};
|
|
5
|
+
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../Color.js";import"../../../../geometry.js";import{LengthDimensionAxis as i,LengthDimensionOffsetDirection as n}from"../../../../analysis/dimensionUtils.js";import a from"../../../../analysis/LengthDimension.js";import"../../../../core/has.js";import{HandleOwner as s}from"../../../../core/HandleOwner.js";import o from"../../../../core/Handles.js";import{equals as r}from"../../../../core/lang.js";import{rad2deg as p}from"../../../../core/mathUtils.js";import{isNone as d,applySome as l,isSome as c,destroyMaybe as m,unwrapOr as u}from"../../../../core/maybe.js";import{ignoreAbortErrors as h}from"../../../../core/promiseUtils.js";import{watch as g,sync as f,syncAndInitial as _}from"../../../../core/reactiveUtils.js";import{pt2px as y}from"../../../../core/screenUtils.js";import{property as v}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as M}from"../../../../core/accessorSupport/decorators/subclass.js";import{k as S}from"../../../../chunks/mat4.js";import{c as w}from"../../../../chunks/mat4f64.js";import{g as C,b as x,f as j,c as P,e as D,l as b,s as H,z as O}from"../../../../chunks/vec3.js";import{c as R,Z as V,f as T}from"../../../../chunks/vec3f64.js";import{fromPositionAndNormal as k,create as z,signedDistance as U,normal as G}from"../../../../geometry/support/plane.js";import{sv3d as A}from"../../../../geometry/support/vectorStacks.js";import{clonePoint as F}from"../../../../layers/graphics/hydratedFeatures.js";import{directUp as I,headingFromGeometry as E,directStartToEnd as L,dimensionStartToEnd as W}from"./lengthDimensionUtils.js";import{settings as B}from"./settings.js";import{getRotateHeadingTexture as q}from"../Slice/images/Factory.js";import{Manipulator3D as N}from"../../interactive/Manipulator3D.js";import{createSphereManipulator as Z,createRotateManipulator as J,calculateInputRotationTransform as K,calculateTranslateRotateFromBases as Q}from"../../interactive/manipulatorUtils.js";import{SnappingVisualizer3D as X}from"../../interactive/SnappingVisualizer3D.js";import{screenToMap3D as Y,screenToRenderPlane as $,hideManipulatorWhileDragging as tt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{LineVisualElement as et}from"../../interactive/visualElements/LineVisualElement.js";import{createPolylineGeometry as it}from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as nt}from"../../webgl-engine/lib/Material.js";import{createStipplePatternSimple as at}from"../../webgl-engine/materials/lineStippleUtils.js";import{RibbonLineMaterial as st}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{createCoordinateHelper as ot}from"../../../interactive/coordinateHelper.js";import{createManipulatorDragEventPipeline as rt,resetProperties as pt}from"../../../interactive/dragEventPipeline.js";import{ManipulatorStateFlags as dt}from"../../../interactive/interfaces.js";import{EditGeometry as lt}from"../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as ct}from"../../../interactive/editGeometry/EditGeometryOperations.js";import{acquire as mt}from"../../../interactive/snapping/SceneSnappingManagerPool.js";import{SnappingContext as ut}from"../../../interactive/snapping/SnappingContext.js";import{SnappingPipeline as ht}from"../../../interactive/snapping/SnappingDragPipelineStep.js";import{SnappingOperation as gt}from"../../../interactive/snapping/SnappingOperation.js";import ft from"../../../../geometry/Point.js";let _t=class extends s{constructor(t){super(t),this._stagedDimension=null,this._computationManipulators=new Map,this._computationHandles=new o,this._snappingPipeline=new ht,this._snappingManagerResult=mt(t.view),this.addHandles(this._snappingManagerResult),this._unfocusedOffsetManipulatorMaterial=Dt(),this._focusedOffsetManipulatorMaterial=Dt(),this._updateManipulatorStyle(t.analysis.lineWidth),this._constraintSnappingIndicator=new et({view:t.view,attached:!0,width:1,color:e.toUnitRGBA(B.constraint.color),renderOccluded:nt.OccludeAndTransparent,stipplePattern:at(5)})}initialize(){this._snappingOperation=new gt({view:this.view}),this._rotateManipulatorTexture=q(this.view.toolViewManager.textures);const{computations:t}=this.analysisViewData;for(const e of t)this._addComputation(e);this.addHandles([t.on("after-add",(t=>this._addComputation(t.item))),t.on("after-remove",(t=>this._removeComputation(t.item)))]),this.addHandles([g((()=>({stagedPoint:this._snappingOperation.stagedPoint,stagedComputation:this._stagedComputation})),(({stagedPoint:t,stagedComputation:e})=>{if(d(e))return;const{dimension:i}=e;i.endPoint=l(t,(t=>F(t,new ft))),this._applyConstraint(e),this._updateHeadingFromCamera(e)}),f),g((()=>this._stagedDimension),(()=>{for(const[t,e]of this._computationManipulators)this._updateManipulators(t.geometry,t.dimension,e)}),_),g((()=>this.analysisViewData.selectedComputation),((t,e)=>{for(const i of[t,e])if(c(i)){const t=this._computationManipulators.get(i);this._updateManipulators(i.geometry,i.dimension,t)}}),_),g((()=>this.analysis.lineWidth),(t=>{this._updateManipulatorStyle(t)}))]),this.addHandles(this._constraintHandles),this.addHandles(this._snappingIndicatorHandles)}destroy(){this._snappingOperation=m(this._snappingOperation),this._computationHandles.destroy(),this._constraintSnappingIndicator.destroy()}get updating(){return this.updatingHandles.updating||this._snappingManager.updating}get hasGrabbedManipulators(){return this.parentTool.hasGrabbedManipulators}get _snappingManager(){return this._snappingManagerResult.snappingManager}get _activeComputation(){if(c(this._stagedComputation))return this._stagedComputation;const{selectedComputation:t}=this.analysisViewData;return this.hasGrabbedManipulators&&c(t)?t:null}get _stagedComputation(){const t=this._stagedDimension,e=this.analysisViewData.computations.at(-1);return d(t)||d(e)||e.dimension!==t?null:e}get _constraintHandles(){return[g((()=>{const t=this._activeComputation;if(d(t))return null;const{axis:e,offsetDirection:i}=t.dimension;return{axis:e,offsetDirection:i,computation:t}}),((t,e)=>{if(c(t)&&d(e)){const{axis:e,computation:i}=t;i.userSetAxis=e}if(d(t)&&c(e)){const{computation:t}=e;t.userSetAxis=null}}),f)]}get _snappingIndicatorHandles(){const t="snapping-indicator-event-handles";return[g((()=>({stagedComputation:this._stagedComputation,activeComputation:this._activeComputation})),(({stagedComputation:e,activeComputation:i})=>{const n=this._constraintSnappingIndicator;if(this.removeHandles(t),d(i))n.attached=!1;else if(i===e)n.attached=!0;else{const{start:e,end:a}=this._computationManipulators.get(i),s=()=>{n.attached=e.grabbing||a.grabbing};s(),this.addHandles([e.events.on("grab-changed",s),a.events.on("grab-changed",s)],t)}})),g((()=>{const t=this._activeComputation;return c(t)?t.geometry:null}),(t=>{const e=this._constraintSnappingIndicator;c(t)&&c(Ht(t,this.view))?(e.visible=!0,e.setGeometryFromSegment(t.directSegment)):e.visible=!1}),{equals:r})]}removeStaged(){c(this._stagedDimension)&&(this.analysis.dimensions.remove(this._stagedDimension),this._stagedDimension=null)}onDeactivate(){this.removeStaged(),this._snappingManager.doneSnapping()}onClick(t){const{_stagedDimension:e}=this;if(d(e)){const e=this._onUnstagedClick(t);return this.analysis.dimensions.add(e),null}return this._onStagedClick(t),e}onPointerMove({mapPoint:t,pointerType:e}){if("touch"===e)return;const i=this._snappingContext(e);this.updatingHandles.addPromise(h(this._snappingOperation.snap(t,this._snappingManager,i)))}onManipulatorSelectionChanged(){if(c(this.analysisViewData.selectedComputation)){this._computationManipulators.get(this.analysisViewData.selectedComputation).offset.selected||(this.analysisViewData.selectedDimension=null)}}_onUnstagedClick({mapPoint:t,pointerType:e}){const i="mouse"===e?u(this._snappingOperation.stagedPoint,t):t,n=new a({startPoint:F(i,new ft),endPoint:null});return this._stagedDimension=n,this._snappingManager.doneSnapping(),n}_onStagedClick({mapPoint:t,pointerType:e}){const i=this._stagedComputation;if(d(i))return;const n="mouse"===e?u(this._snappingOperation.stagedPoint,t):t;i.dimension.endPoint=F(n,new ft),this._applyConstraint(i),this._stagedDimension=null,this._snappingManager.doneSnapping()}_addComputation(t){if(this._computationManipulators.has(t))return;const e=this._createPointManipulator(t,{isStart:!0}),i=this._createPointManipulator(t,{isStart:!1}),n=this._createOffsetManipulator(t),a=this._createHeadingManipulator(t),s=new yt({start:e,end:i,offset:n,heading:a});this._setupComputationToManipulatorsSync(t,s),this._computationManipulators.set(t,s),this.manipulators.addMany(s.values())}_removeComputation(t){const e=this._computationManipulators.get(t);if(!d(e)){this._computationHandles.remove(t),this._computationManipulators.delete(t);for(const t of e.values())this.manipulators.remove(t)}}_setupComputationToManipulatorsSync(t,e){const{dimension:i}=t;this._computationHandles.add([g((()=>t.geometry),(t=>{this._updateManipulators(t,i,e)}),{..._,equals:r})],t)}_createPointManipulator(t,i){const{dimension:n}=t,{isStart:a}=i,s=a?"startPoint":"endPoint",o=Z(this.view,e.toUnitRGB(B.pointManipulators.color),B.pointManipulators.opacity);o.available=!1,o.radius=B.pointManipulators.radius,o.metadata=t.dimension,o.collisionPriority=1;const r=rt(o,((e,i,a,o)=>{const r=tt(e);i.next(r).next(Y(this.view)).next(this._snappingPipeline.createSnapDragEventPipelineStep({snappingContext:this._snappingContext(o),snappingManager:this._snappingManager,cancel:a,updatingHandles:this.updatingHandles}),this._snappingPipeline.next).next((e=>{const i=F(e.mapEnd,new ft);n[s]=i,this._applyConstraint(t),this._updateHeadingFromCamera(t)})),a.next(r).next(pt(n,[s]))}));return this._computationHandles.add(r,t),o}_createOffsetManipulator(t){const e=[T(-.5,0,0),T(.5,0,0)],{lengthFraction:i}=B.offsetManipulator,n=it(e.map((t=>C(R(),t,i)))),a=new N({view:this.view,renderObjects:[{geometry:n,material:this._unfocusedOffsetManipulatorMaterial,stateMask:dt.Unfocused|dt.Selected},{geometry:n,material:this._focusedOffsetManipulatorMaterial,stateMask:dt.Focused|dt.Selected}],collisionType:{type:"line",paths:[e]},radius:this._focusedOffsetWidth(this.analysis.lineWidth)/2,focusMultiplier:1,available:!1,autoScaleRenderObjects:!1,worldSized:!0,metadata:t.dimension}),s=rt(a,((e,i,n)=>{if(d(t.geometry))return;const{dimensionSegment:a,primaryOffsetAxis:s}=t.geometry,o=x(A.get(),a.endRenderSpace,a.startRenderSpace);j(o,o,s);const r=k(a.startRenderSpace,o,z()),p=k(a.startRenderSpace,s,z()),{dimension:l}=t,c=l.offset;let m=0;const u=tt(e);i.next(u).next($(this.view,r)).next((t=>{"start"===t.action&&(m=U(p,t.renderStart));const e=(U(p,t.renderEnd)-m)*this.view.renderCoordsHelper.unitInMeters;l.offset=c+e})),n.next(u).next(pt(l,["offset"]))}));return this._computationHandles.add(s,t),a}_createHeadingManipulator(t){const e=J(this.view,this._rotateManipulatorTexture.texture);e.metadata=t.dimension;const i=rt(e,((e,i,n)=>{const{dimension:a,geometry:s}=t,{renderCoordsHelper:o}=this.view;if(d(s))return;const r=I(A.get(),s,o),l=R(),c=Ct(R(),s,s.directSegment,o),m=k(c,r,z()),h=u(a.heading,(()=>E(s,o)));i.next($(this.view,m)).next((t=>{"start"===t.action&&P(l,t.renderStart);const e=G(m),i=K(l,t.renderEnd,c,e);a.heading=h-p(i)})),n.next(pt(a,["heading"]))}));return this._computationHandles.add(i,t),e}_updateManipulators(t,e,a){const{start:s,end:o,offset:r,heading:p}=a,l=c(t),m=this.analysisViewData.selectedDimension===e,u=l&&d(this._stagedDimension);for(const d of a.values())d===r?(d.available=u,d.selected=m):d.available=d===p?u&&m&&e.axis===i.Vertical&&e.offsetDirection===n.Side:u&&m;u&&(s.renderLocation=t.directSegment.startRenderSpace,o.renderLocation=t.directSegment.endRenderSpace,vt(r,t),p.available&&Mt(p,t,e,this.view.renderCoordsHelper))}_updateManipulatorStyle(t){const e=this._unfocusedOffsetWidth(t),i=this._focusedOffsetWidth(t);for(const{offset:n}of this._computationManipulators.values())n.radius=i/2;this._unfocusedOffsetManipulatorMaterial.setParameters({width:e}),this._focusedOffsetManipulatorMaterial.setParameters({width:i})}_snappingContext(t){return new ut({elevationInfo:{mode:"absolute-height",offset:0},pointer:t,editGeometryOperations:new ct(new lt("point",ot(!0,!1,this.view.spatialReference))),visualizer:new X})}_unfocusedOffsetWidth(t){return y(t)+B.offsetManipulator.linePaddingPx}_focusedOffsetWidth(t){return y(t)+B.offsetManipulator.focusedLinePaddingPx}_applyConstraint(t){const{dimension:e,geometry:a}=t,{startPoint:s,endPoint:o}=e;if(d(a)||d(s)||d(o))return;const r=Ht(a,this.view);if(d(r))c(t.userSetAxis)&&(e.axis=t.userSetAxis),e.offsetDirection=n.Up;else{const a=this._computationManipulators.get(t),p=this._stagedDimension===e||a.end.grabbing?o:s,d=p.clone();switch(r){case bt.Horizontal:e.axis=i.Horizontal,p===s?(d.z=o.z,e.startPoint=d):(d.z=s.z,e.endPoint=d);break;case bt.Vertical:e.axis=i.Vertical,e.offsetDirection=n.Side,p===s?(d.x=o.x,d.y=o.y,e.startPoint=d):(d.x=s.x,d.y=s.y,e.endPoint=d)}}}_updateHeadingFromCamera(t){const{dimension:e,geometry:i}=t;if(d(i))return;if(Ht(i,this.view)===bt.Vertical)return;const{directSegment:n}=i,{renderCoordsHelper:a}=this.view,s=I(A.get(),i,a),o=L(A.get(),i),r=j(A.get(),o,s),{viewForward:p}=this.view.state.camera;D(r,p)>0&&C(r,r,-1);const l=n.eval(.5,A.get());e.heading=a.headingAtPosition(l,r)}get testInfo(){return{getManipulatorsForDimension:t=>{for(const[e,i]of this._computationManipulators.entries())if(t===e.dimension)return i;return null},getComputationForDimension:t=>{for(const e of this._computationManipulators.keys())if(t===e.dimension)return e;return null},stagedDimension:this._stagedDimension,constraintSnappingIndicator:this._constraintSnappingIndicator}}};t([v({constructOnly:!0})],_t.prototype,"analysis",void 0),t([v({constructOnly:!0})],_t.prototype,"analysisViewData",void 0),t([v({constructOnly:!0})],_t.prototype,"manipulators",void 0),t([v({constructOnly:!0})],_t.prototype,"parentTool",void 0),t([v({constructOnly:!0,nonNullable:!0})],_t.prototype,"view",void 0),t([v({readOnly:!0})],_t.prototype,"updating",null),t([v()],_t.prototype,"hasGrabbedManipulators",null),t([v()],_t.prototype,"_stagedDimension",void 0),t([v()],_t.prototype,"_activeComputation",null),t([v()],_t.prototype,"_stagedComputation",null),_t=t([M("esri.views.3d.analysis.Dimensioning.LengthDimensionSubTool")],_t);class yt{constructor(t){this.start=t.start,this.end=t.end,this.offset=t.offset,this.heading=t.heading}values(){return[this.start,this.end,this.offset,this.heading]}}function vt(t,e){const{dimensionSegment:i,primaryOffsetAxis:n}=e,a=W(Ot,e),s=Q(a,n,V,Rt),o=b(a);S(s,s,H(Ot,o,o,o)),t.modelTransform=s,t.renderLocation=i.eval(.5,Ot)}function Mt(t,e,i,n){const{primaryOffsetAxis:a}=e;C(St,a,i.offset>=0?1:-1),W(wt,e),j(wt,wt,St);const s=Q(St,wt,V,Rt);t.modelTransform=s,t.renderLocation=Ct(Ot,e,e.dimensionSegment,n)}const St=R(),wt=R();function Ct(t,e,i,n){const{startRenderSpace:a,endRenderSpace:s}=i,o=xt(e,n)?a:s;return P(t,o)}function xt(t,e){const i=L(jt,t),n=I(Pt,t,e);return D(i,n)>0}const jt=R(),Pt=R();function Dt(){const{color:t,opacity:i}=B.offsetManipulator;return new st({color:[...e.toUnitRGB(t),i],width:1,renderOccluded:nt.OccludeAndTransparent,writeDepth:!1,hasPolygonOffset:!0})}var bt;function Ht(t,e){const{directSegment:i}=t,{constraintThresholdPx:n}=B,{camera:a}=e.state,s=I(A.get(),t,e.renderCoordsHelper),o=L(A.get(),t),r=C(A.get(),s,D(o,s)),p=x(A.get(),o,r),d=O(p),l=O(r),{startRenderSpace:c,endRenderSpace:m}=i,u=Math.max(a.computeRenderPixelSizeAt(c)*n,a.computeRenderPixelSizeAt(m)*n)**2;return d<u?bt.Vertical:l<u?bt.Horizontal:null}!function(t){t[t.Horizontal=0]="Horizontal",t[t.Vertical=1]="Vertical"}(bt||(bt={}));const Ot=R(),Rt=w();export{yt as LengthDimensionManipulators,_t as LengthDimensionSubTool};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../../core/Handles.js";import{destroyMaybe as t,isNone as s,isSome as i}from"../../../../core/maybe.js";import{toUnit as n}from"../../../../core/quantityUtils.js";import{watch as r,initial as a}from"../../../../core/reactiveUtils.js";import{pt2px as l}from"../../../../core/screenUtils.js";import{
|
|
5
|
+
import e from"../../../../core/Handles.js";import{destroyMaybe as t,isNone as s,isSome as i}from"../../../../core/maybe.js";import{toUnit as n}from"../../../../core/quantityUtils.js";import{watch as r,initial as a}from"../../../../core/reactiveUtils.js";import{pt2px as l}from"../../../../core/screenUtils.js";import{w as o}from"../../../../chunks/vec3.js";import{sv3d as m}from"../../../../geometry/support/vectorStacks.js";import{formatNumber as d}from"../../../../intl/number.js";import{computeSpanningSegment as c,OffsetSegmentLocation as f,offsetSegment as u}from"./lengthDimensionUtils.js";import{settings as h}from"./settings.js";import{LabelVisualElement as y}from"../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as g}from"../../interactive/visualElements/LineVisualElement.js";import{MarkerVisualElement as _}from"../../interactive/visualElements/MarkerVisualElement.js";import{EuclideanSegment as S}from"../../interactive/visualElements/support/Segment.js";class b{constructor(t){this.destroyed=!1,this._handles=new e,this._labelSegment=new S;const{analysis:s,computation:n,view:o}=t;this.analysis=s,this.computation=n,this.view=o;const m=t.visible,d={view:o,attached:m};this._dimensionVisualElement=new g(d,t.dimensionLineMaterial),this._markerVisualElement=new _(d,t.markerMaterial),this._startPrimaryOffsetVisualElement=new g(d,t.primaryOffsetLineMaterial),this._endPrimaryOffsetVisualElement=new g(d,t.primaryOffsetLineMaterial),this._startSecondaryOffsetVisualElement=new g(d,t.secondaryOffsetLineMaterial),this._endSecondaryOffsetVisualElement=new g(d,t.secondaryOffsetLineMaterial);const c={type:"segment",sampleLocation:"center",segment:this._labelSegment,callout:!1};this._label=new y({view:o,attached:m,distance:0,geometry:c,fontSize:l(s.fontSize),textColor:s.textColor.clone(),backgroundColor:s.backgroundColor.clone()}),this._handles.add([r((()=>({geometry:n.geometry})),(({geometry:e})=>{const t=i(e);for(const s of this._geometryVisualElements())s.visible=t;t&&this._updateLines(e)}),a),r((()=>({length:n.length,geometry:n.geometry})),(({length:e,geometry:t})=>this._updateLabelContent(e,t)),a),r((()=>({geometry:n.geometry})),(({geometry:e})=>this.updateLabelGeometry(o.state.camera,e,s)),a)])}set visible(e){for(const t of this._visualElements())t.attached=e}destroy(){this.destroyed=!0,this._handles=t(this._handles);for(const e of this._visualElements())e.destroy()}get testInfo(){return{dimensionVisualElement:this._dimensionVisualElement,label:this._label}}_updateLines(e){this._dimensionVisualElement.setGeometryFromSegment(e.dimensionSegment),this._markerVisualElement.setGeometryFromSegment(e.dimensionSegment),this._startPrimaryOffsetVisualElement.setGeometryFromSegment(c(E,f.Start,e.cornerSegment,e.dimensionSegment)),this._endPrimaryOffsetVisualElement.setGeometryFromSegment(c(E,f.End,e.cornerSegment,e.dimensionSegment));const t=c(E,f.Start,e.directSegment,e.cornerSegment);o(t.startRenderSpace,t.endRenderSpace)?this._startSecondaryOffsetVisualElement.visible=!1:(this._startSecondaryOffsetVisualElement.visible=!0,this._startSecondaryOffsetVisualElement.setGeometryFromSegment(t));const s=c(E,f.End,e.directSegment,e.cornerSegment);o(s.startRenderSpace,s.endRenderSpace)?this._endSecondaryOffsetVisualElement.visible=!1:(this._endSecondaryOffsetVisualElement.visible=!0,this._endSecondaryOffsetVisualElement.setGeometryFromSegment(s))}updateLabelGeometry(e,t,i){if(s(t))return void(this._label.visible=!1);const{dimensionSegment:n,primaryOffsetAxis:r}=t,{offset:a}=this.computation.dimension,l=e.computeRenderPixelSizeAt(n.eval(.5,m.get())),o=(Math.sign(a)>=0?1:-1)*p(i)*l;u(this._labelSegment,n,r,o),this._label.updateLabelPosition()}updateLabelStyle(e){this._label.fontSize=l(e.fontSize),this._label.textColor=e.textColor,this._label.backgroundColor=e.backgroundColor}_updateLabelContent(e,t){if(s(e)||s(t))return this._label.text="",void(this._label.visible=!1);const{value:i}=n(e,"meters");this._label.text=`${d(i,{minimumFractionDigits:2,maximumFractionDigits:2})} m`,this._label.visible=!0}_geometryVisualElements(){return[this._dimensionVisualElement,this._markerVisualElement,this._startPrimaryOffsetVisualElement,this._endPrimaryOffsetVisualElement,this._startSecondaryOffsetVisualElement,this._endSecondaryOffsetVisualElement]}_visualElements(){return[...this._geometryVisualElements(),this._label]}}function p(e){return 1.5*l(e.fontSize)+h.labels.marginPx+l(e.lineWidth/2)}const E=new S;export{b as LengthDimensionVisualization};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{LengthDimensionOffsetDirection as e,LengthDimensionAxis as t}from"../../../../analysis/dimensionUtils.js";import{deg2rad as n}from"../../../../core/mathUtils.js";import{isNone as r,isSome as s}from"../../../../core/maybe.js";import{d as a}from"../../../../chunks/mat4.js";import{c as i}from"../../../../chunks/mat4f64.js";import{c as o,
|
|
5
|
+
import{LengthDimensionOffsetDirection as e,LengthDimensionAxis as t}from"../../../../analysis/dimensionUtils.js";import{deg2rad as n}from"../../../../core/mathUtils.js";import{isNone as r,isSome as s}from"../../../../core/maybe.js";import{d as a}from"../../../../chunks/mat4.js";import{c as i}from"../../../../chunks/mat4f64.js";import{c as o,q as c,v as d,p,f,e as S,g as m,F as u,n as R}from"../../../../chunks/vec3.js";import{c as g,Z as l}from"../../../../chunks/vec3f64.js";import{Axis as v}from"../../../../geometry/support/Axis.js";import{sv3d as h}from"../../../../geometry/support/vectorStacks.js";import{EuclideanSegment as x}from"../../interactive/visualElements/support/Segment.js";function A({startPoint:t,endPoint:n,offset:a,axis:i,offsetDirection:c,heading:d},p,f=null){if(r(t)||r(n))return null;const S=k(s(f)?f.directSegment:new x,{startPoint:t,endPoint:n},p),m=s(f)?f.primaryOffsetAxis:g(),u=c===e.Side;w(m,{axis:i,directSegment:S,offsetDirection:e.Up,heading:u?null:d},p);const R=s(f)?f.cornerSegment:new x;o(R.startRenderSpace,S.startRenderSpace),o(R.endRenderSpace,S.endRenderSpace),u&&(b(R,{offsetAxis:m,offset:0,relativeToSegment:S},p),w(m,{axis:i,directSegment:S,offsetDirection:c,heading:d},p));return{directSegment:S,cornerSegment:R,dimensionSegment:b(s(f)?f.dimensionSegment:new x,{offsetAxis:m,offset:a,relativeToSegment:R},p),primaryOffsetAxis:m,spatialReference:p.spatialReference}}function j(e,t,n,r){return t===P.Start?(o(e.startRenderSpace,n.startRenderSpace),o(e.endRenderSpace,r.startRenderSpace)):(o(e.startRenderSpace,n.endRenderSpace),o(e.endRenderSpace,r.endRenderSpace)),e}var P;function U(e,t,n,r){c(e.startRenderSpace,t.startRenderSpace,n,r),c(e.endRenderSpace,t.endRenderSpace,n,r)}function k(e,t,n){return n.toRenderCoords(t.startPoint,e.startRenderSpace),n.toRenderCoords(t.endPoint,e.endRenderSpace),e}function w(r,i,c){const{axis:g,directSegment:{startRenderSpace:x,endRenderSpace:A},directSegment:j,offsetDirection:P,heading:U}=i,k=j.eval(.5,h.get()),w=c.worldUpAtPosition(k,h.get()),b=c.worldBasisAtPosition(k,v.Y,h.get());let T=null;s(U)&&(a(D,-n(U),w),T=d(h.get(),b,D));const E=p(y,A,x);switch(g){case t.Horizontal:P===e.Up?o(r,w):s(T)?o(r,T):f(r,E,w);break;case t.Vertical:if(P===e.Up?(S(x,w)<S(A,w)?p(r,A,x):p(r,x,A),f(r,r,w),f(r,r,w)):s(T)?o(r,T):f(r,E,w),u(r,l))return o(r,b);break;case t.Direct:if(f(r,E,w),P===e.Up?f(r,r,E):s(T)&&S(r,T)<0&&m(r,r,-1),u(r,l))return o(r,b)}return R(r,r)}!function(e){e[e.Start=0]="Start",e[e.End=1]="End"}(P||(P={}));const y=g(),D=i();function b(e,t,n){const{offsetAxis:r,offset:s,relativeToSegment:{startRenderSpace:a,endRenderSpace:i},relativeToSegment:o}=t,d=s/n.unitInMeters,[p,f]=T(a,i,r,d);return c(e.startRenderSpace,o.startRenderSpace,r,p),c(e.endRenderSpace,o.endRenderSpace,r,f),e}function T(e,t,n,r=0){const s=S(t,n),a=S(e,n),i=Math.abs(s-a)+r;return s>a?[i,r]:[r,i]}function E(e,t,n){const r=t.directSegment.eval(.5,h.get());return n.worldUpAtPosition(r,e)}function O(e,t){const{startRenderSpace:n,endRenderSpace:r}=t.directSegment;return p(e,r,n)}function C(e,t){const{startRenderSpace:n,endRenderSpace:r}=t.dimensionSegment;return p(e,r,n)}function M(e,t){const n=e.directSegment.eval(.5,h.get());return t.headingAtPosition(n,e.primaryOffsetAxis)}export{P as OffsetSegmentLocation,A as computeGeometryFromDimension,j as computeSpanningSegment,C as dimensionStartToEnd,O as directStartToEnd,E as directUp,M as headingFromGeometry,U as offsetSegment};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import{getFeatureId as t}from"../../../../analysis/featureReferenceUtils.js";import o from"../../../../core/Accessor.js";import{createTask as i}from"../../../../core/asyncUtils.js";import n from"../../../../core/Evented.js";import r from"../../../../core/Handles.js";import{handlesGroup as s,makeHandle as a}from"../../../../core/handleUtils.js";import l from"../../../../core/Logger.js";import{isNone as c,isSome as d,abortMaybe as u,unwrapOr as p,none as h}from"../../../../core/maybe.js";import{ignoreAbortErrors as g}from"../../../../core/promiseUtils.js";import{initial as v}from"../../../../core/reactiveUtils.js";import{property as m}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as _,i as b,b as y,n as C,g as I,a as T,j as P,y as O}from"../../../../chunks/vec3.js";import{c as S}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as j}from"../../../../core/support/WatchUpdatingTracking.js";import{projectOrLoad as w,projectBoundingRect as R}from"../../../../geometry/projection.js";import{empty as A,containsPointObject as E,intersectsSegment as H}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as F,create as L}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as V}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as D}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as x}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as N}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as k}from"../support/projectionUtils.js";import{StoreResults as z}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as G,hasLod as U,getIntersectedFeatureBSRadius as M}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as Z,TaskPriority as q}from"../../../support/Scheduler.js";import B from"../../../../geometry/Point.js";const W="esri.views.3d.analysis.LineOfSight.LineOfSightController",J=l.getLogger(W);let K=class extends(n.EventedMixin(o)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._observerFeatureId=null,this._updatingHandles=new j,this._frameTask=Z,this._handles=new r,this._computationHandles=new r,this._externalObserverUpdate=!0}initialize(){const e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(q.LINE_OF_SIGHT_TOOL):Z,this._intersector=new N({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){const t=e.computation,{inputPoints:o,computationResult:i}=t,{observerAdjusted:n,targetAdjusted:r}=o,{start:s,end:a}=i;_(s,n),_(a,r);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_updateAdjustedPointsFromFeatures(e){const o=this.view,{sceneIntersectionHelper:i}=o,{inputPoints:n}=e,{observerAdjusted:r,observerFeatureId:s,targetFeatureId:a,targetAdjusted:l}=n;if(c(s)&&c(a))return;const u=b(r,l),p=this._intersector.intersector,h=F(n.observer,n.target,Y);p.options.store=z.ALL,i.intersectToolIntersectorRay(h,p);let g=null,v=null,m=null,f=null;for(const _ of p.results.all){const e=G(_,this.view);if(c(e)||c(_.distanceInRenderSpace))continue;const i=t(e);c(i)||(d(s)&&i===s&&(c(g)&&(g=this._getFeatureDistanceThreshold(_,o,u)),_.distanceInRenderSpace<g&&(m=_)),d(a)&&i===a&&(c(v)&&(v=this._getFeatureDistanceThreshold(_,o,u)),c(f)&&_.distanceInRenderSpace<u&&u-_.distanceInRenderSpace<v&&(f=_)))}d(m)&&m.getIntersectionPoint(r)&&(n.observerSurfaceNormal=m.getTransformedNormal(S())),d(f)&&f.getIntersectionPoint(l)&&(n.targetSurfaceNormal=f.getTransformedNormal(S()))}_getFeatureDistanceThreshold(e,t,o){if(U(e)){const i=M(e,t);if(d(i))return Math.min(i*ee,o)}return 1e-5*o}_adjustStartEndPositions(e){const t=this._screenPixelSize,o=this.view,{inputPoints:i}=e,{observer:n,observerSurfaceNormal:r,target:s,targetSurfaceNormal:a,observerAdjusted:l,targetAdjusted:c}=i,u=X;_(l,n),_(c,s),this._updateAdjustedPointsFromFeatures(e),d(r)?_(u,r):y(u,c,l);const p=t;C(u,u),I(u,u,Math.min(p,1)),T(l,l,u),d(a)?_(u,a):y(u,l,c);const h=o.state.camera.computeScreenPixelSizeAt(c);C(u,u),I(u,u,Math.min(h,1)),T(c,c,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:o}=this,{sceneIntersectionHelper:i,renderCoordsHelper:n}=o;if(c(i))return;const r=this._intersector.intersector,{computationResult:s,inputPoints:a}=e,{observer:l,target:u}=a,{start:p,end:h}=s,g=F(p,h,Y);r.options.store=z.MIN,i.intersectToolIntersectorRay(g,r);const v=r.results.min,m=s.intersection,f=X;let b=!0;if(d(v)&&v.getIntersectionPoint(m)){_(t.originalIntersection,m),_(t.originalObserver,p),_(t.originalTarget,h),n.fromRenderCoords(m,f,o.spatialReference);const e=1-P(h,u)/P(p,u);b=P(l,m)>=e*P(l,u)}const y=new B(f,o.spatialReference);{const{result:t,target:i}=e;d(t)?(t.target=i,t.intersectedGraphic=b?null:G(v,o),t.intersectedLocation=b?null:y,t.visible=b):e.result=new D({target:i,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:b?null:G(v,o),intersectedLocation:b?null:y,visible:b})}s.isValid=a.isValid=!0,s.isTargetVisible=b}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:o,inputPoints:i}=e,{start:n,end:r,intersection:s}=o,{originalIntersection:a,originalObserver:l,originalTarget:c}=t;if(_(s,a),i.isValid){const e=X,t=P(l,a)/P(l,c);O(e,n,l),I(e,e,1-t),T(s,s,e),O(e,r,c),I(e,e,t),T(s,s,e),o.isValid=!0}else e.result=null,o.isValid=!1,o.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,o=this.view.frustum;if(c(t)||c(e.elevationAlignedTargetLocation)||c(o))return!1;const{observerAdjusted:i,targetAdjusted:n}=e.inputPoints,r=o.intersectsPoint(i),s=o.intersectsPoint(n);return r&&s}_onObserverPositionChange(e,o,i,n,r){if(this._externalObserverUpdate=r,c(e))return this.analysisViewData.elevationAlignedObserver=null,void(this._observerFeatureId=null);if(c(o))return k(this.analysis,e.spatialReference,J),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(o,i),{absoluteZ:a,elevation:l}=V(o.x,o.y,o.z,this.view.spatialReference,this.view,s),d=o.clone();d.z=a,this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=d;const u=S();this.view.renderCoordsHelper.toRenderCoords(d,u),this._elevationAlignedObserverPositionRenderSpace=u,this._observerGroundOffsetRenderSpace=a-l,this._observerFeatureId=t(n),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n){const{inputPoints:r}=e;switch(_(r.observer,t),r.observerFeatureId=n,r.observerSurfaceNormal=null,i){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(r.observer,o,r.observer);c(r.observerFeatureId)&&(r.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,o,i,n,r,s=!0){const a=e.inputPoints;if(s&&(a.isValid=!1),c(i))return d(o)&&k(this.analysis,o.spatialReference,J),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const l=this._getEffectiveElevationInfo(i,n),{absoluteZ:u,elevation:p}=V(i.x,i.y,i.z,this.view.spatialReference,this.view,l),h=i.clone();switch(h.z=u,e.elevationAlignedTargetLocation=h,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,a.target),a.targetFeatureId=t(r),a.targetSurfaceNormal=null,l.mode){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(a.target,u-p,a.target);c(a.targetFeatureId)&&(a.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return s([this._updatingHandles.add((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetFeatureInfo:e.target.feature,projectedTargetPosition:w(e.target.position,this.view.spatialReference)})),(({computation:e,targetPosition:t,targetElevationInfo:o,targetFeatureInfo:i,projectedTargetPosition:n})=>{d(n.pending)?this._updatingHandles.addPromise(n.pending):this._onTargetPositionChange(e,t,n.geometry,o,i)}),v)])}_connectComputationToObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())}),v)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId})),(({computation:e,observer:t,observerGroundOffset:o,observerElevationMode:i,observerFeatureId:n})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n)}),v)}_connectComputationToCamera(e){return this._updatingHandles.add((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}))}_connectComputationToSlicePlane(e){return this._updatingHandles.add((()=>this.view.slicePlane),(()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()}))}_connectComputationToElevation(e){const t=(o,i)=>{const n=this.analysis.observer,r=e.target;let s=null,a=null,l=null,u=null,p=null,h=null;if(d(n)&&d(n.position)){const e=w(n.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));s=e.geometry,a=n.elevationInfo,l=n.feature}if(d(r.position)){const e=w(r.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));u=e.geometry,p=r.elevationInfo,h=r.feature}c(s)&&c(u)||(R(o,i,$,this.view.spatialReference),d(s)&&E($,s)&&this._onObserverPositionChange(d(n)?n.position:null,s,a,l,!1),d(u)&&E($,u)&&this._onTargetPositionChange(e,r.position,u,p,h,!1),d(s)&&d(u)&&H($,s,u)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on("elevation-change",(e=>t(e.extent,e.spatialReference)))}_connectComputationToTask(e){let t=h;const o={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return s([this._updatingHandles.add((()=>e.inputPoints),(()=>{t=u(t),t=i((async e=>{await g(this._frameTask.schedule((()=>this._computeResult(o)),e))}))}),{initial:!0,equals:()=>!1}),a((()=>t=u(t)))])}_connectComputation(e){const t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(const o of t)this._disconnectComputation(o);for(const o of e)this._connectComputation(o)}_onTargetCollectionChange({added:e,removed:t}){for(const o of t)this._removeTarget(o);for(const o of e)this._addTarget(o)}_onCursorTargetChange(e,t){d(t)&&this._removeTarget(t),d(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new x({target:e}))}_removeTarget(e){const t=this._computations.findIndex((t=>t.target===e));this._computations.removeAt(t)}_connectObserver(){return s([this._updatingHandles.add((()=>({observerPosition:d(this.analysis.observer)?this.analysis.observer.position:null,projectedObserverPosition:w(d(this.analysis.observer)?this.analysis.observer.position:null,this.view.spatialReference),observerElevationInfo:d(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerFeatureInfo:d(this.analysis.observer)?this.analysis.observer.feature:null})),(({observerPosition:e,projectedObserverPosition:t,observerElevationInfo:o,observerFeatureInfo:i})=>{d(t.pending)?this._updatingHandles.addPromise(t.pending):this._onObserverPositionChange(e,t.geometry,o,i,!0)}),v)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this._computations),(e=>this._onComputationCollectionChange(e)),{initial:!0,final:!0})}_connectTargets(){return s([this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)),{initial:!0,final:!0}),this._updatingHandles.add((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:o}=t;if(c(e)||c(o))return!1;const i=X;o.toRenderCoords(e,i);const n=t.state.camera.computeScreenPixelSizeAt(i);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>Q}_getEffectiveElevationInfo(e,t){return e.hasZ?p(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};e([m({constructOnly:!0})],K.prototype,"analysis",void 0),e([m({constructOnly:!0})],K.prototype,"analysisViewData",void 0),e([m({constructOnly:!0})],K.prototype,"view",void 0),e([m()],K.prototype,"updating",null),e([m()],K.prototype,"priority",null),e([m()],K.prototype,"updateOnCameraChange",void 0),e([m()],K.prototype,"_computations",null),e([m()],K.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([m()],K.prototype,"_observerGroundOffsetRenderSpace",void 0),e([m()],K.prototype,"_effectiveObserverElevationMode",void 0),e([m()],K.prototype,"_observerFeatureId",void 0),e([m()],K.prototype,"_screenPixelSize",null),e([m({readOnly:!0})],K.prototype,"_updatingHandles",void 0),e([m()],K.prototype,"_frameTask",void 0),e([m()],K.prototype,"_isCameraDirty",null),K=e([f(W)],K);const Q=.1,X=S(),Y=L(),$=A(),ee=.05;export{K as LineOfSightController};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import{getFeatureId as t}from"../../../../analysis/featureReferenceUtils.js";import o from"../../../../core/Accessor.js";import{createTask as i}from"../../../../core/asyncUtils.js";import n from"../../../../core/Evented.js";import r from"../../../../core/Handles.js";import{handlesGroup as s,makeHandle as a}from"../../../../core/handleUtils.js";import l from"../../../../core/Logger.js";import{isNone as c,isSome as d,abortMaybe as u,unwrapOr as p,none as h}from"../../../../core/maybe.js";import{ignoreAbortErrors as g}from"../../../../core/promiseUtils.js";import{initial as v}from"../../../../core/reactiveUtils.js";import{property as m}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as _,i as b,b as y,n as C,g as I,a as T,j as P,p as O}from"../../../../chunks/vec3.js";import{c as S}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as j}from"../../../../core/support/WatchUpdatingTracking.js";import{projectOrLoad as w,projectBoundingRect as R}from"../../../../geometry/projection.js";import{empty as A,containsPointObject as E,intersectsSegment as H}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as F,create as L}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as V}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as D}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as x}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as N}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as k}from"../support/projectionUtils.js";import{StoreResults as z}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as G,hasLod as U,getIntersectedFeatureBSRadius as M}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as Z,TaskPriority as q}from"../../../support/Scheduler.js";import B from"../../../../geometry/Point.js";const W="esri.views.3d.analysis.LineOfSight.LineOfSightController",J=l.getLogger(W);let K=class extends(n.EventedMixin(o)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._observerFeatureId=null,this._updatingHandles=new j,this._frameTask=Z,this._handles=new r,this._computationHandles=new r,this._externalObserverUpdate=!0}initialize(){const e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(q.LINE_OF_SIGHT_TOOL):Z,this._intersector=new N({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){const t=e.computation,{inputPoints:o,computationResult:i}=t,{observerAdjusted:n,targetAdjusted:r}=o,{start:s,end:a}=i;_(s,n),_(a,r);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_updateAdjustedPointsFromFeatures(e){const o=this.view,{sceneIntersectionHelper:i}=o,{inputPoints:n}=e,{observerAdjusted:r,observerFeatureId:s,targetFeatureId:a,targetAdjusted:l}=n;if(c(s)&&c(a))return;const u=b(r,l),p=this._intersector.intersector,h=F(n.observer,n.target,Y);p.options.store=z.ALL,i.intersectToolIntersectorRay(h,p);let g=null,v=null,m=null,f=null;for(const _ of p.results.all){const e=G(_,this.view);if(c(e)||c(_.distanceInRenderSpace))continue;const i=t(e);c(i)||(d(s)&&i===s&&(c(g)&&(g=this._getFeatureDistanceThreshold(_,o,u)),_.distanceInRenderSpace<g&&(m=_)),d(a)&&i===a&&(c(v)&&(v=this._getFeatureDistanceThreshold(_,o,u)),c(f)&&_.distanceInRenderSpace<u&&u-_.distanceInRenderSpace<v&&(f=_)))}d(m)&&m.getIntersectionPoint(r)&&(n.observerSurfaceNormal=m.getTransformedNormal(S())),d(f)&&f.getIntersectionPoint(l)&&(n.targetSurfaceNormal=f.getTransformedNormal(S()))}_getFeatureDistanceThreshold(e,t,o){if(U(e)){const i=M(e,t);if(d(i))return Math.min(i*ee,o)}return 1e-5*o}_adjustStartEndPositions(e){const t=this._screenPixelSize,o=this.view,{inputPoints:i}=e,{observer:n,observerSurfaceNormal:r,target:s,targetSurfaceNormal:a,observerAdjusted:l,targetAdjusted:c}=i,u=X;_(l,n),_(c,s),this._updateAdjustedPointsFromFeatures(e),d(r)?_(u,r):y(u,c,l);const p=t;C(u,u),I(u,u,Math.min(p,1)),T(l,l,u),d(a)?_(u,a):y(u,l,c);const h=o.state.camera.computeScreenPixelSizeAt(c);C(u,u),I(u,u,Math.min(h,1)),T(c,c,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:o}=this,{sceneIntersectionHelper:i,renderCoordsHelper:n}=o;if(c(i))return;const r=this._intersector.intersector,{computationResult:s,inputPoints:a}=e,{observer:l,target:u}=a,{start:p,end:h}=s,g=F(p,h,Y);r.options.store=z.MIN,i.intersectToolIntersectorRay(g,r);const v=r.results.min,m=s.intersection,f=X;let b=!0;if(d(v)&&v.getIntersectionPoint(m)){_(t.originalIntersection,m),_(t.originalObserver,p),_(t.originalTarget,h),n.fromRenderCoords(m,f,o.spatialReference);const e=1-P(h,u)/P(p,u);b=P(l,m)>=e*P(l,u)}const y=new B(f,o.spatialReference);{const{result:t,target:i}=e;d(t)?(t.target=i,t.intersectedGraphic=b?null:G(v,o),t.intersectedLocation=b?null:y,t.visible=b):e.result=new D({target:i,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:b?null:G(v,o),intersectedLocation:b?null:y,visible:b})}s.isValid=a.isValid=!0,s.isTargetVisible=b}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:o,inputPoints:i}=e,{start:n,end:r,intersection:s}=o,{originalIntersection:a,originalObserver:l,originalTarget:c}=t;if(_(s,a),i.isValid){const e=X,t=P(l,a)/P(l,c);O(e,n,l),I(e,e,1-t),T(s,s,e),O(e,r,c),I(e,e,t),T(s,s,e),o.isValid=!0}else e.result=null,o.isValid=!1,o.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,o=this.view.frustum;if(c(t)||c(e.elevationAlignedTargetLocation)||c(o))return!1;const{observerAdjusted:i,targetAdjusted:n}=e.inputPoints,r=o.intersectsPoint(i),s=o.intersectsPoint(n);return r&&s}_onObserverPositionChange(e,o,i,n,r){if(this._externalObserverUpdate=r,c(e))return this.analysisViewData.elevationAlignedObserver=null,void(this._observerFeatureId=null);if(c(o))return k(this.analysis,e.spatialReference,J),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(o,i),{absoluteZ:a,elevation:l}=V(o.x,o.y,o.z,this.view.spatialReference,this.view,s),d=o.clone();d.z=a,this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=d;const u=S();this.view.renderCoordsHelper.toRenderCoords(d,u),this._elevationAlignedObserverPositionRenderSpace=u,this._observerGroundOffsetRenderSpace=a-l,this._observerFeatureId=t(n),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n){const{inputPoints:r}=e;switch(_(r.observer,t),r.observerFeatureId=n,r.observerSurfaceNormal=null,i){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(r.observer,o,r.observer);c(r.observerFeatureId)&&(r.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,o,i,n,r,s=!0){const a=e.inputPoints;if(s&&(a.isValid=!1),c(i))return d(o)&&k(this.analysis,o.spatialReference,J),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const l=this._getEffectiveElevationInfo(i,n),{absoluteZ:u,elevation:p}=V(i.x,i.y,i.z,this.view.spatialReference,this.view,l),h=i.clone();switch(h.z=u,e.elevationAlignedTargetLocation=h,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,a.target),a.targetFeatureId=t(r),a.targetSurfaceNormal=null,l.mode){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(a.target,u-p,a.target);c(a.targetFeatureId)&&(a.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return s([this._updatingHandles.add((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetFeatureInfo:e.target.feature,projectedTargetPosition:w(e.target.position,this.view.spatialReference)})),(({computation:e,targetPosition:t,targetElevationInfo:o,targetFeatureInfo:i,projectedTargetPosition:n})=>{d(n.pending)?this._updatingHandles.addPromise(n.pending):this._onTargetPositionChange(e,t,n.geometry,o,i)}),v)])}_connectComputationToObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())}),v)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId})),(({computation:e,observer:t,observerGroundOffset:o,observerElevationMode:i,observerFeatureId:n})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n)}),v)}_connectComputationToCamera(e){return this._updatingHandles.add((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}))}_connectComputationToSlicePlane(e){return this._updatingHandles.add((()=>this.view.slicePlane),(()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()}))}_connectComputationToElevation(e){const t=(o,i)=>{const n=this.analysis.observer,r=e.target;let s=null,a=null,l=null,u=null,p=null,h=null;if(d(n)&&d(n.position)){const e=w(n.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));s=e.geometry,a=n.elevationInfo,l=n.feature}if(d(r.position)){const e=w(r.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));u=e.geometry,p=r.elevationInfo,h=r.feature}c(s)&&c(u)||(R(o,i,$,this.view.spatialReference),d(s)&&E($,s)&&this._onObserverPositionChange(d(n)?n.position:null,s,a,l,!1),d(u)&&E($,u)&&this._onTargetPositionChange(e,r.position,u,p,h,!1),d(s)&&d(u)&&H($,s,u)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on("elevation-change",(e=>t(e.extent,e.spatialReference)))}_connectComputationToTask(e){let t=h;const o={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return s([this._updatingHandles.add((()=>e.inputPoints),(()=>{t=u(t),t=i((async e=>{await g(this._frameTask.schedule((()=>this._computeResult(o)),e))}))}),{initial:!0,equals:()=>!1}),a((()=>t=u(t)))])}_connectComputation(e){const t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(const o of t)this._disconnectComputation(o);for(const o of e)this._connectComputation(o)}_onTargetCollectionChange({added:e,removed:t}){for(const o of t)this._removeTarget(o);for(const o of e)this._addTarget(o)}_onCursorTargetChange(e,t){d(t)&&this._removeTarget(t),d(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new x({target:e}))}_removeTarget(e){const t=this._computations.findIndex((t=>t.target===e));this._computations.removeAt(t)}_connectObserver(){return s([this._updatingHandles.add((()=>({observerPosition:d(this.analysis.observer)?this.analysis.observer.position:null,projectedObserverPosition:w(d(this.analysis.observer)?this.analysis.observer.position:null,this.view.spatialReference),observerElevationInfo:d(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerFeatureInfo:d(this.analysis.observer)?this.analysis.observer.feature:null})),(({observerPosition:e,projectedObserverPosition:t,observerElevationInfo:o,observerFeatureInfo:i})=>{d(t.pending)?this._updatingHandles.addPromise(t.pending):this._onObserverPositionChange(e,t.geometry,o,i,!0)}),v)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this._computations),(e=>this._onComputationCollectionChange(e)),{initial:!0,final:!0})}_connectTargets(){return s([this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)),{initial:!0,final:!0}),this._updatingHandles.add((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:o}=t;if(c(e)||c(o))return!1;const i=X;o.toRenderCoords(e,i);const n=t.state.camera.computeScreenPixelSizeAt(i);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>Q}_getEffectiveElevationInfo(e,t){return e.hasZ?p(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};e([m({constructOnly:!0})],K.prototype,"analysis",void 0),e([m({constructOnly:!0})],K.prototype,"analysisViewData",void 0),e([m({constructOnly:!0})],K.prototype,"view",void 0),e([m()],K.prototype,"updating",null),e([m()],K.prototype,"priority",null),e([m()],K.prototype,"updateOnCameraChange",void 0),e([m()],K.prototype,"_computations",null),e([m()],K.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([m()],K.prototype,"_observerGroundOffsetRenderSpace",void 0),e([m()],K.prototype,"_effectiveObserverElevationMode",void 0),e([m()],K.prototype,"_observerFeatureId",void 0),e([m()],K.prototype,"_screenPixelSize",null),e([m({readOnly:!0})],K.prototype,"_updatingHandles",void 0),e([m()],K.prototype,"_frameTask",void 0),e([m()],K.prototype,"_isCameraDirty",null),K=e([f(W)],K);const Q=.1,X=S(),Y=L(),$=A(),ee=.05;export{K as LineOfSightController};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../analysis/SlicePlane.js";import{clock as i}from"../../../../core/clock.js";import a from"../../../../core/Handles.js";import{releaseMaybe as s,destroyMaybe as n,isSome as r,isNone as l,removeMaybe as o}from"../../../../core/maybe.js";import{watch as h,sync as p,syncAndInitial as u}from"../../../../core/reactiveUtils.js";import{addFrameTask as c}from"../../../../core/scheduling.js";import{createScreenPoint as d,screenPointObjectToArray as _,createScreenPointArray as v}from"../../../../core/screenUtils.js";import{property as P}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../../core/accessorSupport/decorators/subclass.js";import{d as m,C as g,m as w}from"../../../../chunks/mat4.js";import{e as f,l as M,c as D,g as T,a as V,m as b,n as k,s as E}from"../../../../chunks/vec3.js";import{a as S,c as H}from"../../../../chunks/vec3f64.js";import{a as x,c as I,n as R,f as j}from"../../../../chunks/boundedPlane.js";import{signedDistance as C,create as O,intersectRay as z,normal as G}from"../../../../geometry/support/plane.js";import{create as U}from"../../../../geometry/support/ray.js";import{sv3d as L,sm4d as K,sv2d as A}from"../../../../geometry/support/vectorStacks.js";import{POINTER_MOVE_TIMER_MS as B,PLANE_PREVIEW_OUTLINE_WIDTH as F,forceVerticalModifier as N,forceHorizontalModifier as q,PLANE_OUTLINE_COLOR as Z,PLANE_BACKGROUND_COLOR as J,PREVIEW_FADE_DOT_THRESHOLD as Q,PREVIEW_FADE_DURATION_SECONDS as W,INITIAL_DEPTH_OFFSET_FRAC as X}from"./sliceToolConfig.js";import{createShiftManipulator as Y,createRotateManipulator as $,createResizeManipulator as tt,createGridVisualElement as et,createOutlineVisualElement as it,planeToShape as at,createRotatePlane as st,RotationAxis as nt,resizePlane as rt,calculatePlaneHalfSize as lt,SliceOrientation as ot,createPlane as ht,DidPointerMoveRecentlyFlag as pt,calculateBoundedPlaneTranslateRotate as ut,updateShiftRestartHandle as ct,updateRotateHeadingHandle as dt,updateRotateTiltHandle as _t,updateResizeHandle as vt,createShiftPlane as Pt}from"./sliceToolUtils.js";import{getRotateHeadingTexture as yt,getTiltRotateTexture as mt}from"./images/Factory.js";import{calculateInputRotationTransform as gt}from"../../interactive/manipulatorUtils.js";import{screenToRenderPlane as wt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{fromScreen as ft}from"../../support/geometryUtils/ray.js";import{newIntersector as Mt}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as Dt}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{AnalysisToolBase as Tt}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as Vt}from"../../../interactive/dragEventPipeline.js";import{createScreenPointFromEvent as bt}from"../../../support/screenUtils.js";var kt;let Et=kt=class extends Tt{constructor(t){super(t),this._clock=i,this._previewPlaneOpacity=1,this.removeIncompleteOnCancel=!1,this.layersMode="none",this.shiftManipulator=null,this.rotateHeadingManipulator=null,this.rotateTiltManipulator=null,this.resizeManipulators=null,this._handles=new a,this._viewHandles=new a,this._frameTask=null,this._pointerMoveTimerMs=B,this._prevPointerMoveTimeout=null,this._previewPlaneGridVisualElement=null,this._previewPlaneOutlineVisualElement=null,this._startPlane=x(),this._previewPlane=null,this._activeKeyModifiers={},this._lastCursorPosition=d(),this._resizeHandles=[{direction:[1,0]},{direction:[1,1]},{direction:[0,1]},{direction:[-1,1]},{direction:[-1,0]},{direction:[-1,-1]},{direction:[0,-1]},{direction:[1,-1]}],this._intersector=Mt(t.view.state.viewingMode),this._intersector.options.store=Dt.MIN}initialize(){if(null==this.analysis)throw new Error("SliceTool requires valid analysis, but null was provided.");this._rotateHeadingImage=yt(this.view.toolViewManager.textures),this._rotateTiltImage=mt(this.view.toolViewManager.textures);const t=t=>{this._updateManipulatorsInteractive(t),t.grabbing||(r(this.analysisViewData.plane)&&I(this.analysisViewData.plane,this._startPlane),this.inputState=null)};this.shiftManipulator=Y(this.view),this.manipulators.add(this.shiftManipulator),this.shiftManipulator.events.on("grab-changed",(e=>{this._onShiftGrab(e),t(this.shiftManipulator)})),this._handles.add(this._createShiftDragPipeline(this.shiftManipulator)),this.rotateHeadingManipulator=$(this.view,this._rotateHeadingImage.texture),this.manipulators.add(this.rotateHeadingManipulator),this.rotateHeadingManipulator.events.on("grab-changed",(e=>{this._onRotateHeadingGrab(e),t(this.rotateHeadingManipulator)})),this._handles.add(this._createRotateHeadingDragPipeline(this.rotateHeadingManipulator)),this.rotateTiltManipulator=$(this.view,this._rotateTiltImage.texture),this.manipulators.add(this.rotateTiltManipulator),this.rotateTiltManipulator.events.on("grab-changed",(e=>{this._onRotateTiltGrab(e),t(this.rotateTiltManipulator)})),this._handles.add(this._createRotateTiltDragPipeline(this.rotateTiltManipulator)),this.resizeManipulators=this._resizeHandles.map(((e,i)=>{const a=tt(this.view,e);return a.events.on("grab-changed",(e=>{this._onResizeGrab(e,i),t(a)})),this._handles.add(this._createResizeDragPipeline(a)),a})),this.manipulators.addMany(this.resizeManipulators),this._previewPlaneGridVisualElement=et(this.view),this._previewPlaneOutlineVisualElement=it(this.view),this._previewPlaneOutlineVisualElement.width=F,this._handles.add(h((()=>this.analysisViewData.plane),(()=>this._updateManipulators()),p));const e=h((()=>this.state),(t=>{"sliced"===t&&this.finishToolCreation()}),u);this._handles.add([e,h((()=>this.view.state.camera),(()=>this._onCameraChange()))])}destroy(){this._rotateHeadingImage=s(this._rotateHeadingImage),this._rotateTiltImage=s(this._rotateTiltImage),this._handles=n(this._handles),this._viewHandles=n(this._viewHandles),this._removeFrameTask(),this._clearPointerMoveTimeout(),this._previewPlaneOutlineVisualElement=n(this._previewPlaneOutlineVisualElement),this._previewPlaneGridVisualElement=n(this._previewPlaneGridVisualElement)}get state(){const t=!!this.analysisViewData.plane,e=!!this.inputState;return t?t&&e?"slicing":t&&!e?"sliced":"ready":"ready"}get cursor(){return this._isPlacingSlicePlane||"exclude"===this.layersMode?"crosshair":r(this._creatingPointerId)?"grabbing":null}set analysis(t){if(null==t)throw new Error("SliceTool requires valid analysis, but null was provided.");this._handles.remove("analysis"),this._set("analysis",t)}get inputState(){return this._get("inputState")}set inputState(t){this._set("inputState",t),this.analysisViewData.showGrid=r(t)&&"resize"===t.type,this._updateMaterials()}get _isPlacingSlicePlane(){return!this.inputState&&!this.analysisViewData.plane&&this.active}get _creatingPointerId(){return r(this.inputState)&&"shift"===this.inputState.type?this.inputState.creatingPointerId:null}enterExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","exclude"),this.active||(this.view.activeTool=this))}exitExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","none"),this.active&&(this.view.activeTool=null))}onDeactivate(){this._set("layersMode","none"),this._updatePreviewPlane(null)}onShow(){this._updateVisibility(!0)}onHide(){this._updateVisibility(!1)}_updateVisibility(t){this._updateManipulators(),t||this._clearPointerMoveTimeout()}onInputEvent(t){switch(t.type){case"pointer-drag":if(!Ht(t))return;this._isPlacingSlicePlane?this._onClickPlacePlane(t)&&t.stopPropagation():this._onPointerDrag(t)&&t.stopPropagation();break;case"pointer-move":this._onPointerMove(t);break;case"pointer-up":this._onPointerUp(t)&&t.stopPropagation();break;case"immediate-click":if(!Ht(t))return;this._onClickPlacePlane(t)&&t.stopPropagation();break;case"click":if(!Ht(t))return;this._onClickExcludeLayer(t)&&t.stopPropagation();break;case"drag":this.inputState&&t.stopPropagation();break;case"key-down":this._onKeyDown(t)&&t.stopPropagation();break;case"key-up":this._onKeyUp(t)&&t.stopPropagation()}}onEditableChange(){this.analysisViewData.editable=this.editable}_onPointerDrag(t){const e=this.inputState;if(t.pointerId===this._creatingPointerId&&r(e)&&"shift"===e.type){const i=bt(t);return this.shiftManipulator.events.emit("drag",{action:e.hasBeenDragged?"update":"start",pointerType:t.pointerType,start:i,screenPoint:i}),e.hasBeenDragged=!0,!0}return!1}_onPointerMove(t){this._lastCursorPosition.x=t.x,this._lastCursorPosition.y=t.y,this._resetPointerMoveTimeout(),"touch"!==t.pointerType&&this._updatePreviewPlane(bt(t),this._activeKeyModifiers)}_onCameraChange(){this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),this._updateManipulators()}_onPointerUp(t){if(t.pointerId===this._creatingPointerId&&r(this.analysisViewData.plane)){const e=bt(t);return this.shiftManipulator.events.emit("drag",{action:"end",start:e,screenPoint:e}),I(this.analysisViewData.plane,this._startPlane),this.inputState=null,!0}return!1}_onClickPlacePlane(t){if("exclude"===this.layersMode)return!1;if(this._isPlacingSlicePlane){const i=bt(t),a=x();if(this._pickPlane(i,!1,this._activeKeyModifiers,a)){if(I(a,this._startPlane),this.analysis.shape=at(a,this.view,this.view.spatialReference,new e),"pointer-drag"===t.type){const e=this._calculatePickRay(i);this.inputState=St(e,t.pointerId,a.origin,a)}return!0}}return!1}_onClickExcludeLayer(t){return!("exclude"!==this.layersMode||!this.created)&&(this.view.hitTest(bt(t)).then((t=>{if(t.results.length){const e=t.results[0],i="graphic"===e?.type&&e.graphic;if(i){const t=i.sourceLayer||i.layer;t&&this.analysis.excludedLayers.push(t)}}else t.ground.layer?this.analysis.excludedLayers.push(t.ground.layer):this.analysis.excludeGroundSurface=!0})),this._set("layersMode","none"),this.active&&(this.view.activeTool=null),!0)}_onKeyDown(t){return(t.key===N||t.key===q)&&(this._activeKeyModifiers[t.key]=!0,r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onKeyUp(t){return!(t.key!==N&&t.key!==q||!this._activeKeyModifiers[t.key])&&(delete this._activeKeyModifiers[t.key],r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onShiftGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=this._calculatePickRay(t.screenPoint);I(this.analysisViewData.plane,this._startPlane),this.inputState=St(e,null,this.shiftManipulator.renderLocation,this.analysisViewData.plane)}_createShiftDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"shift"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.shiftPlane)).next(this._shiftDragAdjustSensitivity(a)).next(this._shiftDragUpdatePlane(a)),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_shiftDragAdjustSensitivity(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=.001,a=Math.min((1-Math.abs(f(R(this.analysisViewData.plane),e.ray.direction)/M(e.ray.direction)))/i,1),s=-C(this._startPlane.plane,e.renderEnd),n=-C(this._startPlane.plane,t.startPoint);return t.depth=t.depth*(1-a)+s*a-n,e}}_shiftDragUpdatePlane(t){return()=>{if(l(this.analysisViewData.plane))return;const e=D(L.get(),this._startPlane.origin),i=D(L.get(),R(this._startPlane));T(i,i,-t.depth),V(i,i,e);const a=j(i,this.analysisViewData.plane.basis1,this.analysisViewData.plane.basis2,x());this._updateBoundedPlane(a)}}_onRotateHeadingGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.HEADING,O()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateHeadingDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_onRotateTiltGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.TILT,O()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateTiltDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_rotateDragRenderPlaneToRotate(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=G(t.rotatePlane),a=gt(t.startPoint,e.renderEnd,this.analysisViewData.plane.origin,i);return{...e,rotateAxis:i,rotateAngle:a}}}_rotateDragUpdatePlaneFromRotate(){return t=>{if(l(this.analysisViewData.plane))return;const e=m(K.get(),t.rotateAngle,t.rotateAxis);if(l(e))return;const i=b(L.get(),this._startPlane.basis1,e),a=b(L.get(),this._startPlane.basis2,e),s=j(this.analysisViewData.plane.origin,i,a,x());this._updateBoundedPlane(s)}}_onResizeGrab(t,e){if("start"!==t.action||l(this.analysisViewData.plane))return;const i=this._calculatePickRay(t.screenPoint),a=L.get();z(this.analysisViewData.plane.plane,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"resize",activeHandleIdx:e,startPoint:S(a)})}_createResizeDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"resize"!==a.type||l(this.analysisViewData.plane))return;const s=I(this.analysisViewData.plane,x());e.next(wt(this.view,this.analysisViewData.plane.plane)).next(this._resizeDragUpdatePlane(a)),i.next((()=>{this._updateBoundedPlane(s)}))}))}_resizeDragUpdatePlane(t){return e=>{if(l(this.analysisViewData.plane))return;const i=this._resizeHandles[t.activeHandleIdx],a=rt(i,t.startPoint,e.renderEnd,this.view.state.camera,this._startPlane,I(this.analysisViewData.plane));this._updateBoundedPlane(a)}}_updateBoundedPlane(t){const e=this.analysisViewData;if(!r(e))throw new Error("valid internal object expected");e.plane=t}_updatePreviewPlane(t,e={}){let i=this._previewPlane;if(this._previewPlane=null,l(t))return this._removeFrameTask(),void this._updateManipulators();if(!this.analysisViewData.plane&&this.active){const a=r(i)?i:x();if(i=r(i)?I(i,xt):null,this._pickPlane(t,!0,e,a)){const t=Q;let e=!1;r(i)&&(e=f(i.plane,a.plane)<t||f(k(L.get(),i.basis1),k(L.get(),a.basis1))<t),e&&(this._previewPlaneOpacity=0),this._previewPlane=a}}r(this._previewPlane)&&l(this._frameTask)&&0===this._previewPlaneOpacity?this._frameTask=c({update:({deltaTime:t})=>{this._previewPlaneOpacity=Math.min(this._previewPlaneOpacity+t/(1e3*W),1),this._updateManipulators(),1===this._previewPlaneOpacity&&this._removeFrameTask()}}):l(this._previewPlane)&&r(this._frameTask)?this._removeFrameTask():r(this._previewPlane)&&this._updateManipulators()}_removeFrameTask(){this._frameTask=o(this._frameTask)}_calculatePickRay(t){const e=U(),i=_(t,It);return ft(this.view.state.camera,i,e),k(e.direction,e.direction),e}_pickMinResult(t){const e=_(t,A.get());return this.view.sceneIntersectionHelper.intersectToolIntersectorScreen(e,this._intersector),this._intersector.results.min}_pickPlane(t,e,i,a){const s=this._pickMinResult(t),n=L.get();if(!s.getIntersectionPoint(n))return!1;const r=s.getTransformedNormal(L.get()),l=this.view.state.camera;f(r,l.viewForward)>0&&T(r,r,-1);const o=lt(n,l),h=(e?1:-1)*o*X,p=T(L.get(),r,h);V(p,p,n);const u=this.analysis.tiltEnabled?ot.TILTED:ot.HORIZONTAL_OR_VERTICAL,c=i[N]?ot.VERTICAL:i[q]?ot.HORIZONTAL:u;return ht(p,r,o,o,l,c,this.view.renderCoordsHelper,a),!0}_clearPointerMoveTimeout(){this._prevPointerMoveTimeout=o(this._prevPointerMoveTimeout)}_resetPointerMoveTimeout(){this._clearPointerMoveTimeout(),this.shiftManipulator.state|=pt,this.rotateHeadingManipulator.state|=pt,this.rotateTiltManipulator.state|=pt,this._prevPointerMoveTimeout=this._clock.setTimeout((()=>{this.shiftManipulator.state&=~pt,this.rotateHeadingManipulator.state&=~pt,this.rotateTiltManipulator.state&=~pt}),this._pointerMoveTimerMs)}_updateManipulators(){if(kt.disableEngineLayers)return;let t=null,e=!1;if(r(this.analysisViewData.plane))t=this.analysisViewData.plane,e=!1;else{if(!r(this._previewPlane))return this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!1,void(this._previewPlaneGridVisualElement.visible=!1);t=this._previewPlane,e=!0}const i=ut(t,K.get());e?(this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!0,this._previewPlaneGridVisualElement.visible=!0):(this.shiftManipulator.available=!0,this.rotateHeadingManipulator.available=!0,this.rotateTiltManipulator.available=this.analysis.tiltEnabled,this.resizeManipulators.forEach((t=>t.available=!0)),ct(this.shiftManipulator,i,t,this.view.state.camera),dt(this.rotateHeadingManipulator,i,t,this.view.renderCoordsHelper),_t(this.rotateTiltManipulator,i,t),this.resizeManipulators.forEach(((e,a)=>vt(e,this._resizeHandles[a],i,t))),this._previewPlaneOutlineVisualElement.visible=!1,this._previewPlaneGridVisualElement.visible=!1);const a=E(L.get(),M(t.basis1),M(t.basis2),1),s=g(K.get(),a),n=w(s,i,s);this._previewPlaneOutlineVisualElement.transform=n,this._previewPlaneGridVisualElement.transform=n,this._updateMaterials()}_updateMaterials(){const t=[Z[0],Z[1],Z[2],Z[3]*this._previewPlaneOpacity];this._previewPlaneOutlineVisualElement.color=t;const e=[J[0],J[1],J[2],J[3]*this._previewPlaneOpacity],i=[0,0,0,0];this._previewPlaneGridVisualElement.backgroundColor=e,this._previewPlaneGridVisualElement.gridColor=i}_updateManipulatorsInteractive(t){if(!t.grabbing)return this.shiftManipulator.interactive=!0,this.rotateHeadingManipulator.interactive=!0,this.rotateTiltManipulator.interactive=!0,void this.resizeManipulators.forEach((t=>{t.interactive=!0}));this.shiftManipulator.interactive=this.shiftManipulator===t,this.rotateHeadingManipulator.interactive=this.rotateHeadingManipulator===t,this.rotateTiltManipulator.interactive=this.rotateTiltManipulator===t,this.resizeManipulators.forEach((e=>{e.interactive=e===t}))}testData(){return{plane:this.analysisViewData.plane,setPointerMoveTimerMs:t=>{this._pointerMoveTimerMs=t}}}};function St(t,e,i,a){const s=Pt(i,R(a),t.direction,O()),n=H();return z(s,t,n)?{type:"shift",creatingPointerId:e,hasBeenDragged:!1,shiftPlane:s,depth:0,startPoint:n}:null}function Ht(t){return"mouse"!==t.pointerType||0===t.button}Et.disableEngineLayers=!1,t([P()],Et.prototype,"_clock",void 0),t([P({constructOnly:!0})],Et.prototype,"view",void 0),t([P()],Et.prototype,"analysisViewData",void 0),t([P({readOnly:!0})],Et.prototype,"state",null),t([P({readOnly:!0})],Et.prototype,"cursor",null),t([P()],Et.prototype,"analysis",null),t([P()],Et.prototype,"removeIncompleteOnCancel",void 0),t([P({readOnly:!0})],Et.prototype,"layersMode",void 0),t([P({value:null})],Et.prototype,"inputState",null),t([P()],Et.prototype,"_isPlacingSlicePlane",null),t([P()],Et.prototype,"_creatingPointerId",null),Et=kt=t([y("esri.views.3d.analysis.Slice.SliceTool")],Et);const xt=x(),It=v(),Rt=Et;export{Rt as default};
|
|
5
|
+
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../analysis/SlicePlane.js";import{clock as i}from"../../../../core/clock.js";import a from"../../../../core/Handles.js";import{releaseMaybe as s,destroyMaybe as n,isSome as r,isNone as l,removeMaybe as o}from"../../../../core/maybe.js";import{watch as h,sync as p,syncAndInitial as u}from"../../../../core/reactiveUtils.js";import{addFrameTask as c}from"../../../../core/scheduling.js";import{createScreenPoint as d,screenPointObjectToArray as _,createScreenPointArray as v}from"../../../../core/screenUtils.js";import{property as P}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../../core/accessorSupport/decorators/subclass.js";import{d as m,C as g,m as w}from"../../../../chunks/mat4.js";import{e as f,l as M,c as D,g as T,a as V,v as b,n as k,s as E}from"../../../../chunks/vec3.js";import{a as S,c as H}from"../../../../chunks/vec3f64.js";import{a as x,c as I,n as R,f as j}from"../../../../chunks/boundedPlane.js";import{signedDistance as C,create as O,intersectRay as z,normal as G}from"../../../../geometry/support/plane.js";import{create as U}from"../../../../geometry/support/ray.js";import{sv3d as L,sm4d as K,sv2d as A}from"../../../../geometry/support/vectorStacks.js";import{POINTER_MOVE_TIMER_MS as B,PLANE_PREVIEW_OUTLINE_WIDTH as F,forceVerticalModifier as N,forceHorizontalModifier as q,PLANE_OUTLINE_COLOR as Z,PLANE_BACKGROUND_COLOR as J,PREVIEW_FADE_DOT_THRESHOLD as Q,PREVIEW_FADE_DURATION_SECONDS as W,INITIAL_DEPTH_OFFSET_FRAC as X}from"./sliceToolConfig.js";import{createShiftManipulator as Y,createRotateManipulator as $,createResizeManipulator as tt,createGridVisualElement as et,createOutlineVisualElement as it,planeToShape as at,createRotatePlane as st,RotationAxis as nt,resizePlane as rt,calculatePlaneHalfSize as lt,SliceOrientation as ot,createPlane as ht,DidPointerMoveRecentlyFlag as pt,calculateBoundedPlaneTranslateRotate as ut,updateShiftRestartHandle as ct,updateRotateHeadingHandle as dt,updateRotateTiltHandle as _t,updateResizeHandle as vt,createShiftPlane as Pt}from"./sliceToolUtils.js";import{getRotateHeadingTexture as yt,getTiltRotateTexture as mt}from"./images/Factory.js";import{calculateInputRotationTransform as gt}from"../../interactive/manipulatorUtils.js";import{screenToRenderPlane as wt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{fromScreen as ft}from"../../support/geometryUtils/ray.js";import{newIntersector as Mt}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as Dt}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{AnalysisToolBase as Tt}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as Vt}from"../../../interactive/dragEventPipeline.js";import{createScreenPointFromEvent as bt}from"../../../support/screenUtils.js";var kt;let Et=kt=class extends Tt{constructor(t){super(t),this._clock=i,this._previewPlaneOpacity=1,this.removeIncompleteOnCancel=!1,this.layersMode="none",this.shiftManipulator=null,this.rotateHeadingManipulator=null,this.rotateTiltManipulator=null,this.resizeManipulators=null,this._handles=new a,this._viewHandles=new a,this._frameTask=null,this._pointerMoveTimerMs=B,this._prevPointerMoveTimeout=null,this._previewPlaneGridVisualElement=null,this._previewPlaneOutlineVisualElement=null,this._startPlane=x(),this._previewPlane=null,this._activeKeyModifiers={},this._lastCursorPosition=d(),this._resizeHandles=[{direction:[1,0]},{direction:[1,1]},{direction:[0,1]},{direction:[-1,1]},{direction:[-1,0]},{direction:[-1,-1]},{direction:[0,-1]},{direction:[1,-1]}],this._intersector=Mt(t.view.state.viewingMode),this._intersector.options.store=Dt.MIN}initialize(){if(null==this.analysis)throw new Error("SliceTool requires valid analysis, but null was provided.");this._rotateHeadingImage=yt(this.view.toolViewManager.textures),this._rotateTiltImage=mt(this.view.toolViewManager.textures);const t=t=>{this._updateManipulatorsInteractive(t),t.grabbing||(r(this.analysisViewData.plane)&&I(this.analysisViewData.plane,this._startPlane),this.inputState=null)};this.shiftManipulator=Y(this.view),this.manipulators.add(this.shiftManipulator),this.shiftManipulator.events.on("grab-changed",(e=>{this._onShiftGrab(e),t(this.shiftManipulator)})),this._handles.add(this._createShiftDragPipeline(this.shiftManipulator)),this.rotateHeadingManipulator=$(this.view,this._rotateHeadingImage.texture),this.manipulators.add(this.rotateHeadingManipulator),this.rotateHeadingManipulator.events.on("grab-changed",(e=>{this._onRotateHeadingGrab(e),t(this.rotateHeadingManipulator)})),this._handles.add(this._createRotateHeadingDragPipeline(this.rotateHeadingManipulator)),this.rotateTiltManipulator=$(this.view,this._rotateTiltImage.texture),this.manipulators.add(this.rotateTiltManipulator),this.rotateTiltManipulator.events.on("grab-changed",(e=>{this._onRotateTiltGrab(e),t(this.rotateTiltManipulator)})),this._handles.add(this._createRotateTiltDragPipeline(this.rotateTiltManipulator)),this.resizeManipulators=this._resizeHandles.map(((e,i)=>{const a=tt(this.view,e);return a.events.on("grab-changed",(e=>{this._onResizeGrab(e,i),t(a)})),this._handles.add(this._createResizeDragPipeline(a)),a})),this.manipulators.addMany(this.resizeManipulators),this._previewPlaneGridVisualElement=et(this.view),this._previewPlaneOutlineVisualElement=it(this.view),this._previewPlaneOutlineVisualElement.width=F,this._handles.add(h((()=>this.analysisViewData.plane),(()=>this._updateManipulators()),p));const e=h((()=>this.state),(t=>{"sliced"===t&&this.finishToolCreation()}),u);this._handles.add([e,h((()=>this.view.state.camera),(()=>this._onCameraChange()))])}destroy(){this._rotateHeadingImage=s(this._rotateHeadingImage),this._rotateTiltImage=s(this._rotateTiltImage),this._handles=n(this._handles),this._viewHandles=n(this._viewHandles),this._removeFrameTask(),this._clearPointerMoveTimeout(),this._previewPlaneOutlineVisualElement=n(this._previewPlaneOutlineVisualElement),this._previewPlaneGridVisualElement=n(this._previewPlaneGridVisualElement)}get state(){const t=!!this.analysisViewData.plane,e=!!this.inputState;return t?t&&e?"slicing":t&&!e?"sliced":"ready":"ready"}get cursor(){return this._isPlacingSlicePlane||"exclude"===this.layersMode?"crosshair":r(this._creatingPointerId)?"grabbing":null}set analysis(t){if(null==t)throw new Error("SliceTool requires valid analysis, but null was provided.");this._handles.remove("analysis"),this._set("analysis",t)}get inputState(){return this._get("inputState")}set inputState(t){this._set("inputState",t),this.analysisViewData.showGrid=r(t)&&"resize"===t.type,this._updateMaterials()}get _isPlacingSlicePlane(){return!this.inputState&&!this.analysisViewData.plane&&this.active}get _creatingPointerId(){return r(this.inputState)&&"shift"===this.inputState.type?this.inputState.creatingPointerId:null}enterExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","exclude"),this.active||(this.view.activeTool=this))}exitExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","none"),this.active&&(this.view.activeTool=null))}onDeactivate(){this._set("layersMode","none"),this._updatePreviewPlane(null)}onShow(){this._updateVisibility(!0)}onHide(){this._updateVisibility(!1)}_updateVisibility(t){this._updateManipulators(),t||this._clearPointerMoveTimeout()}onInputEvent(t){switch(t.type){case"pointer-drag":if(!Ht(t))return;this._isPlacingSlicePlane?this._onClickPlacePlane(t)&&t.stopPropagation():this._onPointerDrag(t)&&t.stopPropagation();break;case"pointer-move":this._onPointerMove(t);break;case"pointer-up":this._onPointerUp(t)&&t.stopPropagation();break;case"immediate-click":if(!Ht(t))return;this._onClickPlacePlane(t)&&t.stopPropagation();break;case"click":if(!Ht(t))return;this._onClickExcludeLayer(t)&&t.stopPropagation();break;case"drag":this.inputState&&t.stopPropagation();break;case"key-down":this._onKeyDown(t)&&t.stopPropagation();break;case"key-up":this._onKeyUp(t)&&t.stopPropagation()}}onEditableChange(){this.analysisViewData.editable=this.editable}_onPointerDrag(t){const e=this.inputState;if(t.pointerId===this._creatingPointerId&&r(e)&&"shift"===e.type){const i=bt(t);return this.shiftManipulator.events.emit("drag",{action:e.hasBeenDragged?"update":"start",pointerType:t.pointerType,start:i,screenPoint:i}),e.hasBeenDragged=!0,!0}return!1}_onPointerMove(t){this._lastCursorPosition.x=t.x,this._lastCursorPosition.y=t.y,this._resetPointerMoveTimeout(),"touch"!==t.pointerType&&this._updatePreviewPlane(bt(t),this._activeKeyModifiers)}_onCameraChange(){this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),this._updateManipulators()}_onPointerUp(t){if(t.pointerId===this._creatingPointerId&&r(this.analysisViewData.plane)){const e=bt(t);return this.shiftManipulator.events.emit("drag",{action:"end",start:e,screenPoint:e}),I(this.analysisViewData.plane,this._startPlane),this.inputState=null,!0}return!1}_onClickPlacePlane(t){if("exclude"===this.layersMode)return!1;if(this._isPlacingSlicePlane){const i=bt(t),a=x();if(this._pickPlane(i,!1,this._activeKeyModifiers,a)){if(I(a,this._startPlane),this.analysis.shape=at(a,this.view,this.view.spatialReference,new e),"pointer-drag"===t.type){const e=this._calculatePickRay(i);this.inputState=St(e,t.pointerId,a.origin,a)}return!0}}return!1}_onClickExcludeLayer(t){return!("exclude"!==this.layersMode||!this.created)&&(this.view.hitTest(bt(t)).then((t=>{if(t.results.length){const e=t.results[0],i="graphic"===e?.type&&e.graphic;if(i){const t=i.sourceLayer||i.layer;t&&this.analysis.excludedLayers.push(t)}}else t.ground.layer?this.analysis.excludedLayers.push(t.ground.layer):this.analysis.excludeGroundSurface=!0})),this._set("layersMode","none"),this.active&&(this.view.activeTool=null),!0)}_onKeyDown(t){return(t.key===N||t.key===q)&&(this._activeKeyModifiers[t.key]=!0,r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onKeyUp(t){return!(t.key!==N&&t.key!==q||!this._activeKeyModifiers[t.key])&&(delete this._activeKeyModifiers[t.key],r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onShiftGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=this._calculatePickRay(t.screenPoint);I(this.analysisViewData.plane,this._startPlane),this.inputState=St(e,null,this.shiftManipulator.renderLocation,this.analysisViewData.plane)}_createShiftDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"shift"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.shiftPlane)).next(this._shiftDragAdjustSensitivity(a)).next(this._shiftDragUpdatePlane(a)),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_shiftDragAdjustSensitivity(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=.001,a=Math.min((1-Math.abs(f(R(this.analysisViewData.plane),e.ray.direction)/M(e.ray.direction)))/i,1),s=-C(this._startPlane.plane,e.renderEnd),n=-C(this._startPlane.plane,t.startPoint);return t.depth=t.depth*(1-a)+s*a-n,e}}_shiftDragUpdatePlane(t){return()=>{if(l(this.analysisViewData.plane))return;const e=D(L.get(),this._startPlane.origin),i=D(L.get(),R(this._startPlane));T(i,i,-t.depth),V(i,i,e);const a=j(i,this.analysisViewData.plane.basis1,this.analysisViewData.plane.basis2,x());this._updateBoundedPlane(a)}}_onRotateHeadingGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.HEADING,O()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateHeadingDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_onRotateTiltGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.TILT,O()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateTiltDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_rotateDragRenderPlaneToRotate(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=G(t.rotatePlane),a=gt(t.startPoint,e.renderEnd,this.analysisViewData.plane.origin,i);return{...e,rotateAxis:i,rotateAngle:a}}}_rotateDragUpdatePlaneFromRotate(){return t=>{if(l(this.analysisViewData.plane))return;const e=m(K.get(),t.rotateAngle,t.rotateAxis);if(l(e))return;const i=b(L.get(),this._startPlane.basis1,e),a=b(L.get(),this._startPlane.basis2,e),s=j(this.analysisViewData.plane.origin,i,a,x());this._updateBoundedPlane(s)}}_onResizeGrab(t,e){if("start"!==t.action||l(this.analysisViewData.plane))return;const i=this._calculatePickRay(t.screenPoint),a=L.get();z(this.analysisViewData.plane.plane,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"resize",activeHandleIdx:e,startPoint:S(a)})}_createResizeDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"resize"!==a.type||l(this.analysisViewData.plane))return;const s=I(this.analysisViewData.plane,x());e.next(wt(this.view,this.analysisViewData.plane.plane)).next(this._resizeDragUpdatePlane(a)),i.next((()=>{this._updateBoundedPlane(s)}))}))}_resizeDragUpdatePlane(t){return e=>{if(l(this.analysisViewData.plane))return;const i=this._resizeHandles[t.activeHandleIdx],a=rt(i,t.startPoint,e.renderEnd,this.view.state.camera,this._startPlane,I(this.analysisViewData.plane));this._updateBoundedPlane(a)}}_updateBoundedPlane(t){const e=this.analysisViewData;if(!r(e))throw new Error("valid internal object expected");e.plane=t}_updatePreviewPlane(t,e={}){let i=this._previewPlane;if(this._previewPlane=null,l(t))return this._removeFrameTask(),void this._updateManipulators();if(!this.analysisViewData.plane&&this.active){const a=r(i)?i:x();if(i=r(i)?I(i,xt):null,this._pickPlane(t,!0,e,a)){const t=Q;let e=!1;r(i)&&(e=f(i.plane,a.plane)<t||f(k(L.get(),i.basis1),k(L.get(),a.basis1))<t),e&&(this._previewPlaneOpacity=0),this._previewPlane=a}}r(this._previewPlane)&&l(this._frameTask)&&0===this._previewPlaneOpacity?this._frameTask=c({update:({deltaTime:t})=>{this._previewPlaneOpacity=Math.min(this._previewPlaneOpacity+t/(1e3*W),1),this._updateManipulators(),1===this._previewPlaneOpacity&&this._removeFrameTask()}}):l(this._previewPlane)&&r(this._frameTask)?this._removeFrameTask():r(this._previewPlane)&&this._updateManipulators()}_removeFrameTask(){this._frameTask=o(this._frameTask)}_calculatePickRay(t){const e=U(),i=_(t,It);return ft(this.view.state.camera,i,e),k(e.direction,e.direction),e}_pickMinResult(t){const e=_(t,A.get());return this.view.sceneIntersectionHelper.intersectToolIntersectorScreen(e,this._intersector),this._intersector.results.min}_pickPlane(t,e,i,a){const s=this._pickMinResult(t),n=L.get();if(!s.getIntersectionPoint(n))return!1;const r=s.getTransformedNormal(L.get()),l=this.view.state.camera;f(r,l.viewForward)>0&&T(r,r,-1);const o=lt(n,l),h=(e?1:-1)*o*X,p=T(L.get(),r,h);V(p,p,n);const u=this.analysis.tiltEnabled?ot.TILTED:ot.HORIZONTAL_OR_VERTICAL,c=i[N]?ot.VERTICAL:i[q]?ot.HORIZONTAL:u;return ht(p,r,o,o,l,c,this.view.renderCoordsHelper,a),!0}_clearPointerMoveTimeout(){this._prevPointerMoveTimeout=o(this._prevPointerMoveTimeout)}_resetPointerMoveTimeout(){this._clearPointerMoveTimeout(),this.shiftManipulator.state|=pt,this.rotateHeadingManipulator.state|=pt,this.rotateTiltManipulator.state|=pt,this._prevPointerMoveTimeout=this._clock.setTimeout((()=>{this.shiftManipulator.state&=~pt,this.rotateHeadingManipulator.state&=~pt,this.rotateTiltManipulator.state&=~pt}),this._pointerMoveTimerMs)}_updateManipulators(){if(kt.disableEngineLayers)return;let t=null,e=!1;if(r(this.analysisViewData.plane))t=this.analysisViewData.plane,e=!1;else{if(!r(this._previewPlane))return this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!1,void(this._previewPlaneGridVisualElement.visible=!1);t=this._previewPlane,e=!0}const i=ut(t,K.get());e?(this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!0,this._previewPlaneGridVisualElement.visible=!0):(this.shiftManipulator.available=!0,this.rotateHeadingManipulator.available=!0,this.rotateTiltManipulator.available=this.analysis.tiltEnabled,this.resizeManipulators.forEach((t=>t.available=!0)),ct(this.shiftManipulator,i,t,this.view.state.camera),dt(this.rotateHeadingManipulator,i,t,this.view.renderCoordsHelper),_t(this.rotateTiltManipulator,i,t),this.resizeManipulators.forEach(((e,a)=>vt(e,this._resizeHandles[a],i,t))),this._previewPlaneOutlineVisualElement.visible=!1,this._previewPlaneGridVisualElement.visible=!1);const a=E(L.get(),M(t.basis1),M(t.basis2),1),s=g(K.get(),a),n=w(s,i,s);this._previewPlaneOutlineVisualElement.transform=n,this._previewPlaneGridVisualElement.transform=n,this._updateMaterials()}_updateMaterials(){const t=[Z[0],Z[1],Z[2],Z[3]*this._previewPlaneOpacity];this._previewPlaneOutlineVisualElement.color=t;const e=[J[0],J[1],J[2],J[3]*this._previewPlaneOpacity],i=[0,0,0,0];this._previewPlaneGridVisualElement.backgroundColor=e,this._previewPlaneGridVisualElement.gridColor=i}_updateManipulatorsInteractive(t){if(!t.grabbing)return this.shiftManipulator.interactive=!0,this.rotateHeadingManipulator.interactive=!0,this.rotateTiltManipulator.interactive=!0,void this.resizeManipulators.forEach((t=>{t.interactive=!0}));this.shiftManipulator.interactive=this.shiftManipulator===t,this.rotateHeadingManipulator.interactive=this.rotateHeadingManipulator===t,this.rotateTiltManipulator.interactive=this.rotateTiltManipulator===t,this.resizeManipulators.forEach((e=>{e.interactive=e===t}))}testData(){return{plane:this.analysisViewData.plane,setPointerMoveTimerMs:t=>{this._pointerMoveTimerMs=t}}}};function St(t,e,i,a){const s=Pt(i,R(a),t.direction,O()),n=H();return z(s,t,n)?{type:"shift",creatingPointerId:e,hasBeenDragged:!1,shiftPlane:s,depth:0,startPoint:n}:null}function Ht(t){return"mouse"!==t.pointerType||0===t.button}Et.disableEngineLayers=!1,t([P()],Et.prototype,"_clock",void 0),t([P({constructOnly:!0})],Et.prototype,"view",void 0),t([P()],Et.prototype,"analysisViewData",void 0),t([P({readOnly:!0})],Et.prototype,"state",null),t([P({readOnly:!0})],Et.prototype,"cursor",null),t([P()],Et.prototype,"analysis",null),t([P()],Et.prototype,"removeIncompleteOnCancel",void 0),t([P({readOnly:!0})],Et.prototype,"layersMode",void 0),t([P({value:null})],Et.prototype,"inputState",null),t([P()],Et.prototype,"_isPlacingSlicePlane",null),t([P()],Et.prototype,"_creatingPointerId",null),Et=kt=t([y("esri.views.3d.analysis.Slice.SliceTool")],Et);const xt=x(),It=v(),Rt=Et;export{Rt as default};
|