diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..378649ff6e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,28 @@ +Build +Build.bat +/build/ +deps/build +MYMETA.json +MYMETA.yml +_build +blib +xs/buildtmp +*.o +*.log +MANIFEST.bak +xs/MANIFEST.bak +xs/assertlib* +.init_bundle.ini +.vs/* +local-lib +/src/TAGS +/.vscode/ +build-linux/* +deps/build-linux/* +**/.DS_Store +install_* +build_*/ +SVG +Dockerfile +DockerBuild.sh +DockerRun.sh diff --git a/.github/workflows/build_ubuntu.yml b/.github/workflows/build_ubuntu.yml new file mode 100644 index 0000000000..7e1adf506e --- /dev/null +++ b/.github/workflows/build_ubuntu.yml @@ -0,0 +1,44 @@ +name: Build Linux + +on: [pull_request] + +jobs: + appimage-builder: + name: Linux AppImage Build + + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install cmake libgl1-mesa-dev libgtk-3-dev libxkbcommon-dev libunwind-dev libfuse2 -y + - name: Install dependencies from BuildLinux.sh + shell: bash + run: sudo ./BuildLinux.sh -ur + - name: Fix permissions + shell: bash + run: sudo chown $USER -R ./ + - name: Build deps + id: cache_deps + uses: actions/cache@v3 + env: + cache-name: ${{ runner.os }}-cache-bambustudio_deps_x64 + with: + path: ${{ github.workspace }}/deps/build/destdir + key: build-${{ env.cache-name }} + + - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + name: Build deps + working-directory: ${{ github.workspace }} + continue-on-error: true + run: ./BuildLinux.sh -dsr + + - name: Build Studio + shell: bash + run: ./BuildLinux.sh -ir + - uses: actions/upload-artifact@v3 + with: + name: BambuStudio_Linux + path: './build/BambuStudio_ubu64.AppImage' diff --git a/.gitignore b/.gitignore index b55be7f71e..985f0f60ff 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,6 @@ local-lib build-linux/* deps/build-linux/* **/.DS_Store -install_dir -install_release +install_* +build_*/ SVG diff --git a/DockerBuild.sh b/DockerBuild.sh new file mode 100755 index 0000000000..3546bf2b83 --- /dev/null +++ b/DockerBuild.sh @@ -0,0 +1,15 @@ +#!/bin/bash +PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)") + +set -x + +# Wishlist hint: For developers, creating a Docker Compose +# setup with persistent volumes for the build & deps directories +# would speed up recompile times significantly. For end users, +# the simplicity of a single Docker image and a one-time compilation +# seems better. +docker build -t bambustudio \ + --build-arg USER=$USER \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + $PROJECT_ROOT diff --git a/DockerRun.sh b/DockerRun.sh new file mode 100755 index 0000000000..31319fb810 --- /dev/null +++ b/DockerRun.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -x +# Just in case, here's some other things that might help: +# Force the container's hostname to be the same as your workstation +# -h $HOSTNAME \ +# If there's problems with the X display, try this +# -v /tmp/.X11-unix:/tmp/.X11-unix \ +docker run \ + `# Use the hosts networking. Printer wifi and also dbus communication` \ + --net=host \ + `# Run as your workstations username to keep permissions the same` \ + -u $USER \ + `# Bind mount your home directory into the container for loading/saving files` \ + -v $HOME:/home/$USER \ + `# Pass the X display number to the container` \ + -e DISPLAY=$DISPLAY \ + `# It seems that libGL and dbus things need privileged mode` \ + --privileged=true \ + `# Attach tty for running bambu with command line things` \ + -ti \ + `# Pass all parameters from this script to the bambu ENTRYPOINT binary` \ + bambustudio $* + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..3f34d66a29 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,92 @@ +FROM docker.io/ubuntu:20.04 +LABEL maintainer "DeftDawg " + +# Disable interactive package configuration +RUN apt-get update && \ + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + autoconf \ + build-essential \ + cmake \ + curl \ + eglexternalplatform-dev \ + extra-cmake-modules \ + file \ + git \ + libcairo2-dev \ + libcurl4-openssl-dev \ + libdbus-1-dev \ + libglew-dev \ + libglu1-mesa-dev \ + libglu1-mesa-dev \ + libgstreamer1.0-dev \ + libgstreamerd-3-dev \ + libgstreamer-plugins-base1.0-dev \ + libgstreamer-plugins-good1.0-dev \ + libgtk-3-dev \ + libgtk-3-dev \ + libmspack-dev \ + libosmesa6-dev \ + libsecret-1-dev \ + libsoup2.4-dev \ + libssl-dev \ + libudev-dev \ + libwayland-dev \ + libwebkit2gtk-4.0-dev \ + libxkbcommon-dev \ + locales \ + locales-all \ + m4 \ + pkgconf \ + sudo \ + wayland-protocols \ + wget + +# Change your locale here if you want. See the output +# of `locale -a` to pick the correct string formatting. +ENV LC_ALL=en_US.utf8 +RUN locale-gen $LC_ALL + +# Set this so that Bambu Studio doesn't complain about +# the CA cert path on every startup +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt + +COPY ./ BambuStudio + +WORKDIR BambuStudio + +# These can run together, but we run them seperate for podman caching +# Update System dependencies +RUN ./BuildLinux.sh -u + +# Build dependencies in ./deps +RUN ./BuildLinux.sh -d + +# Build slic3r +RUN ./BuildLinux.sh -s + +# Build AppImage +ENV container podman +RUN ./BuildLinux.sh -i + +# It's easier to run Bambu Studio as the same username, +# UID and GID as your workstation. Since we bind mount +# your home directory into the container, it's handy +# to keep permissions the same. Just in case, defaults +# are root. +SHELL ["/bin/bash", "-l", "-c"] +ARG USER=root +ARG UID=0 +ARG GID=0 +RUN [[ "$UID" != "0" ]] \ + && groupadd -g $GID $USER \ + && useradd -u $UID -g $GID $USER + +# Using an entrypoint instead of CMD because the binary +# accepts several command line arguments. +ENTRYPOINT ["/BambuStudio/build/package/bin/bambu-studio"] diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po new file mode 100644 index 0000000000..6a8cc762b1 --- /dev/null +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -0,0 +1,9244 @@ +msgid "" +msgstr "" +"Project-Id-Version: Bambu Studio\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.2.2\n" + +msgid "Supports Painting" +msgstr "サポートペイント" + +msgid "Alt + Mouse wheel" +msgstr "Alt + マウスホイール" + +msgid "Section view" +msgstr "断面" + +msgid "Reset direction" +msgstr "方向をリセット" + +msgid "Ctrl + Mouse wheel" +msgstr "Ctrl + スクロール" + +msgid "Pen size" +msgstr "ペンサイズ" + +msgid "Left mouse button" +msgstr "マウスの左ボタン" + +msgid "Enforce supports" +msgstr "サポートを強制的に有効" + +msgid "Right mouse button" +msgstr "右マウスボタン" + +msgid "Block supports" +msgstr "サポートをブロックする" + +msgid "Shift + Left mouse button" +msgstr "Shift + マウスの左ボタン" + +msgid "Erase" +msgstr "消去" + +msgid "Erase all painting" +msgstr "全てを消去" + +msgid "Highlight overhang areas" +msgstr "オーバーハングをハイライト" + +msgid "Gap fill" +msgstr "隙間充填" + +msgid "Perform" +msgstr "適用" + +msgid "Gap area" +msgstr "隙間領域" + +msgid "Tool type" +msgstr "ツールタイプ" + +msgid "Smart fill angle" +msgstr "自動充填角度" + +msgid "On overhangs only" +msgstr "オーバーハングのみ" + +msgid "Auto support threshold angle: " +msgstr "自動サポート角度閾値" + +msgid "Circle" +msgstr "円形" + +msgid "Sphere" +msgstr "球体" + +msgid "Fill" +msgstr "塗りつぶし" + +msgid "Gap Fill" +msgstr "隙間充填" + +#, boost-format +msgid "Allows painting only on facets selected by: \"%1%\"" +msgstr "%1%で選択した面だけをペイントする" + +msgid "Highlight faces according to overhang angle." +msgstr "オーバーハングの角度によりハイライト" + +msgid "No auto support" +msgstr "自動サポート無し" + +msgid "Support Generated" +msgstr "生成されたサポート" + +msgid "Lay on face" +msgstr "底面選択" + +#, boost-format +msgid "" +"Filament count exceeds the maximum number that painting tool supports. only " +"the first %1% filaments will be available in painting tool." +msgstr "" +"使用するフィラメント数は多いです。最初%1%個のフィラメントを使用できます" + +msgid "Color Painting" +msgstr "色塗り" + +msgid "Pen shape" +msgstr "ペンの形" + +msgid "Paint" +msgstr "ペイント" + +msgid "Key 1~9" +msgstr "キー 1~9" + +msgid "Choose filament" +msgstr "フィラメントを選択" + +msgid "Edge detection" +msgstr "エッジ検出" + +msgid "Triangles" +msgstr "三角形" + +msgid "Filaments" +msgstr "フィラメント" + +msgid "Brush" +msgstr "ブラシ" + +msgid "Smart fill" +msgstr "自動充填" + +msgid "Bucket fill" +msgstr "塗りつぶしバッチ処理" + +msgid "Height range" +msgstr "高さ範囲" + +msgid "Ctrl + Shift + Enter" +msgstr "Ctrl + Shift + Enter" + +msgid "Toggle Wireframe" +msgstr "ワイヤフレームの表示/非表示" + +msgid "Shortcut Key " +msgstr "ショートカット" + +msgid "Triangle" +msgstr "三角形" + +msgid "Height Range" +msgstr "高さ範囲" + +msgid "Remove painted color" +msgstr "塗った色を消去" + +#, boost-format +msgid "Painted using: Filament %1%" +msgstr "フィラメント %1%でペイントします" + +msgid "Move" +msgstr "移動" + +msgid "Rotate" +msgstr "回転" + +msgid "Optimize orientation" +msgstr "向きを最適化" + +msgid "Apply" +msgstr "適用" + +msgid "Scale" +msgstr "スケール" + +msgid "Error: Please close all toolbar menus first" +msgstr "エラー: ツールバーを閉じてください" + +msgid "Tool-Lay on Face" +msgstr "ツール 底面選択" + +msgid "in" +msgstr "に" + +msgid "mm" +msgstr "mm" + +msgid "Position" +msgstr "位置" + +msgid "Rotation" +msgstr "回転" + +msgid "Scale ratios" +msgstr "倍率" + +msgid "Object Operations" +msgstr "オブジェクト操作" + +msgid "Volume Operations" +msgstr "操作" + +msgid "Translate" +msgstr "移動" + +msgid "Group Operations" +msgstr "グループ操作" + +msgid "Set Position" +msgstr "位置を設定" + +msgid "Set Orientation" +msgstr "向きを設定" + +msgid "Set Scale" +msgstr "スケールを設定" + +msgid "Reset Position" +msgstr "位置をリセット" + +msgid "Reset Rotation" +msgstr "回転をリセット" + +msgid "World coordinates" +msgstr "空間座標" + +msgid "°" +msgstr "°" + +msgid "Size" +msgstr "サイズ" + +msgid "%" +msgstr "%" + +msgid "uniform scale" +msgstr "スケール" + +msgid "Cut" +msgstr "カット" + +msgid "Movement:" +msgstr "移動" + +msgid "Movement" +msgstr "移動" + +msgid "Height" +msgstr "高度" + +msgid "Keep upper part" +msgstr "上の部分を残す" + +msgid "Keep lower part" +msgstr "下の部分を残す" + +msgid "Cut to parts" +msgstr "パーツに割り切る" + +msgid "Auto Segment" +msgstr "自動分割" + +msgid "Perform cut" +msgstr "カットを実行" + +msgid "Reset" +msgstr "リセット" + +msgid "Mesh name" +msgstr "メッシュ名" + +msgid "Detail level" +msgstr "細部レベル" + +msgid "Decimate ratio" +msgstr "比率" + +#, boost-format +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"モデル %1% には百万以上の三角形が入るため、処理するのに時間がかかる場合があり" +"ます。" + +msgid "Simplify model" +msgstr "モデルを簡略化" + +msgid "Simplify" +msgstr "簡略化" + +msgid "Simplification is currently only allowed when a single part is selected" +msgstr "簡略化は 1 つのパーツのみに使用できます" + +msgid "Error" +msgstr "エラー" + +msgid "Extra high" +msgstr "超高い" + +msgid "High" +msgstr "高い" + +msgid "Medium" +msgstr "中位" + +msgid "Low" +msgstr "低い" + +msgid "Extra low" +msgstr "超低い" + +#, c-format, boost-format +msgid "%d triangles" +msgstr "%d 個の三角形" + +msgid "Show wireframe" +msgstr "ワイヤフレームを表示" + +#, boost-format +msgid "%1%" +msgstr "%1%" + +msgid "Can't apply when proccess preview." +msgstr "プレビュー処理中は適用できません" + +msgid "Cancel" +msgstr "取消し" + +msgid "Operation already cancelling. Please wait few seconds." +msgstr "操作を取り消し中、少々お待ちください。" + +msgid "Face recognition" +msgstr "外観認識" + +msgid "Perform Recognition" +msgstr "認識を実行" + +msgid "Brush size" +msgstr "サイズ" + +msgid "Brush shape" +msgstr "ブラシタイプ" + +msgid "Enforce seam" +msgstr "強制継ぎ目" + +msgid "Block seam" +msgstr "ブロック継ぎ目" + +msgid "Seam painting" +msgstr "継ぎ目ペイント" + +msgid "Remove selection" +msgstr "選択を削除" + +msgid "Shift + Mouse move up or dowm" +msgstr "" + +msgid "Rotate text" +msgstr "" + +msgid "Text shape" +msgstr "文字形状" + +msgid "Font" +msgstr "フォント" + +msgid "Thickness" +msgstr "太さ" + +msgid "Input text" +msgstr "テキスト" + +msgid "Embeded" +msgstr "" + +msgid "Text Gap" +msgstr "" + +msgid "Angle" +msgstr "" + +msgid "" +"Embeded\n" +"depth" +msgstr "" + +msgid "Surface" +msgstr "" + +msgid "Horizontal text" +msgstr "" + +msgid "Notice" +msgstr "通知" + +msgid "Warning" +msgstr "警告" + +msgid "Undefined" +msgstr "未定義" + +#, boost-format +msgid "%1% was replaced with %2%" +msgstr "%1% は %2% に置き換えられました" + +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "構成データは、これより新しいBambu Studioで作成された可能性があります" + +msgid "Some values have been replaced. Please check them:" +msgstr "変更された値があります、ご確認ください:" + +msgid "Process" +msgstr "プロセス" + +msgid "Filament" +msgstr "フィラメント" + +msgid "Machine" +msgstr "プリンター" + +msgid "Configuration package was loaded, but some values were not recognized." +msgstr "構成パッケージをロードしましたが、一部認識できない設定があります" + +#, boost-format +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "構成ファイル %1% がロードされましたが、一部の値が認識できませんでした" + +msgid "V" +msgstr "V" + +msgid "Internal Version" +msgstr "内部バージョン" + +msgid "Version" +msgstr "バージョン" + +msgid "" +"BambuStudio will terminate because of running out of memory.It may be a bug. " +"It will be appreciated if you report the issue to our team." +msgstr "" +"メモリの割り当てに異常がありました、間も無く終了いたします。弊社サポートチー" +"ムへご連絡ください。" + +msgid "Fatal error" +msgstr "重大なエラー" + +msgid "" +"BambuStudio will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "エラーが発生しました、Bambu Studioを再開してください。(Localization)" + +msgid "Critical error" +msgstr "重大なエラー" + +#, boost-format +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "異常がありました: %1%" + +msgid "Downloading Bambu Network Plug-in" +msgstr "Bambuネットワークプラグインをダウンロード" + +msgid "Incorrect password" +msgstr "パスワードが正しくありません" + +#, c-format, boost-format +msgid "Connect %s failed! [SN:%s, code=%s]" +msgstr "%s を接続できませんでした [SN: %s、code = %s]" + +msgid "" +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." +msgstr "" +"設定ファイルは解析できません、ファイルが壊れている可能性があります。ファイル" +"を削除して、もう一度試してください。" + +#, c-format, boost-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" +"%s\n" +"続行しますか?" + +msgid "Remember my choice" +msgstr "私の選択を保存する" + +msgid "Loading configuration" +msgstr "構成を読込み中" + +#, c-format, boost-format +msgid "Click to download new version in default browser: %s" +msgstr "新バージョンをダウンロードするにはクリックしてください: %s" + +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio をアップデートする必要があります" + +msgid "This is the newest version." +msgstr "最新バージョンです。" + +msgid "Info" +msgstr "情報" + +msgid "Rebuild" +msgstr "再構築" + +msgid "Loading current presets" +msgstr "プリセットを読込む" + +msgid "Loading a mode view" +msgstr "モードビューをロード" + +msgid "Choose one file (3mf):" +msgstr "ファイルを選択 (3mf):" + +msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "ファイルを選択 (3mf/step/stl/svg/obj/amf)" + +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "ファイルを選択 (.gcode/.gco/.g/.ngc/ngc):" + +msgid "Some presets are modified." +msgstr "プリセットが変更されました。" + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "変更したプリセットをデフォルトとして保存できます" + +msgid "User logged out" +msgstr "ユーザがサインアウトしました" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "スライス中には、プロジェクトを新規作成や開くことができません" + +msgid "Open Project" +msgstr "プロジェクトを開く" + +msgid "" +"The version of Bambu studio is too low and needs to be updated to the latest " +"version before it can be used normally" +msgstr "" +"現在のBambu Studioはバージョンが古いため使用できません、アップデートしてくだ" +"さい。" + +msgid "Login information expired. Please login again." +msgstr "サインイン情報の有効期限切れ、もう一度サインインしてください" + +msgid "Privacy Policy Update" +msgstr "" + +msgid "Loading" +msgstr "ロード中" + +msgid "Loading user preset" +msgstr "ユーザープリセットを読込み中" + +msgid "Switching application language" +msgstr "アプリケーション言語の切り替え" + +msgid "Select the language" +msgstr "言語を選択" + +msgid "Language" +msgstr "言語" + +msgid "*" +msgstr "*" + +msgid "The uploads are still ongoing" +msgstr "アップロード中" + +msgid "Stop them and continue anyway?" +msgstr "これらを止めて、続行しますか?" + +msgid "Ongoing uploads" +msgstr "進行中のアップロード" + +msgid "Select a G-code file:" +msgstr "G-codeファイルを選択" + +msgid "Import File" +msgstr "" + +msgid "Delete" +msgstr "削除" + +msgid "Choose files" +msgstr "ファイルを選択" + +msgid "New Folder" +msgstr "" + +msgid "Open" +msgstr "開く" + +msgid "Rename" +msgstr "名前を変更" + +msgid "Bambu Studio GUI initialization failed" +msgstr "GUI初期化に失敗した" + +#, boost-format +msgid "Fatal error, exception catched: %1%" +msgstr "重大なエラー: %1%" + +msgid "Quality" +msgstr "品質" + +msgid "Shell" +msgstr "シェル" + +msgid "Infill" +msgstr "インフィル" + +msgid "Support" +msgstr "サポート" + +msgid "Flush options" +msgstr "フラッシュオプション" + +msgid "Speed" +msgstr "速度" + +msgid "Strength" +msgstr "強度" + +msgid "Top Solid Layers" +msgstr "トップソリッド層" + +msgid "Top Minimum Shell Thickness" +msgstr "トップ面最小厚み" + +msgid "Bottom Solid Layers" +msgstr "底面ソリッド層" + +msgid "Bottom Minimum Shell Thickness" +msgstr "底面最小厚さ" + +msgid "Ironing" +msgstr "アイロン" + +msgid "Fuzzy Skin" +msgstr "ファジー壁面" + +msgid "Extruders" +msgstr "押出機" + +msgid "Extrusion Width" +msgstr "押出線幅" + +msgid "Wipe options" +msgstr "拭き上げ設定" + +msgid "Bed adhension" +msgstr "ベッド接着" + +msgid "Advanced" +msgstr "高度な設定" + +msgid "Add part" +msgstr "パーツを追加" + +msgid "Add negative part" +msgstr "マイナスパーツを追加" + +msgid "Add modifier" +msgstr "モディファイアを追加" + +msgid "Add support blocker" +msgstr "サポートを追加" + +msgid "Add support enforcer" +msgstr "サポート補強を追加" + +msgid "Select settings" +msgstr "設定を選択" + +msgid "Hide" +msgstr "非表示" + +msgid "Show" +msgstr "表示" + +msgid "Delete the selected object" +msgstr "選択したオブジェクトを削除" + +msgid "Edit Text" +msgstr "" + +msgid "Load..." +msgstr "ファイルを読込む" + +msgid "Cube" +msgstr "キューブ" + +msgid "Cylinder" +msgstr "シリンダー" + +msgid "Cone" +msgstr "コーン" + +msgid "Add settings" +msgstr "設定を追加" + +msgid "Change type" +msgstr "変更タイプ" + +msgid "Set as an individual object" +msgstr "個別オブジェクトとして設定" + +msgid "Set as individual objects" +msgstr "個別オブジェクトとして設定" + +msgid "Printable" +msgstr "造形可能" + +msgid "Fix model" +msgstr "モデルを修復" + +msgid "Export as STL" +msgstr "STL形式でエクスポート" + +msgid "Reload from disk" +msgstr "ディスクから再読込み" + +msgid "Reload the selected parts from disk" +msgstr "選択したパーツをディスクから再読込み" + +msgid "Replace with STL" +msgstr "STLに置き換え" + +msgid "Replace the selected part with new STL" +msgstr "選択したパーツを新しいSTLに置換え" + +msgid "Change filament" +msgstr "フィラメントを変更" + +msgid "Set filament for selected items" +msgstr "選択した項目のフィラメントを設定" + +msgid "Default" +msgstr "デフォルト" + +#, c-format, boost-format +msgid "Filament %d" +msgstr "フィラメント %d" + +msgid "active" +msgstr "アクティブ" + +msgid "Scale to build volume" +msgstr "ビルド容積に合わせる" + +msgid "Scale an object to fit the build volume" +msgstr "ビルド容積に合わせて伸縮する" + +msgid "Flush Options" +msgstr "フラッシュ設定" + +msgid "Flush into objects' infill" +msgstr "インフィルにフラッシュ" + +msgid "Flush into this object" +msgstr "このオブジェクトにフラッシュする" + +msgid "Flush into objects' support" +msgstr "サポートにフラッシュ" + +msgid "Edit in Parameter Table" +msgstr "パラメータテーブルで編集" + +msgid "Convert from inch" +msgstr "インチから変換" + +msgid "Restore to inch" +msgstr "インチ単位に復元" + +msgid "Convert from meter" +msgstr "メートルから変換" + +msgid "Restore to meter" +msgstr "メータル単位に復元" + +msgid "Assemble" +msgstr "組立てる" + +msgid "Assemble the selected objects to an object with multiple parts" +msgstr "選択したオブジェクトを一つオブジェクトに組み立てます(複数パーツ)" + +msgid "Assemble the selected objects to an object with single part" +msgstr "選択したオブジェクトを一つオブジェクトに組み立てます(単パーツ)" + +msgid "Assemble the selected parts to a single part" +msgstr "選択したパーツを一つのパーツに組み立てます" + +msgid "Along X axis" +msgstr "X軸方向" + +msgid "Mirror along the X axis" +msgstr "反転 (X軸)" + +msgid "Along Y axis" +msgstr "Y軸方向" + +msgid "Mirror along the Y axis" +msgstr "反転 (Y軸)" + +msgid "Along Z axis" +msgstr "Z軸方向" + +msgid "Mirror along the Z axis" +msgstr "反転 (Z軸)" + +msgid "Mirror" +msgstr "反転" + +msgid "Mirror object" +msgstr "オブジェクトを反転" + +msgid "Add Primitive" +msgstr "プリミティブを追加" + +msgid "Show Labels" +msgstr "ラベルを表示" + +msgid "To objects" +msgstr "オブジェクトに" + +msgid "Split the selected object into multiple objects" +msgstr "選択したオブジェクトを複数のオブジェクトに分割" + +msgid "To parts" +msgstr "パーツに" + +msgid "Split the selected object into multiple parts" +msgstr "選択したオブジェクトを複数のパーツに分割" + +msgid "Split" +msgstr "分割" + +msgid "Split the selected object" +msgstr "選択したオブジェクトを分割" + +msgid "Auto orientation" +msgstr "自動向き調整" + +msgid "Auto orient the object to improve print quality." +msgstr "オブジェクトの向きを自動的に調整する" + +msgid "Split the selected object into mutiple objects" +msgstr "選択したオブジェクトを複数のオブジェクトに分割" + +msgid "Split the selected object into mutiple parts" +msgstr "選択したオブジェクトを複数のパーツに分割" + +msgid "Select All" +msgstr "全てを選択" + +msgid "select all objects on current plate" +msgstr "現在のプレート上のすべてのオブジェクトを選択" + +msgid "Delete All" +msgstr "全てを削除" + +msgid "delete all objects on current plate" +msgstr "現在のプレート上の全てのオブジェクトを削除" + +msgid "Arrange" +msgstr "レイアウト" + +msgid "arrange current plate" +msgstr "現在のプレートをレイアウト" + +msgid "Auto Rotate" +msgstr "自動回転" + +msgid "auto rotate current plate" +msgstr "現在のプレートを自動回転させる" + +msgid "Remove the selected plate" +msgstr "選択したプレートを削除" + +msgid "Clone" +msgstr "複製" + +msgid "Simplify Model" +msgstr "モデルを簡略化" + +msgid "Center" +msgstr "センター" + +msgid "Edit Process Settings" +msgstr "プロセス設定を編集" + +msgid "Edit print parameters for a single object" +msgstr "一つのオブジェクトのパラメータを編集" + +msgid "Change Filament" +msgstr "フィラメントを変更" + +msgid "Set Filament for selected items" +msgstr "選択した項目のフィラメントを設定" + +msgid "current" +msgstr "現在" + +msgid "Set Unprintable" +msgstr "造形不可に設定" + +msgid "Set Printable" +msgstr "造形可能に設定" + +msgid "Unlock" +msgstr "ロック解除" + +msgid "Lock" +msgstr "ロック" + +msgid "Name" +msgstr "名称" + +msgid "Fila." +msgstr "Fila." + +#, c-format, boost-format +msgid "%1$d error repaired" +msgid_plural "%1$d errors repaired" +msgstr[0] "%1$dのエラーを修復しました" + +#, c-format, boost-format +msgid "Error: %1$d non-manifold edge." +msgid_plural "Error: %1$d non-manifold edges." +msgstr[0] "エラー: %1$d の非多様体エッジ" + +msgid "Remaining errors" +msgstr "残エラー" + +#, c-format, boost-format +msgid "%1$d non-manifold edge" +msgid_plural "%1$d non-manifold edges" +msgstr[0] "%1$dの非多様体エッジがあります" + +msgid "Right click the icon to fix model object" +msgstr "右クリックしオブジェクトを修復します" + +msgid "Right button click the icon to drop the object settings" +msgstr "右クリックしオブジェクト設定を開きます" + +msgid "Click the icon to reset all settings of the object" +msgstr "オブジェクトへの編集をリセットします" + +msgid "Right button click the icon to drop the object printable property" +msgstr "Right click the icon to drop the object printable property" + +msgid "Click the icon to toggle printable property of the object" +msgstr "オブジェクトの造形属性を切り替えます" + +msgid "Click the icon to edit support painting of the object" +msgstr "オブジェクトのサポートを編集します" + +msgid "Click the icon to edit color painting of the object" +msgstr "オブジェクトに色塗りをします" + +msgid "Loading file" +msgstr "ファイルを読み込み中" + +msgid "Error!" +msgstr "エラー!" + +msgid "Generic" +msgstr "一般" + +msgid "Add Modifier" +msgstr "モディファイアの追加" + +msgid "Switch to per-object setting mode to edit modifier settings." +msgstr "" +"オブジェクトごとの設定モードに切り替え、モディファイア設定を編集できます" + +msgid "" +"Switch to per-object setting mode to edit process settings of selected " +"objects." +msgstr "オブジェクト設定で、各オブジェクトの造形設定を指定できます。" + +msgid "Deleting the last solid part is not allowed." +msgstr "最後のソリッドパーツは削除できません。" + +msgid "The target object contains only one part and can not be splited." +msgstr "オブジェクトは一つだけのパーツが入っており、分割できません。" + +msgid "Assembly" +msgstr "アセンブリ" + +msgid "Object" +msgstr "OBJ" + +msgid "Part" +msgstr "パーツ" + +msgid "Layer" +msgstr "積層" + +msgid "Selection conflicts" +msgstr "選択の競合" + +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "" +"最初に選択したのがオブジェクトの場合、次に選択できるのがオブジェクトのみで" +"す。" + +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"最初に選択したがパーツの場合、次に選択できるのが同じオブジェクトのパーツ" + +msgid "The type of the last solid object part is not to be changed." +msgstr "オブジェクトの最後のパーツはタイプを変更できません。" + +msgid "Negative Part" +msgstr "マイナスパーツ" + +msgid "Modifier" +msgstr "モディファイア" + +msgid "Support Blocker" +msgstr "サポート除去器" + +msgid "Support Enforcer" +msgstr "サポート増強器" + +msgid "Type:" +msgstr "タイプ" + +msgid "Choose part type" +msgstr "パーツタイプを選択" + +msgid "Enter new name" +msgstr "新しい名前を入力" + +msgid "Renaming" +msgstr "名前を変更中" + +msgid "Repairing model object" +msgstr "モデルオブジェクトを修復" + +msgid "Following model object has been repaired" +msgid_plural "Following model objects have been repaired" +msgstr[0] "以下のモデルオブジェクトが修復されました。" + +msgid "Failed to repair folowing model object" +msgid_plural "Failed to repair folowing model objects" +msgstr[0] "以下のオブジェクトを修復てきませんでした" + +msgid "Repairing was canceled" +msgstr "修復は取消しました" + +msgid "Additional process preset" +msgstr "他のプリセット" + +msgid "Remove parameter" +msgstr "パラメータを削除" + +msgid "one cell can only be copied to one or multiple cells in the same column" +msgstr "一つのセルは、同じ列のセルにしかコピーできません" + +msgid "multiple cells copy is not supported" +msgstr "複数のセルのコピーには対応していません。" + +msgid "Outside" +msgstr "外側" + +msgid "Auto" +msgstr "自動" + +msgid "Manual" +msgstr "手動" + +msgid "No-brim" +msgstr "ブリム無し" + +msgid " " +msgstr "" + +msgid "Layer height" +msgstr "積層ピッチ" + +msgid "Wall loops" +msgstr "壁面層数" + +msgid "Infill density(%)" +msgstr "インフィル密度 (%)" + +msgid "Auto Brim" +msgstr "オートブリム" + +msgid "Outer wall speed" +msgstr "外壁造形速度" + +msgid "Plate" +msgstr "プレート" + +msgid "Brim" +msgstr "ブリム" + +msgid "Object/Part Setting" +msgstr "オブジェクト/パーツ設定" + +msgid "Reset parameter" +msgstr "パラメータをリセット" + +msgid "Multicolor Print" +msgstr "マルチカラー造形" + +msgid "Line Type" +msgstr "種類" + +msgid "More" +msgstr "詳細" + +msgid "Open Preferences." +msgstr "環境設定を開く" + +msgid "Open next tip." +msgstr "次のヒント" + +msgid "Open Documentation in web browser." +msgstr "ブラウザで開く" + +msgid "Custom G-code" +msgstr "カスタム G-code" + +msgid "Enter Custom G-code used on current layer:" +msgstr "現在の積層にカスタムG-codeを追加" + +msgid "OK" +msgstr "OK" + +msgid "Jump to layer" +msgstr "積層に移動" + +msgid "Please enter the layer number" +msgstr "層の番号をご入力ください" + +msgid "Add Pause" +msgstr "一時停止を追加" + +msgid "Add Custom G-code" +msgstr "カスタムG-codeを追加" + +msgid "Add Custom Template" +msgstr "カスタムテンプレートを追加" + +msgid "Jump to Layer" +msgstr "積層に移動" + +msgid "Filament " +msgstr "フィラメント" + +msgid "Start" +msgstr "開始" + +msgid "G-code" +msgstr "G-code" + +msgid "No printer" +msgstr "プリンタ無し" + +msgid "..." +msgstr "" + +msgid "?" +msgstr "?" + +msgid "Empty" +msgstr "空" + +msgid "AMS" +msgstr "AMS" + +msgid "AMS not connected" +msgstr "AMS が接続されていません" + +msgid "Cali" +msgstr "標定" + +msgid "Calibration of extrusion" +msgstr "押出のキャリブレーション" + +msgid "Load Filament" +msgstr "ロード" + +msgid "Unload Filament" +msgstr "アンロード" + +msgid "Ext Spool" +msgstr "外部スプールホルダー" + +msgid "Tips" +msgstr "ヒント" + +msgid "Guide" +msgstr "ガイド" + +msgid "Retry" +msgstr "再試行" + +msgid "Calibrating AMS..." +msgstr "AMS キャリブレーション" + +msgid "A problem occured during calibration. Click to view the solution." +msgstr "" +"キャリブレーション中に問題が発生しました。クリックして解決策をご確認くださ" +"い。" + +msgid "Calibrate again" +msgstr "再度キャリブレーションを行う" + +msgid "Cancel calibration" +msgstr "キャリブレーションを取消し" + +msgid "Heat the nozzle" +msgstr "ノズルを加熱" + +msgid "Cut filament" +msgstr "フィラメントを切る" + +msgid "Pull back current filament" +msgstr "フィラメントを引き戻す" + +msgid "Push new filament into extruder" +msgstr "フィラメントを押出機に押入れる" + +msgid "Purge old filament" +msgstr "古いフィラメントを排出" + +msgid "Feed new filament from external spool" +msgstr "" + +msgid "Confirm whether the filament has been extruded" +msgstr "" + +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filiament." +msgstr "" +"AMS スロットを選択し、[ロード] または [アンロード] をタップすると、フィラメン" +"トが自動的にロードまたはアンロードされます。" + +msgid "Edit" +msgstr "編集" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-arrange on these objects." +msgstr "" +"選択したオブジェクトはロックされたプレートにあるため、自動レイアウトできませ" +"ん" + +msgid "No arrangable objects are selected." +msgstr "選択したオブジェクトがレイアウト不可です" + +msgid "" +"This plate is locked,\n" +"We can not do auto-arrange on this plate." +msgstr "現在のプレートがロックされたため自動レイアウトできません" + +msgid "Arranging..." +msgstr "レイアウト中" + +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "レイアウトは失敗しました、ジオメトリーを処理するのに異常がありました" + +msgid "Arranging" +msgstr "レイアウト中" + +msgid "Arranging canceled." +msgstr "レイアウトを取り消しました" + +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"レイアウトは完了しましたが、一部レイアウトできないオブジェクトがあります。ス" +"ペースを調整してください。" + +msgid "Arranging done." +msgstr "レイアウト完了" + +#, c-format, boost-format +msgid "" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" +"%s" +msgstr "" +"一つのベッドに収まらないため、下記のオブジェクトを外しました:\n" +"%s" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-orient on these objects." +msgstr "" +"選択したオブジェクトはロックされたプレートにあるため、自動向き調整できませ" +"ん。" + +msgid "" +"This plate is locked,\n" +"We can not do auto-orient on this plate." +msgstr "" +"プレートがロックされています。\n" +"自動向き調整ができません。" + +msgid "Orienting..." +msgstr "向き調整中" + +msgid "Orienting" +msgstr "向き調整中" + +msgid "Error! Unable to create thread!" +msgstr "エラー:スレッドを作成できません" + +msgid "Exception" +msgstr "異常" + +msgid "Logging in" +msgstr "サインイン中" + +msgid "Login failed" +msgstr "サインイン失敗" + +msgid "The region parameter is incorrrect" +msgstr "地域が正しくありません" + +msgid "Failure of printer login" +msgstr "プリンター登録失敗" + +msgid "Failed to get ticket" +msgstr "チケットを取得できませんでした" + +msgid "User authorization timeout" +msgstr "ユーザー認証タイムアウト" + +msgid "Failure of bind" +msgstr "デバイス紐付け失敗" + +msgid "Unknown Failure" +msgstr "不明な失敗" + +msgid "Please check the printer network connection." +msgstr "プリンターとのネットワーク接続をご確認ください" + +msgid "Abnormal print file data. Please slice again" +msgstr "ファイルに異常があります、もう一度スライスしてください" + +msgid "Task canceled" +msgstr "タスクを取消しました" + +msgid "Upload task timed out. Please check the network problem and try again" +msgstr "" +"タスクのアップロードはタイムアウトしました。ネットワークをご確認ください。" + +msgid "Cloud service connection failed. Please try again." +msgstr "クラウドサービス接続できませんでした、もう一度お試しください" + +msgid "Print file not found, please slice again" +msgstr "造形ファイルを見つけませんでした、もう一度スライスしてください" + +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again" +msgstr "" +"ファイルサイズが 1GByteを超える為、読込みできません。モデルを修正してスライス" +"してください。" + +msgid "Failed uploading print file" +msgstr "ファイルをアップロードできませんでした" + +msgid "Wrong Access code" +msgstr "アクセスコードが間違っています" + +msgid "Sending print job over LAN" +msgstr "LAN経由で造形タスクを送信" + +msgid "Sending print job through cloud service" +msgstr "クラウド経由で造形タスクを送信" + +msgid "Service Unavailable" +msgstr "サービスは利用できません" + +msgid "Unkown Error." +msgstr "不明なエラー" + +msgid "Sending print configuration" +msgstr "構成を送信" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "送信しました、%s秒後デバイスページへ移動します" + +msgid "An SD card needs to be inserted before printing via LAN." +msgstr "SDカードが必要です" + +msgid "Failed to send the print job. Please try again." +msgstr "造形タスクを送信できませんでした、もう一度お試しください。" + +msgid "Send to Printer failed. Please try again." +msgstr "プリンターへの送信は失敗しました、もう一度お試しください。" + +msgid "No space left on Printer SD card" +msgstr "" + +msgid "Sending gcode file over LAN" +msgstr "LANでG-codeファイルを送信" + +msgid "Sending gcode file through cloud service" +msgstr "クラウドサービでG-codeファイルを送信" + +msgid "Sending gcode file to sdcard" +msgstr "G-codeファイルをSDカードに送信" + +#, c-format, boost-format +msgid "Successfully sent. Close current page in %s s" +msgstr "送信しました、%s秒後自動閉じます。" + +msgid "An SD card needs to be inserted before sending to printer." +msgstr "SDカードが必要です" + +msgid "Please log out and login to the printer again." +msgstr "一旦サインアウトし、再度サインインしてください" + +msgid "Failed uploading print file. Please enter ip address again." +msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" + +msgid "Choose SLA archive:" +msgstr "" + +msgid "Import file" +msgstr "" + +msgid "Import model and profile" +msgstr "" + +msgid "Import profile only" +msgstr "" + +msgid "Import model only" +msgstr "" + +msgid "Accurate" +msgstr "" + +msgid "Balanced" +msgstr "" + +msgid "Quick" +msgstr "" + +msgid "Importing SLA archive" +msgstr "" + +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" + +msgid "Importing canceled." +msgstr "" + +msgid "Importing done." +msgstr "" + +msgid "" +"The imported SLA archive did not contain any presets. The current SLA " +"presets were used as fallback." +msgstr "" + +msgid "You cannot load SLA project with a multi-part object on the bed" +msgstr "" + +msgid "Please check your object list before preset changing." +msgstr "" + +msgid "Attention!" +msgstr "注意!" + +msgid "Downloading" +msgstr "ダウンロード中" + +msgid "Download failed" +msgstr "ダウンロード失敗" + +msgid "Cancelled" +msgstr "取消し済" + +msgid "Install successfully." +msgstr "インストール完了" + +msgid "Installing" +msgstr "インストール中" + +msgid "Install failed" +msgstr "インストール失敗" + +msgid "Portions copyright" +msgstr "ライセンス情報" + +msgid "Copyright" +msgstr "著作権情報" + +msgid "License" +msgstr "ライセンス" + +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studioのライセンス" + +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, version 3" + +msgid "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" +msgstr "" +"Bambu StudioはPrusa Research社のPrusaSlicerをベースとして開発され、" +"Alessandro RanellucciさんのSlic3rとRepRapを特別に感謝します。" + +msgid "Libraries" +msgstr "ライブラリー" + +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"このソフトウェアは、著作権およびその他の所有権がそれぞれの所有者に属するオー" +"プン ソース コンポーネントを使用しています。" + +#, c-format, boost-format +msgid "About %s" +msgstr "%s について" + +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" +"Bambu StudioはPrusaResearch製のPrusaSlicerとMerill製のSuperSlicerに基づいて作" +"られています。" + +msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "" +"PrusaSlicer は、Alessandro Ranellucci 製の Slic3r に基づいて作られています。" + +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." + +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu StudioはUltimaker製のCuraも参考しています" + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"このソフトウェアはコミュニティから沢山の貢献をいただいております。全ての貢献" +"者を表示できませんが、ソースコードのコメントにも確認できます。" + +msgid "AMS Materials Setting" +msgstr "AMS素材設定" + +msgid "Confirm" +msgstr "確認" + +msgid "Close" +msgstr "閉じる" + +msgid "Colour" +msgstr "色" + +msgid "" +"Nozzle\n" +"Temperature" +msgstr "ノズル温度" + +msgid "max" +msgstr "最大" + +msgid "min" +msgstr "最小" + +#, boost-format +msgid "The input value should be greater than %1% and less than %2%" +msgstr "入力値範囲は %1% ~ %2%" + +msgid "SN" +msgstr "シリアル番号" + +msgid "Setting AMS slot information while printing is not supported" +msgstr "造形中に、AMSスロットを設定できません。" + +msgid "Factors of dynamic flow cali" +msgstr "流量標定係数" + +msgid "Factor K" +msgstr "係数K" + +msgid "Factor N" +msgstr "係数N" + +msgid "Setting Virtual slot information while printing is not supported" +msgstr "" + +msgid "Please input a valid value (K in 0~0.5)" +msgstr "有効な値を入力してください (0 ~ 0.5)" + +msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "有効な値を入力してください (K: 0 ~ 0.5, N: 0.6 ~ 2.0)" + +msgid "Dynamic flow calibration" +msgstr "流量キャリブレーション" + +msgid "" +"The nozzle temp and max volumetric speed will affect the calibration " +"results. Please fill in the same values as the actual printing. They can be " +"auto-filled by selecting a filament preset." +msgstr "ノズル温度と最大体積速度です。" + +msgid "Nozzle Diameter" +msgstr "ノズル直径" + +msgid "Bed Type" +msgstr "プレート" + +msgid "Nozzle temperature" +msgstr "ノズル温度" + +msgid "Bed Temperature" +msgstr "ベッド温度" + +msgid "Max volumetric speed" +msgstr "最大体積速度" + +msgid "\\u2103" +msgstr "u2103" + +msgid "Bed temperature" +msgstr "ベッド温度" + +msgid "mm\\u00B3" +msgstr "mmu00B3" + +msgid "Start calibration" +msgstr "開始" + +msgid "Next" +msgstr "次へ" + +msgid "" +"Calibration completed. Please find the most uniform extrusion line on your " +"hot bed like the picture below, and fill the value on its left side into the " +"factor K input box." +msgstr "" +"キャリブレーションが完了しました。下の写真のように、最も均一な押出ラインを確" +"認し、関連する係数Kを入力してください。" + +msgid "Save" +msgstr "保存" + +msgid "Last Step" +msgstr "戻る" + +msgid "Example" +msgstr "例" + +#, c-format, boost-format +msgid "Calibrating... %d%%" +msgstr "キャリブレーション中...%d%%" + +msgid "Calibration completed" +msgstr "キャリブレーション完了" + +#, c-format, boost-format +msgid "%s does not support %s" +msgstr "%s は %s をサポートしていません" + +msgid "Dynamic flow Calibration" +msgstr "流量キャリブレーション" + +msgid "Step" +msgstr "手順" + +msgid "AMS Slots" +msgstr "AMSスロット" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "注: 同じ素材がロードされた AMS スロットのみが選択できます。" + +msgid "Enable AMS" +msgstr "AMSを有効" + +msgid "Print with filaments in the AMS" +msgstr "AMSのフィラメントで造形します" + +msgid "Disable AMS" +msgstr "AMSを無効" + +msgid "Print with the filament mounted on the back of chassis" +msgstr "外部スプールホルダーのフィラメントで造形します" + +msgid "Cabin humidity" +msgstr "湿度" + +msgid "" +"Green means that AMS humidity is normal, orange represent humidity is high, " +"red represent humidity is too high.(Hygrometer: lower the better.)" +msgstr "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" + +msgid "Desiccant status" +msgstr "乾燥剤ステータス" + +msgid "" +"A desiccant status lower than two bars indicates that desiccant may be " +"inactive. Please change the desiccant.(The bars: higher the better.)" +msgstr "" +"乾燥剤のステータスがバー2本より低い場合は、乾燥効果が弱まっていることを示しま" +"す。乾燥剤の交換をお勧めします。" + +msgid "" +"Note: When the lid is open or the desiccant pack is changed, it can take " +"hours or a night to absorb the moisture. Low temperatures also slow down the " +"process. During this time, the indicator may not represent the chamber " +"accurately." +msgstr "" +"注意:蓋を開けたり、乾燥剤を交換したりすると、湿気を完全に吸収するのに数時間" +"かかるとこがあります。また、温度が低い時、更に時間が要する場合があります。こ" +"の時に、インジケータが筐体内の湿度を精確に反映できない可能性があります。" + +msgid "" +"Config which AMS slot should be used for a filament used in the print job" +msgstr "造形用のフィラメントに対するAMSスロットを設定" + +msgid "Filament used in this print job" +msgstr "使用フィラメント" + +msgid "AMS slot used for this filament" +msgstr "AMSスロット" + +msgid "Click to select AMS slot manually" +msgstr "AMS スロットを手動で選択" + +msgid "Do not Enable AMS" +msgstr "AMSを有効にしない" + +msgid "Print using materials mounted on the back of the case" +msgstr "外部スプールホルダーのフィラメントで造形します" + +msgid "Print with filaments in ams" +msgstr "AMSのフィラメントで造形します" + +msgid "Print with filaments mounted on the back of the chassis" +msgstr "外部スプールホルダーのフィラメントで造形します" + +msgid "AMS Settings" +msgstr "AMS 設定" + +msgid "Insertion update" +msgstr "挿入時に更新" + +msgid "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament. This takes about 20 seconds." +msgstr "" +"BambuLab純正フィラメントを入れると、フィラメント情報を自動的に読込みます(20" +"秒ほどかかります)" + +msgid "" +"Note: if new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "注意:造形時に入れる場合、造形が完成したから読込みます。" + +msgid "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." +msgstr "フィラメント情報を自動更新しません、手動で入力できます。" + +msgid "Power on update" +msgstr "起動時に自動更新" + +msgid "" +"The AMS will automatically read the information of inserted filament on " +"start-up. It will take about 1 minute.The reading process will roll filament " +"spools." +msgstr "" +"起動時、フィラメント情報を自動的に読込みます(60秒ほどかかります) 注意:読" +"込み時に、スプールが回転します。" + +msgid "" +"The AMS will not automatically read information from inserted filament " +"during startup and will continue to use the information recorded before the " +"last shutdown." +msgstr "フィラメント情報を自動更新しません、前回の情報を引き続き使用します。" + +msgid "Update remaining capacity" +msgstr "残量を更新" + +msgid "" +"The AMS will estimate Bambu filament's remaining capacity after the filament " +"info is updated. During printing, remaining capacity will be updated " +"automatically." +msgstr "" +"BambuLab純正フィラメントの場合、残量の推定を行います。造形時に、残量自動的に" +"更新します。" + +msgid "AMS auto switch filament" +msgstr "AMSフィラメント自動切替え" + +msgid "" +"AMS will continue to another spool with the same properties of filament " +"automatically when current filament runs out" +msgstr "使用中のフィラメントが切れた時に、同じ属性のフィラメントに切り替えます" + +msgid "File" +msgstr "ファイル" + +msgid "" +"Failed to download the plug-in. Please check your firewall settings and vpn " +"software, check and retry." +msgstr "" +"プラグインをダウンロードできませんでした。ファイアウォールやVPN設定をご確認く" +"ださい。" + +msgid "" +"Failed to install the plug-in. Please check whether it is blocked or deleted " +"by anti-virus software." +msgstr "プラグインをインストールできませんでした。ご確認ください。" + +msgid "click here to see more info" +msgstr "詳しくはこちら" + +msgid "Please home all axes (click " +msgstr "すべての軸を原点復帰してください(" + +msgid "" +") to locate the toolhead's position. This prevents device moving beyond the " +"printable boundary and causing equipment wear." +msgstr ")。造形可能領域外へ移動してしまうことを防ぎます。" + +msgid "Go Home" +msgstr "原点帰還" + +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "" +"エラーが発生しました。システムのメモリ不足か、不具合が発生した可能性がありま" +"す。" + +msgid "Please save project and restart the program. " +msgstr "プロジェクトを保存して、アプリケーションを再起動してください。" + +msgid "Processing G-Code from Previous file..." +msgstr "G-codeを処理中" + +msgid "Slicing complete" +msgstr "スライス完了" + +msgid "Access violation" +msgstr "アクセス違反" + +msgid "Illegal instruction" +msgstr "無効な指令" + +msgid "Divide by zero" +msgstr "ゼロで割る" + +msgid "Overflow" +msgstr "オーバーフロー" + +msgid "Underflow" +msgstr "アンダーフロー" + +msgid "Floating reserved operand" +msgstr "Floating reserved operand" + +msgid "Stack overflow" +msgstr "Stack Overflow" + +msgid "Unknown error when export G-code." +msgstr "不明なエラー: G-codeエクスポート" + +#, boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." +msgstr "" +"G-codeファイルを保存できませんでした。\n" +"エラーメッセージ:%1%\n" +"ソース ファイル %2%" + +#, boost-format +msgid "Succeed to export G-code to %1%" +msgstr "G-codeは %1%にエクスポートしました" + +msgid "Running post-processing scripts" +msgstr "後処理スクリプトを実行" + +msgid "Copying of the temporary G-code to the output G-code failed" +msgstr "G-codeの出力が失敗しました" + +#, boost-format +msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" +"%1%にタスクをスケジューリングしました、詳細は「ウインドウ→タスクキュー」にて" +"ご確認ください。" + +msgid "Origin" +msgstr "原点" + +msgid "Diameter" +msgstr "直径" + +msgid "Size in X and Y of the rectangular plate." +msgstr "プレート上のサイズ" + +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "矩形の左前の隅からGコード座標原点までの距離" + +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "ベットの直径。原点 (0, 0)がベットの中心に位置するとします。" + +msgid "Rectangular" +msgstr "長方形" + +msgid "Circular" +msgstr "円形" + +msgid "Custom" +msgstr "カスタム" + +msgid "Shape" +msgstr "形状" + +msgid "Load shape from STL..." +msgstr "STLからシェープデータを読込む" + +msgid "Settings" +msgstr "設定" + +msgid "Texture" +msgstr "テクスチャ" + +msgid "Remove" +msgstr "削除" + +msgid "Not found:" +msgstr "見つかりません" + +msgid "Model" +msgstr "モデル" + +msgid "Choose an STL file to import bed shape from:" +msgstr "STLファイル(ベッドシェープ)をインポート" + +msgid "Invalid file format." +msgstr "無効なファイル形式" + +msgid "Error! Invalid model" +msgstr "エラー: 無効なモデル" + +msgid "The selected file contains no geometry." +msgstr "選択したファイルにはジオメトリデータが入っていません" + +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "選択したファイルには、繋がっていない部分があります為使用できません" + +msgid "Choose a file to import bed texture from (PNG/SVG):" +msgstr "ベッドテクスチャをインポート(PNG/SVG)" + +msgid "Choose an STL file to import bed model from:" +msgstr "STLファイル(ベッドモデル)をインポート" + +msgid "Bed Shape" +msgstr "ベッド形状" + +msgid "" +"Nozzle may be blocked when the temperature is out of recommended range.\n" +"Please make sure whether to use the temperature to print.\n" +"\n" +msgstr "" +"温度が推奨温度範囲外です、ノズル詰りになる可能性があります。\n" +"続行する前に、ご確認ください。\n" + +#, c-format, boost-format +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "このフィラメントで推奨ノズル温度は %d ~ %d ℃です。" + +#, c-format, boost-format +msgid "" +"Bed temperature of other layer is lower than bed temperature of initial " +"layer for more than %d degree centigrade.\n" +"This may cause model broken free from build plate during printing" +msgstr "" +"ベッド温度が1層目温度より %d ℃以上低いです。造形中プレートより離脱する可能性" +"があります" + +msgid "" +"Bed temperature is higher than vitrification temperature of this filament.\n" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" +msgstr "" +"ベッド温度がフィラメントの軟化温度より高いです。ノズル詰りや造形失敗する可能" +"性があります。\n" +"ドアを開いて換気を良くするか、ベッド温度を下げてください。" + +msgid "" +"Too small max volumetric speed.\n" +"Reset to 0.5" +msgstr "値が小さすぎます、0.5に戻します" + +msgid "" +"Too small layer height.\n" +"Reset to 0.2" +msgstr "積層ピッチが小さすぎます、0.2にリセットされました" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "積層ピッチが大きいすぎます、0.2にリセットされました" + +msgid "" +"Too small ironing spacing.\n" +"Reset to 0.1" +msgstr "値が小さいです、0.1にリセットします" + +msgid "" +"Zero initial layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." +msgstr "1層目の高さが無効です、0.2mmにリセットします" + +msgid "" +"This setting is only used for model size tunning with small value in some " +"cases.\n" +"For example, when model size has small error and hard to be assembled.\n" +"For large size tuning, please use model scale function.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"この設定はオブジェクトサイズの微調整としてしようしてください。大きく調整する" +"場合は、スケーリングを使用してください。\n" +"\n" +"値を0にリセットします。" + +msgid "" +"Too large elefant foot compensation is unreasonable.\n" +"If really have serious elephant foot effect, please check other settings.\n" +"For example, whether bed temperature is too high.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"コーナーはみ出し補正値が大きいです。\n" +"コーナーはみ出しがまだ大きい場合、他の設定を確認してください。例えば、ベッド" +"温度を下げるなど。\n" +"\n" +"値は0にリセットします。" + +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional" +msgstr "" +"スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数を" +"0、充填密度を0にする必要があります" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"これらの設定を変更しますか?\n" +"はい - 変更して、スパイラルモードを有効にします\n" +"いいえ - 変更せず、スパイラルモードを有効しません" + +msgid "" +"Arachne engine only works when overhang slowing down is disabled.\n" +"This may cause decline in the quality of overhang surface when print fastly" +msgstr "" +"Arachneを使用するには、オーハーハング減速を無効にする必要があります。従って" +"オーバーハングの造形品質が劣る可能性があります。" + +msgid "" +"Disable overhang slowing down automatically? \n" +"Yes - Enable arachne and disable overhang slowing down\n" +"No - Give up using arachne this time" +msgstr "" +"オーバーハング減速を無効にしますか?\n" +"はい - Arachneを有効し、オーバーハング減速を無効にする\n" +"いいえ - Arachneを無効にします" + +msgid "" +"Prime tower does not work when Adaptive Layer Height or Independent Support " +"Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height and Independent Support Layer Height" +msgstr "" +"「アダプティブ積層ピッチ」、或は「独立サポート積層ピッチ」が有効の場合、プラ" +"イムタワーが使用できません。\n" +"どちらの設定にしますか?\n" +"はい - プライムタワーを有効にする\n" +"いいえ - 「アダプティブ積層ピッチ」と「独立サポート積層ピッチ」を有効にする" + +msgid "" +"Prime tower does not work when Adaptive Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height" +msgstr "" +"「アダプティブ積層ピッチ」が有効の為、プライムタワーが使用できません。\n" +"どちらの設定にしますか?\n" +"はい - プライムタワーを有効にする\n" +"いいえ - アダプティブ積層ピッチを有効にする" + +msgid "" +"Prime tower does not work when Independent Support Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Independent Support Layer Height" +msgstr "" +"「独立サポート積層ピッチ」が有効の場合、プライムタワーが使用できません。\n" +"どちらの設定にしますか?\n" +"はい - プライムタワーを有効にする\n" +"いいえ - 「独立サポート積層ピッチ」を有効にする" + +#, boost-format +msgid "%1% infill pattern doesn't support 100%% density." +msgstr "%1% のインフィル パターンは 100%% の密度をサポートしません。" + +msgid "" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" +"No - reset density to default non 100% value automaticlly" +msgstr "" +"直線パターンに切り替えますか?\n" +"はい - 直線パターンに切り替えます\n" +"いいえ - 充填密度をリセットします" + +msgid "" +"While printing by Object, the extruder may collide skirt.\n" +"Thus, reset the skirt layer to 1 to avoid that." +msgstr "" + +msgid "Auto bed leveling" +msgstr "自動ベッドレベリング" + +msgid "Heatbed preheating" +msgstr "ベッド予熱" + +msgid "Sweeping XY mech mode" +msgstr "XY軸特性を測定" + +msgid "Changing filament" +msgstr "フィラメントを交換" + +msgid "M400 pause" +msgstr "M400一時停止" + +msgid "Paused due to filament runout" +msgstr "フィラメント切れにより一時停止" + +msgid "Heating hotend" +msgstr "ヘッドを加熱" + +msgid "Calibrating extrusion" +msgstr "押出キャリブレーション" + +msgid "Scanning bed surface" +msgstr "ベッド表面を検査" + +msgid "Inspecting first layer" +msgstr "1層目を検査" + +msgid "Identifying build plate type" +msgstr "プレートタイプを識別" + +msgid "Calibrating Micro Lidar" +msgstr "ライダー キャリブレーション" + +msgid "Homing toolhead" +msgstr "ヘッドを原点帰還" + +msgid "Cleaning nozzle tip" +msgstr "ノズル先端をクリーニング" + +msgid "Checking extruder temperature" +msgstr "押出機温度を確認" + +msgid "Printing was paused by the user" +msgstr "ユーザにより一時停止" + +msgid "Pause of front cover falling" +msgstr "フロントカバーの脱落により一時停止" + +msgid "Calibrating the micro lida" +msgstr "ライダー キャリブレーション" + +msgid "Calibrating extrusion flow" +msgstr "押出流量キャリブレーション" + +msgid "Paused due to nozzle temperature malfunction" +msgstr "ノズル温度異常により一時停止" + +msgid "Paused due to heat bed temperature malfunction" +msgstr "ベッド温度異常により一時停止" + +msgid "MC" +msgstr "MC" + +msgid "MainBoard" +msgstr "メインボード" + +msgid "TH" +msgstr "TH" + +msgid "XCam" +msgstr "XCam" + +msgid "Unknown" +msgstr "不明" + +msgid "Fatal" +msgstr "重大的" + +msgid "Serious" +msgstr "重大な" + +msgid "Common" +msgstr "共通" + +msgid "Update successful." +msgstr "更新は完了しました。" + +msgid "Downloading failed." +msgstr "ダウンロード失敗" + +msgid "Verification failed." +msgstr "認証失敗" + +msgid "Update failed." +msgstr "更新が失敗しました。" + +msgid "Failed to start printing job" +msgstr "造形タスクを開始できませんでした" + +msgid "default" +msgstr "デフォルト" + +msgid "parameter name" +msgstr "パラメータ名" + +msgid "N/A" +msgstr "N/A" + +msgid "Invalid numeric." +msgstr "無効な数値" + +#, c-format, boost-format +msgid "%s can't be percentage" +msgstr "%s をパーセンテージにすることはできません" + +#, c-format, boost-format +msgid "Value %s is out of range, continue?" +msgstr "%s の値が範囲外です、続行しますか?" + +msgid "Parameter validation" +msgstr "パラメータ検証" + +msgid "Value is out of range." +msgstr "値が範囲外です。" + +#, c-format, boost-format +msgid "" +"Is it %s%% or %s %s?\n" +"YES for %s%%, \n" +"NO for %s %s." +msgstr "" +"%s%% か、それとも %s %sですか?\n" +"%s%% の場合ははい、 %s %s はいいえ。" + +#, boost-format +msgid "Invalid format. Expected vector format: \"%1%\"" +msgstr "無効なフォーマット、%1%であるはずです。" + +msgid "Layer Height" +msgstr "積層ピッチ" + +msgid "Line Width" +msgstr "押出線幅" + +msgid "Fan Speed" +msgstr "ファン回転速度" + +msgid "Temperature" +msgstr "温度" + +msgid "Flow" +msgstr "流量" + +msgid "Tool" +msgstr "ツール" + +msgid "Layer Time" +msgstr "積層時間" + +msgid "Height: " +msgstr "高度" + +msgid "Width: " +msgstr "幅" + +msgid "Speed: " +msgstr "速度" + +msgid "Flow: " +msgstr "フロー" + +msgid "Layer Time: " +msgstr "積層時間" + +msgid "Fan Speed: " +msgstr "ファン回転速度" + +msgid "Temperature: " +msgstr "温度" + +msgid "Loading G-codes" +msgstr "G-codeを読み込み" + +msgid "Generating geometry vertex data" +msgstr "ジオメトリ頂点データを生成" + +msgid "Generating geometry index data" +msgstr "ジオメトリ・インデックス・データを生成" + +msgid "Statistics of All Plates" +msgstr "" + +msgid "Display" +msgstr "表示" + +msgid "Flushed" +msgstr "フラッシュ" + +msgid "Total" +msgstr "合計" + +msgid "Total Time Estimation" +msgstr "" + +msgid "Total time" +msgstr "総時間" + +msgid "up to" +msgstr "最大" + +msgid "above" +msgstr "以上" + +msgid "from" +msgstr "from" + +msgid "to" +msgstr "→" + +msgid "Color Scheme" +msgstr "配色スキーム" + +msgid "Time" +msgstr "時間" + +msgid "Percent" +msgstr "%" + +msgid "Layer Height (mm)" +msgstr "積層ピッチ(mm)" + +msgid "Line Width (mm)" +msgstr "押出線幅(mm)" + +msgid "Speed (mm/s)" +msgstr "速度 (mm/s)" + +msgid "Fan Speed (%)" +msgstr "ファン回転速度 (%)" + +msgid "Temperature (°C)" +msgstr "温度 (°C)" + +msgid "Volumetric flow rate (mm³/s)" +msgstr "流量 (mm³/s)" + +msgid "Layer Time (s)" +msgstr "" + +msgid "Used filament" +msgstr "フィラメント使用量" + +msgid "Travel" +msgstr "移動" + +msgid "Seams" +msgstr "継ぎ目" + +msgid "Retract" +msgstr "リトラクション" + +msgid "Unretract" +msgstr "リトラクション回復" + +msgid "Filament Changes" +msgstr "フィラメント交換" + +msgid "Wipe" +msgstr "拭き上げ" + +msgid "Options" +msgstr "オプション" + +msgid "travel" +msgstr "移動" + +msgid "Extruder" +msgstr "押出機" + +msgid "Filament change times" +msgstr "フィラメント交換回数" + +msgid "Cost" +msgstr "コスト" + +msgid "Color change" +msgstr "色変更" + +msgid "Print" +msgstr "造形する" + +msgid "Pause" +msgstr "一時停止" + +msgid "Printer" +msgstr "プリンター" + +msgid "Print settings" +msgstr "造形設定" + +msgid "Total Estimation" +msgstr "予測合計" + +msgid "Time Estimation" +msgstr "予測時間" + +msgid "Normal mode" +msgstr "通常モード" + +msgid "Prepare time" +msgstr "準備時間" + +msgid "Model printing time" +msgstr "モデル造形時間" + +msgid "Switch to silent mode" +msgstr "サイレントモードに切り替える" + +msgid "Switch to normal mode" +msgstr "通常モードに切り替え" + +msgid "Variable layer height" +msgstr "可変積層ピッチ" + +msgid "Adaptive" +msgstr "アダプティブ" + +msgid "Quality / Speed" +msgstr "品質/速度" + +msgid "Smooth" +msgstr "滑らか目" + +msgid "Radius" +msgstr "半径" + +msgid "Keep min" +msgstr "最小限に抑える" + +msgid "Left mouse button:" +msgstr "マウス左ボタン" + +msgid "Add detail" +msgstr "詳細を追加" + +msgid "Right mouse button:" +msgstr "マウス右ボタン" + +msgid "Remove detail" +msgstr "詳細を削除" + +msgid "Shift + Left mouse button:" +msgstr "Shift + マウス左ボタン" + +msgid "Reset to base" +msgstr "ベースにリセット" + +msgid "Shift + Right mouse button:" +msgstr "Shift + マウス右ボタン" + +msgid "Smoothing" +msgstr "スムージング" + +msgid "Mouse wheel:" +msgstr "マウスホイール" + +msgid "Increase/decrease edit area" +msgstr "編集領域を拡大/縮小" + +msgid "Sequence" +msgstr "順番" + +msgid "Mirror Object" +msgstr "オブジェクトを反転" + +msgid "Tool Move" +msgstr "ツール 移動" + +msgid "Move Object" +msgstr "オブジェクトを移動" + +msgid "Auto Orientation options" +msgstr "向き調整オプション" + +msgid "Enable rotation" +msgstr "回転を有効" + +msgid "Optimize support interface area" +msgstr "サポート接触面を最適化" + +msgid "Orient" +msgstr "向き調整" + +msgid "Arrange options" +msgstr "レイアウト設定" + +msgid "Spacing" +msgstr "間隔" + +msgid "Auto rotate for arrangement" +msgstr "自動回転" + +msgid "Allow multiple materials on same plate" +msgstr "一つのプレートに複数の材料を使用可能" + +msgid "Avoid extrusion calibration region" +msgstr "押出しキャリブレーション領域を避ける" + +msgid "Add" +msgstr "追加" + +msgid "Add plate" +msgstr "プレートを追加" + +msgid "Auto orient" +msgstr "自動向き調整" + +msgid "Arrange all objects" +msgstr "全てをレイアウト" + +msgid "Arrange objects on selected plates" +msgstr "選択したプレートをレイアウト" + +msgid "Split to objects" +msgstr "オブジェクトに分割" + +msgid "Split to parts" +msgstr "パーツに分割" + +msgid "Assembly View" +msgstr "組立て" + +msgid "Select Plate" +msgstr "プレートを選択" + +msgid "All Plates" +msgstr "" + +msgid "Stats" +msgstr "" + +msgid "Assembly Return" +msgstr "戻る" + +msgid "return" +msgstr "戻る" + +msgid "Paint Toolbar" +msgstr "ペイント ツールバー" + +#, boost-format +msgid "Shortcut key %1%" +msgstr "" + +msgid "Explosion Ratio" +msgstr "分解比率" + +msgid "Section View" +msgstr "断面" + +msgid "Assemble Control" +msgstr "組立て" + +msgid "Total Volume:" +msgstr "消費量" + +msgid "Assembly Info" +msgstr "アセンブリ情報" + +msgid "Volume:" +msgstr "ボリューム" + +msgid "Size:" +msgstr "サイズ:" + +msgid "An object is layed over the boundary of plate." +msgstr "プレートの境界を超えるオブジェクトがあります" + +msgid "A G-code path goes beyond the boundary of plate." +msgstr "G-codeはプレートの境界を超えています。" + +msgid "Only the object being edit is visible." +msgstr "編集中のオブジェクトのみ表示されます" + +msgid "" +"An object is laid over the boundary of plate or exceeds the height limit.\n" +"Please solve the problem by moving it totally on or off the plate, and " +"confirming that the height is within the build volume." +msgstr "" +"プレートの境界を越えるか、高さ制限を超えるオブジェクトがあります、ご確認くだ" +"さい" + +msgid "Calibration" +msgstr "キャリブレーション" + +msgid "Calibration step selection" +msgstr "キャリブレーション項目を選択" + +msgid "Micro lidar calibration" +msgstr "ライダー キャリブレーション" + +msgid "Bed leveling" +msgstr "ベッドレベリング" + +msgid "Resonance frequency identification" +msgstr "共振特性測定" + +msgid "Calibration program" +msgstr "キャリブレーション項目" + +msgid "" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" +"It keeps the device performing optimally." +msgstr "" +"キャリブレーションではデバイスの状態を検知し、使用により生じた偏差を最小化し" +"ます。デバイスが最適なパフォーマンスを出せる状態を維持します。" + +msgid "Calibration Flow" +msgstr "キャリブレーション項目" + +msgid "Start Calibration" +msgstr "キャリブレーションを開始" + +msgid "Completed" +msgstr "完了" + +msgid "Calibrating" +msgstr "キャリブレーション中" + +msgid "Auto-record Monitoring" +msgstr "自動録画モニタリング" + +msgid "Go Live" +msgstr "公開" + +msgid "Resolution" +msgstr "分解能" + +msgid "Show \"Live Video\" guide page." +msgstr "「ライブビュー」ガイドを表示" + +msgid "720p" +msgstr "720p" + +msgid "1080p" +msgstr "1080p" + +msgid "ConnectPrinter(LAN)" +msgstr "プリンターとの接続(LAN)" + +msgid "Please input the printer access code:" +msgstr "アクセスコードを入力してください" + +msgid "" +"You can find it in \"Settings > Network > Connection code\"\n" +"on the printer, as shown in the figure:" +msgstr "" +"下記の図面の様に、プリンターの設定→ネットワーク→アクセスコードで確認できます" + +msgid "Invalid input." +msgstr "無効な入力" + +msgid "New Window" +msgstr "新規ウィンドウ" + +msgid "Open a new window" +msgstr "新しいウィンドウを開く" + +msgid "Application is closing" +msgstr "アプリケーションを終了中…" + +msgid "Closing Application while some presets are modified." +msgstr "プリセットが変更されたが終了します" + +msgid "Logging" +msgstr "ログ" + +msgid "Prepare" +msgstr "準備" + +msgid "Preview" +msgstr "プレビュー" + +msgid "Device" +msgstr "デバイス" + +msgid "Project" +msgstr "プロジェクト" + +msgid "Yes" +msgstr "はい" + +msgid "No" +msgstr "いいえ" + +msgid "will be closed before creating a new model. Do you want to continue?" +msgstr "" + +msgid "Slice plate" +msgstr "スライス" + +msgid "Print plate" +msgstr "造形開始" + +msgid "Slice all" +msgstr "スライス (全プレート)" + +msgid "Export G-code file" +msgstr "G-codeをエクスポート" + +msgid "Send" +msgstr "送信" + +msgid "Export plate sliced file" +msgstr "エクスポート" + +msgid "Export all sliced file" +msgstr "エクスポート (全プレート)" + +msgid "Print all" +msgstr "造形開始 (全プレート)" + +msgid "Send all" +msgstr "送信 (全プレート)" + +msgid "Keyboard Shortcuts" +msgstr "ショートカット" + +msgid "Show the list of the keyboard shortcuts" +msgstr "ショートカット一覧を表示" + +msgid "Setup Wizard" +msgstr "セットアップ ウィザード" + +msgid "Show Configuration Folder" +msgstr "構成フォルダを表示" + +msgid "Show Tip of the Day" +msgstr "「毎日のヒント」を表示" + +msgid "Check for Update" +msgstr "更新を確認" + +msgid "Open Network Test" +msgstr "ネットワークテストを開く" + +#, c-format, boost-format +msgid "&About %s" +msgstr "%s について" + +msgid "Upload Models" +msgstr "モデルをアップロード" + +msgid "Download Models" +msgstr "モデルをダウンロード" + +msgid "Default View" +msgstr "デフォルトビュー" + +#. TRN To be shown in the main menu View->Top +msgid "Top" +msgstr "トップ" + +msgid "Top View" +msgstr "トップ" + +#. TRN To be shown in the main menu View->Bottom +msgid "Bottom" +msgstr "底面" + +msgid "Bottom View" +msgstr "底面" + +msgid "Front" +msgstr "正面" + +msgid "Front View" +msgstr "正面" + +msgid "Rear" +msgstr "背面" + +msgid "Rear View" +msgstr "背面" + +msgid "Left" +msgstr "左面" + +msgid "Left View" +msgstr "左面" + +msgid "Right" +msgstr "右面" + +msgid "Right View" +msgstr "右面" + +msgid "Start a new window" +msgstr "新規ウインドウ" + +msgid "New Project" +msgstr "新規プロジェクト" + +msgid "Start a new project" +msgstr "新しいプロジェクトで始める" + +msgid "Open a project file" +msgstr "プロジェクトファイルを開く" + +msgid "Recent projects" +msgstr "最近のプロジェクト" + +msgid "Save Project" +msgstr "プロジェクトを保存" + +msgid "Save current project to file" +msgstr "現在のプロジェクトを保存" + +msgid "Save Project as" +msgstr "プロジェクトを名前を付けて保存" + +msgid "Save current project as" +msgstr "プロジェクトを名前を付けて保存" + +msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" + +msgid "Load a model" +msgstr "モデルを読み込む" + +msgid "Import Configs" +msgstr "構成データ" + +msgid "Load configs" +msgstr "構成を読み込む" + +msgid "Import" +msgstr "インポート" + +msgid "Export all objects as STL" +msgstr "全てのオブジェクト (STL)" + +msgid "Export Generic 3MF" +msgstr "汎用3MF" + +msgid "Export 3mf file without using some 3mf-extensions" +msgstr "3mfファイルをエクスポート(一部3mf機能を無効)" + +msgid "Export current sliced file" +msgstr "エクスポート" + +msgid "Export all plate sliced file" +msgstr "エクスポート (全プレート)" + +msgid "Export G-code" +msgstr "G-codeをエクスポート" + +msgid "Export current plate as G-code" +msgstr "現在のプレートをG-codeでエクスポート" + +msgid "Export &Configs" +msgstr "構成データ" + +msgid "Export current configuration to files" +msgstr "現在の構成をエクスポート" + +msgid "Export" +msgstr "エクスポート" + +msgid "Quit" +msgstr "終了" + +msgid "Undo" +msgstr "元に戻す" + +msgid "Redo" +msgstr "やり直す" + +msgid "Cut selection to clipboard" +msgstr "選択範囲をカット" + +msgid "Copy" +msgstr "コピー" + +msgid "Copy selection to clipboard" +msgstr "選択した内容をコピー" + +msgid "Paste" +msgstr "貼り付け" + +msgid "Paste clipboard" +msgstr "貼り付け" + +msgid "Delete selected" +msgstr "選択を削除" + +msgid "Deletes the current selection" +msgstr "現在の選択項目を削除" + +msgid "Delete all" +msgstr "全てを削除" + +msgid "Deletes all objects" +msgstr "全てのオブジェクトを削除" + +msgid "Clone selected" +msgstr "選択したオブジェクトを複製" + +msgid "Clone copies of selections" +msgstr "選択したオブジェクトを複製" + +msgid "Select all" +msgstr "全てを選択" + +msgid "Selects all objects" +msgstr "すべてのオブジェクトを選択" + +msgid "Deselect all" +msgstr "選択を解除" + +msgid "Deselects all objects" +msgstr "全てのオブジェクトを選択解除" + +msgid "Use Perspective View" +msgstr "パースペクティブを使用" + +msgid "Use Orthogonal View" +msgstr "直交投影を使用" + +msgid "Show &Labels" +msgstr "ラベルを表示" + +msgid "Show object labels in 3D scene" +msgstr "3Dシーンにラベルを表示" + +msgid "Preferences" +msgstr "設定" + +msgid "View" +msgstr "表示" + +msgid "Help" +msgstr "ヘルプ" + +msgid "3D Models" +msgstr "3D モデル" + +msgid "&Open G-code" +msgstr "G-codeを開く" + +msgid "Open a G-code file" +msgstr "G-codeファイルを開く" + +msgid "Re&load from Disk" +msgstr "ディスクからの再読み込み" + +msgid "Reload the plater from disk" +msgstr "プレートを再読込み" + +msgid "Export &Toolpaths as OBJ" +msgstr "Export &Toolpaths as OBJ" + +msgid "Export toolpaths as OBJ" +msgstr "Export toolpaths as OBJ" + +msgid "Open &Studio" +msgstr "Studioを開く" + +msgid "Open Studio" +msgstr "Studioを開く" + +msgid "&Quit" +msgstr "終了" + +#, c-format, boost-format +msgid "Quit %s" +msgstr "%s を終了" + +msgid "&File" +msgstr "ファイル" + +msgid "&View" +msgstr "表示" + +msgid "&Help" +msgstr "ヘルプ" + +#, c-format, boost-format +msgid "A file exists with the same name: %s, do you want to override it." +msgstr "" + +#, c-format, boost-format +msgid "A config exists with the same name: %s, do you want to override it." +msgstr "" + +msgid "Overwrite file" +msgstr "ファイルを上書き" + +msgid "Yes to All" +msgstr "全ては[はい]" + +msgid "No to All" +msgstr "全ていいえ" + +msgid "Choose a directory" +msgstr "フォルダを選択" + +#, c-format, boost-format +msgid "There is %d config exported. (Only non-system configs)" +msgid_plural "There are %d configs exported. (Only non-system configs)" +msgstr[0] "" + +msgid "Export result" +msgstr "エクスポート結果" + +msgid "Select profile to load:" +msgstr "プロファイルを選択" + +#, c-format, boost-format +msgid "There is %d config imported. (Only non-system and compatible configs)" +msgid_plural "" +"There are %d configs imported. (Only non-system and compatible configs)" +msgstr[0] "" + +msgid "Import result" +msgstr "インポート結果" + +msgid "File is missing" +msgstr "ファイルが行方不明" + +msgid "The project is no longer available." +msgstr "プロジェクトは使用できなくなりました。" + +msgid "Filament Settings" +msgstr "フィラメント設定" + +msgid "" +"Do you want to synchronize your personal data from Bambu Cloud? \n" +"It contains the following information:\n" +"1. The Process presets\n" +"2. The Filament presets\n" +"3. The Printer presets" +msgstr "" +"下記のデータをクラウドと同期しますか?\n" +"1. プロセスプリセット\n" +"2. フィラメント設定\n" +"3. プリンター設定" + +msgid "Synchronization" +msgstr "同期" + +msgid "Initialize failed (No Device)!" +msgstr "初期化失敗 (デバイス無し)" + +msgid "Initialize failed (No Camera Device)!" +msgstr "初期化失敗 (カメラ無し)" + +msgid "Initializing..." +msgstr "初期化中..." + +msgid "Loading..." +msgstr "読込み中" + +msgid "Initialize failed (Not supported with LAN-only mode)!" +msgstr "初期化失敗 (ローカルモードではサポートしません)" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "初期化失敗 (ローカルモードではアクセスできません)" + +msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgstr "プリンターがダウンロード中、完了までお待ちください" + +msgid "Initialize failed (Missing LAN ip of printer)!" +msgstr "初期化失敗 (プリンターIP無効)" + +msgid "Initialize failed (Not supported by printer)!" +msgstr "初期化失敗 (プリンターがサポートしません)" + +#, c-format, boost-format +msgid "Initialize failed (%s)!" +msgstr "初期化失敗 (%s)" + +msgid "Network unreachable" +msgstr "ネットワークにアクセスできません" + +#, c-format, boost-format +msgid "Stopped [%d]!" +msgstr "停止した [%d]!" + +msgid "Stopped." +msgstr "中止しました" + +msgid "LAN Connection Failed (Failed to start liveview)" +msgstr "LAN接続失敗 (ライブビュー開始失敗)" + +msgid "" +"Virtual Camera Tools is required for this task!\n" +"Do you want to install them?" +msgstr "バーチャルカメラツールが必要です。インストールしますか?" + +msgid "Downloading Virtual Camera Tools" +msgstr "バーチャルカメラツールをダウンロード" + +msgid "" +"Another virtual camera is running.\n" +"Bambu Studio supports only a single virtual camera.\n" +"Do you want to stop this virtual camera?" +msgstr "" +"別のバーチャルカメラを作動しています為、もう一個が起動できません。\n" +"このバーチャルカメラを停止しますか?" + +#, c-format, boost-format +msgid "Virtual camera initialize failed (%s)!" +msgstr "バーチャルカメラの初期化が失敗しました!(%s)" + +msgid "Information" +msgstr "情報" + +msgid "Playing..." +msgstr "再生中..." + +#, c-format, boost-format +msgid "Load failed [%d]!" +msgstr "ロード失敗 [%d]!" + +msgid "Year" +msgstr "年" + +msgid "Month" +msgstr "月" + +msgid "All Files" +msgstr "全ファイル" + +msgid "Group files by year, recent first." +msgstr "年でグループ化、新しい順で並べ替え" + +msgid "Group files by month, recent first." +msgstr "月でグループ化、新しい順で並べ替え" + +msgid "Show all files, recent first." +msgstr "全てのファイルを表示" + +msgid "Timelapse" +msgstr "タイムラプス" + +msgid "Switch to timelapse files." +msgstr "タイムラプスに切替え" + +msgid "Video" +msgstr "ビデオ" + +msgid "Switch to video files." +msgstr "ビデオファイルに切替え" + +msgid "Delete selected files from printer." +msgstr "プリンターから選択したファイルを削除" + +msgid "Download" +msgstr "ダウンロード" + +msgid "Download selected files from printer." +msgstr "プリンターから選択したファイルをダウンロード" + +msgid "Select" +msgstr "選択" + +msgid "Batch manage files." +msgstr "ファイルのバッチ処理" + +msgid "No printers." +msgstr "プリンタなし" + +msgid "Not supported by this model of printer!" +msgstr "この機種のプリンターには対応していません" + +msgid "Connecting..." +msgstr "接続中…" + +#, c-format, boost-format +msgid "Connect failed [%d]!" +msgstr "接続に失敗しました (%d)" + +msgid "Loading file list..." +msgstr "ファイルリストを読込み中" + +msgid "No files" +msgstr "ファイル無し" + +msgid "Not accessible in LAN-only mode!" +msgstr "ローカルモードではアクセスできません" + +msgid "Missing LAN ip of printer!" +msgstr "プリンターのIPが見つかりません" + +#, c-format, boost-format +msgid "File '%s' was lost! Please download it again." +msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。" + +msgid "Download waiting..." +msgstr "ダウンロード待ち" + +msgid "Play" +msgstr "再生" + +msgid "Open Folder" +msgstr "フォルダを開く" + +msgid "Download finished" +msgstr "ダウンロード完了" + +#, c-format, boost-format +msgid "Downloading %d%%..." +msgstr "ダウンロード中 %d%%" + +msgid "Speed:" +msgstr "速度" + +msgid "Deadzone:" +msgstr "デッドゾーン:" + +msgid "Options:" +msgstr "オプション" + +msgid "Zoom" +msgstr "ズーム" + +msgid "Translation/Zoom" +msgstr "移動/ズーム" + +msgid "3Dconnexion settings" +msgstr "3Dconnexion設定" + +msgid "Swap Y/Z axes" +msgstr "Y/Z 軸を交換" + +msgid "Camera" +msgstr "カメラ" + +msgid "SD Card" +msgstr "SDカード" + +msgid "Camera Setting" +msgstr "カメラ設定" + +msgid "Printing Progress" +msgstr "進捗" + +msgid "Resume" +msgstr "再開" + +msgid "Stop" +msgstr "中止" + +msgid "0" +msgstr "0" + +msgid "Layers: N/A" +msgstr "積層: N/A" + +msgid "Clear" +msgstr "クリア" + +msgid "Control" +msgstr "コントロール" + +msgid "Print Options" +msgstr "造型オプション" + +msgid "100%" +msgstr "100%" + +msgid "Lamp" +msgstr "照明" + +msgid "Aux" +msgstr "補助" + +msgid "Cham" +msgstr "筐体" + +msgid "Bed" +msgstr "ベッド" + +msgid "Unload" +msgstr "アンロード" + +msgid "Debug Info" +msgstr "デバッグ情報" + +msgid "No SD Card" +msgstr "SDカードなし" + +msgid "SD Card Abnormal" +msgstr "SDカードに異常があります。" + +msgid "Printing List" +msgstr "造形リスト" + +msgid "Cancel print" +msgstr "造形を取消し" + +msgid "Are you sure you want to cancel this print?" +msgstr "現在の造形をキャンセルしても宜しいでしょうか?" + +#, c-format, boost-format +msgid "" +"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " +"printer by logging in with your user account." +msgstr "" +"ローカルモードが無効にした為、プリンター %s との接続が切断されました。もう一" +"度接続してください。" + +#, c-format, boost-format +msgid "" +"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " +"printer by inputting Access Code which can be gotten from printer screen." +msgstr "" +"ローカルモードを有効にした為、プリンター %s との接続が切断されました、もう一" +"度接続してください。" + +msgid "Downloading..." +msgstr "ダウンロード中" + +msgid "Cloud Slicing..." +msgstr "クラウドにてスライス中" + +#, c-format, boost-format +msgid "Layers: %s" +msgstr "積層: %s" + +#, c-format, boost-format +msgid "Layers: %d/%d" +msgstr "積層: %d/%d" + +msgid "Please heat the nozzle to above 170 degree before loading filament." +msgstr "フィラメントをロードする前に、ノズル温度を170℃以上に加熱してください" + +msgid "Still unload" +msgstr "アンロード" + +msgid "Still load" +msgstr "ロード" + +msgid "AMS settings are not supported for external spool" +msgstr "現在のAMS設定は、外部スプールホルダーを使用できません" + +msgid "Please select an AMS slot before calibration" +msgstr "キャリブレーション前に、AMSスロットを選択してください" + +msgid "" +"Cannot read filament info: the filament is loaded to the tool head,please " +"unload the filament and try again." +msgstr "" +"フィラメント情報を読み取れません: フィラメントがロードされていません。一度\t" +"フィラメントをアンロードしてから再試行していください。" + +msgid "This only takes effect during printing" +msgstr "造形時の設定" + +msgid "Silent" +msgstr "サイレント" + +msgid "Standard" +msgstr "標準" + +msgid "Sport" +msgstr "スポーツ" + +msgid "Ludicrous" +msgstr "超高速" + +msgid "Can't start this without SD card." +msgstr "起動するのにSDカードが必要です。" + +msgid "Failed to connect to the server" +msgstr "サーバーに接続できませんでした" + +msgid "Status" +msgstr "デバイス状態" + +msgid "Media" +msgstr "メディア" + +msgid "Update" +msgstr "更新" + +msgid "HMS" +msgstr "HMS" + +msgid "Failed to connect to the printer" +msgstr "プリンターへ接続できませんでした" + +msgid "Don't show again" +msgstr "次回から表示しない" + +#, c-format, boost-format +msgid "%s error" +msgstr "%s エラー" + +#, c-format, boost-format +msgid "%s has encountered an error" +msgstr "%s エラー" + +#, c-format, boost-format +msgid "%s warning" +msgstr "%s 警告" + +#, c-format, boost-format +msgid "%s has a warning" +msgstr "%s 警告" + +#, c-format, boost-format +msgid "%s info" +msgstr "%s 情報" + +#, c-format, boost-format +msgid "%s information" +msgstr "%s 情報" + +msgid "Skip" +msgstr "スキップ" + +msgid "3D Mouse disconnected." +msgstr "3D Mouseが切断されました。" + +msgid "Configuration can update now." +msgstr "新しい構成が使用できます。今すぐアップデートしますか?" + +msgid "Detail." +msgstr "詳細" + +msgid "Integration was successful." +msgstr "統合は成功しました" + +msgid "Integration failed." +msgstr "統合失敗" + +msgid "Undo integration was successful." +msgstr "統合の取り消しが成功しました。" + +msgid "New network plug-in available." +msgstr "新しいネットワークプラグインが利用可能" + +msgid "Details" +msgstr "詳細" + +msgid "Undo integration failed." +msgstr "統合の取り消しに失敗しました。" + +msgid "Exporting." +msgstr "エクスポート中" + +msgid "Software has New version." +msgstr "アップデートが利用可能です" + +msgid "Goto download page." +msgstr "ダウンロードページに移動" + +msgid "Open Folder." +msgstr "フォルダを開く" + +msgid "Safely remove hardware." +msgstr "" + +#, c-format, boost-format +msgid "%1$d Object has custom supports." +msgid_plural "%1$d Objects have custom supports." +msgstr[0] "%1$dのオブジェクトはサポートが付いています" + +#, c-format, boost-format +msgid "%1$d Object has color painting." +msgid_plural "%1$d Objects have color painting." +msgstr[0] "%1$dのオブジェクトは色が付いています" + +msgid "ERROR" +msgstr "エラー" + +msgid "CANCELED" +msgstr "取消し済" + +msgid "COMPLETED" +msgstr "完了" + +msgid "Cancel upload" +msgstr "アップロードを取消し" + +msgid "Slice ok." +msgstr "スライス完了" + +msgid "Jump to" +msgstr "確認" + +msgid "Error:" +msgstr "エラー:" + +msgid "Warning:" +msgstr "警告" + +msgid "Export successfully." +msgstr "エクスポートが成功しました。" + +msgid " (Repair)" +msgstr " (修復)" + +msgid " Click here to install it." +msgstr "こちらでインストールします。" + +msgid "WARNING:" +msgstr "警告" + +msgid "Your model needs support ! Please make support material enable." +msgstr "" +"このモデルを造形するにはサポートが必要です、サポートを有効にしてください" + +msgid "Gcode path overlap" +msgstr "G-codeにパスのオーバーラップがあります" + +msgid "Support painting" +msgstr "サポートペイント" + +msgid "Color painting" +msgstr "色塗り" + +msgid "Layers" +msgstr "積層" + +msgid "Range" +msgstr "範囲" + +msgid "" +"The application cannot run normally because OpenGL version is lower than " +"2.0.\n" +msgstr "OpenGLのバージョンは2.0以下の為アプリケーションを実行できません\n" + +msgid "Please upgrade your graphics card driver." +msgstr "パソコンのGPUドライバーを更新してください" + +msgid "Unsupported OpenGL version" +msgstr "非対応のOpenGLバージョン" + +#, c-format, boost-format +msgid "" +"Unable to load shaders:\n" +"%s" +msgstr "" +"シェーダを読み込めません:\n" +"%s" + +msgid "Error loading shaders" +msgstr "シェーダーの読込みにエラーが発生しました" + +msgctxt "Layers" +msgid "Top" +msgstr "トップ" + +msgctxt "Layers" +msgid "Bottom" +msgstr "底面" + +msgid "Enable AI monitoring of printing" +msgstr "AI モニタリングを有効" + +msgid "Sensitivity of pausing is" +msgstr "感度" + +msgid "Enable detection of build plate position" +msgstr "プレート位置検出を有効" + +msgid "" +"The localization tag of build plate is detected, and printing is paused if " +"the tag is not in predefined range." +msgstr "タグが検出されない場合、造形を停止する場合があります。" + +msgid "First Layer Inspection" +msgstr "1層目検査" + +msgid "Auto-recovery from step loss" +msgstr "自動回復" + +msgid "Global" +msgstr "全般" + +msgid "Objects" +msgstr "OBJ" + +msgid "Advance" +msgstr "高度な設定" + +msgid "Compare presets" +msgstr "プリセットを比較" + +msgid "View all object's settings" +msgstr "全てのオブジェクトの設定" + +msgid "Filament settings" +msgstr "フィラメント設定" + +msgid "Printer settings" +msgstr "プリンター設定" + +#, boost-format +msgid " plate %1%:" +msgstr "プレート%1%:" + +msgid "Invalid name, the following characters are not allowed:" +msgstr "無効な名前です、次の文字を使用できません:" + +msgid "Sliced Info" +msgstr "スライス情報" + +msgid "Used Filament (m)" +msgstr "フィラメント使用量 (m)" + +msgid "Used Filament (mm³)" +msgstr "フィラメント使用量 (mm³)" + +msgid "Used Filament (g)" +msgstr "フィラメント使用量 (g)" + +msgid "Used Materials" +msgstr "素材使用量" + +msgid "Estimated time" +msgstr "予測時間" + +msgid "Filament changes" +msgstr "フィラメント交換" + +msgid "Click to edit preset" +msgstr "プリセットを編集" + +msgid "Connection" +msgstr "接続" + +msgid "Bed type" +msgstr "プレート" + +msgid "Flushing volumes" +msgstr "フラッシュ量" + +msgid "Add one filament" +msgstr "フィラメントを追加" + +msgid "Remove last filament" +msgstr "最後のフィラメントを削除" + +msgid "Synchronize filament list from AMS" +msgstr "AMSと素材を同期" + +msgid "Set filaments to use" +msgstr "フィラメントを選択" + +msgid "" +"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +msgstr "" +"AMSにフィラメントがありません、「デバイス」ページでプリンターを選択し、AMS情" +"報をロードしてください。" + +msgid "Sync filaments with AMS" +msgstr "AMSと同期" + +msgid "" +"Sync filaments with AMS will drop all current selected filament presets and " +"colors. Do you want to continue?" +msgstr "" +"AMSと同期する場合、現在のフィラメント設定が上書きされます。続行しますか?" + +msgid "" +"Already did a synchronization, do you want to sync only changes or resync " +"all?" +msgstr "" + +msgid "Sync" +msgstr "" + +msgid "Resync" +msgstr "" + +msgid "There are no compatible filaments, and sync is not performed." +msgstr "適用できるフィラメントがありません、同期を行えません" + +msgid "" +"There are some unknown filaments mapped to generic preset. Please update " +"Bambu Studio or restart Bambu Studio to check if there is an update to " +"system presets." +msgstr "不明なフィラメントがあります、Bambu Studioを更新してください。" + +msgid "Untitled" +msgstr "名称未設定" + +#, boost-format +msgid "Do you want to save changes to \"%1%\"?" +msgstr "変更を\"%1%\"に保存しますか?" + +#, c-format, boost-format +msgid "" +"Successfully unmounted. The device %s(%s) can now be safely removed from the " +"computer." +msgstr "デバイス %s(%s)をお取出しできます" + +#, c-format, boost-format +msgid "Ejecting of device %s(%s) has failed." +msgstr "デバイス %s(%s) の取出しが失敗しました" + +msgid "Previous unsaved project detected, do you want to restore it?" +msgstr "過去に保存されていない項目が検出されました。復元しますか?" + +msgid "Restore" +msgstr "復元" + +msgid "" +"The bed temperature exceeds filament's vitrification temperature. Please " +"open the front door of printer before printing to avoid nozzle clog." +msgstr "" +"ベッド温度がフィラメントの軟化温度より高いです、ノズル詰まりが発生する可能性" +"があります。ベッド温度を下げるか、プリンタのドアを開けてください。" + +msgid "" +"The nozzle hardness required by the filament is higher than the default " +"nozzle hardness of the printer. Please replace the hardened nozzle or " +"filament, otherwise, the nozzle will be attrited or damaged." +msgstr "" +"ノズル硬度はフィラメントの要求硬度より低いです。高硬度ノズルに交換してくださ" +"い。" + +#, c-format, boost-format +msgid "Loading file: %s" +msgstr "ファイルを読込む: %s" + +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "" +"この3mfファイルと互換性がありません、ジオメトリーデータのみ読込みます。" + +msgid "Load 3mf" +msgstr "3mfを読込み" + +msgid "The Config can not be loaded." +msgstr "構成を読込めませんでした" + +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "" +"3mfは古いバージョンのBambu Studioで作成されています、ジオメトリーデータのみ読" +"込みます。" + +#, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Found following keys " +"unrecognized:" +msgstr "" +"3mfのバージョン %s は %sのバージョン %sより新しい為、下記のキーを認識できませ" +"ん" + +msgid "You'd better upgrade your software.\n" +msgstr "ソフトウェアをアップデートする必要があります。\n" + +msgid "Newer 3mf version" +msgstr "新3mfバージョン" + +#, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " +"software." +msgstr "" +"3mfのバージョン%sは%sの%sより新しい為、ソフトウェアを更新してください。" + +msgid "Invalid values found in the 3mf:" +msgstr "" + +msgid "Please correct them in the param tabs" +msgstr "" + +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "" +"この3mfファイルと互換性がありません、ジオメトリーデータのみ読込みます。" + +msgid "Incompatible 3mf" +msgstr "互換性の無い 3mf" + +msgid "Name of components inside step file is not UTF8 format!" +msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" + +msgid "The name may show garbage characters!" +msgstr "文字化けがあるようです、ご確認ください" + +#, boost-format +msgid "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "ファイル %1% を読み込めませんでした。" + +msgid "Objects with zero volume removed" +msgstr "体積が0のオブジェクトを削除しました" + +msgid "The volume of the object is zero" +msgstr "オブジェクトの体積が0です" + +#, c-format, boost-format +msgid "" +"The object from file %s is too small, and maybe in meters or inches.\n" +" Do you want to scale to millimeters?" +msgstr "" +"ファイル %s 中のオブジェクトが小さいすぎます、ファイルの単位をご確認くださ" +"い。\n" +"mm単位に変換しますか?" + +msgid "Object too small" +msgstr "オブジェクトが小さすぎます" + +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" +"Z位置が一致していない複数のオブジェクトを解析しました。\n" +"マルチパーツとして読込みますか?" + +msgid "Multi-part object detected" +msgstr "マルチパーツ検出" + +msgid "Load these files as a single object with multiple parts?\n" +msgstr "これらのファイルを一つのオブジェクトとしてロードしますか?\n" + +msgid "Object with multiple parts was detected" +msgstr "複数のパーツを含むオブジェクトが検出されました" + +msgid "The file does not contain any geometry data." +msgstr "このファイルにはジオメトリデータが含まれていません。" + +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "オブジェクトが大きすぎのようです、ベッドに合わせてスケールしますか?" + +msgid "Object too large" +msgstr "オブジェクトが大きすぎます" + +msgid "Export STL file:" +msgstr "STLファイルをエクスポート:" + +msgid "Save file as:" +msgstr "名前を付けて保存" + +msgid "The selected object couldn't be split." +msgstr "選択したオブジェクトを分割できませんでした。" + +msgid "Another export job is running." +msgstr "エクスポート中です" + +msgid "Select a new file" +msgstr "ファイルを選択" + +msgid "File for the replace wasn't selected" +msgstr "交換用のファイルが選択されていません" + +msgid "Error during replace" +msgstr "交換時のエラー" + +msgid "Please select a file" +msgstr "ファイルを選択してください" + +msgid "Slicing" +msgstr "スライス中" + +msgid "There are warnings after slicing models:" +msgstr "スライスの警告:" + +msgid "warnings" +msgstr "警告" + +msgid "Invalid data" +msgstr "無効なデータ" + +msgid "Slicing Canceled" +msgstr "スライスを取消しました" + +#, c-format, boost-format +msgid "Slicing Plate %d" +msgstr "プレート%dをスライス" + +msgid "Please resolve the slicing errors and publish again." +msgstr "スライシングエラーを解決して、もう一度公開していください" + +msgid "" +"Network Plug-in is not detected. Network related features are unavailable." +msgstr "" +"ネットワーク プラグインが検出されません。ネットワーク関連の機能は利用できませ" +"ん。" + +msgid "" +"Preview only mode:\n" +"The loaded file contains gcode only, Can not enter the Prepare page" +msgstr "" +"プレビュー専用モード\n" +"このファイルにはG-codeのみが入っており、「準備」ページで表示できません" + +msgid "You can keep the modified presets to the new project or discard them" +msgstr "変更したプリセットをプロジェクト内に保存するか、破棄もできます" + +msgid "Creating a new project" +msgstr "新規プロジェクトを作成" + +msgid "Load project" +msgstr "プロジェクトを読み込む" + +msgid "" +"Failed to save the project.\n" +"Please check whether the folder exists online or if other programs open the " +"project file." +msgstr "" +"プロジェクトを保存できませんでした。\n" +"フォルダが存在していないか、アクセス権限をご確認ください。" + +msgid "Save project" +msgstr "プロジェクトを保存" + +msgid "Importing Model" +msgstr "モデルをインポート" + +msgid "prepare 3mf file..." +msgstr "3mfファイルを準備" + +msgid "downloading project ..." +msgstr "プロジェクトをダウンロード中" + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "プロジェクトをダウンロード %d%%" + +msgid "The selected file" +msgstr "選択したファイル" + +msgid "does not contain valid gcode." +msgstr "有効なG-codeが含まれていません。" + +msgid "Error occurs while loading G-code file" +msgstr "G-codeファイルの読込みにエラーが発生しました" + +msgid "Drop project file" +msgstr "プロジェクトをドロップ" + +msgid "Please select an action" +msgstr "アクションを選択してください" + +msgid "Open as project" +msgstr "プロジェクトとして開く" + +msgid "Import geometry only" +msgstr "ジオメトリのみをインポート" + +msgid "Only one G-code file can be opened at the same time." +msgstr "G-codeファイルは一度一つしか開きません" + +msgid "G-code loading" +msgstr "G-code読込み中" + +msgid "G-code files can not be loaded with models together!" +msgstr "G-codeファイルとモデルを一緒にロードできません" + +msgid "Can not add models when in preview mode!" +msgstr "プレビューモードではモデルを追加できません" + +msgid "Add Models" +msgstr "モデルを追加" + +msgid "All objects will be removed, continue?" +msgstr "すべてのオブジェクトが削除されます。続行しますか?" + +msgid "The current project has unsaved changes, save it before continue?" +msgstr "" +"現在のプロジェクトには未保存の変更があります。続行する前に保存しますか?" + +msgid "Number of copies:" +msgstr "複製数" + +msgid "Copies of the selected object" +msgstr "選択したオブジェクトの複製数" + +msgid "Save G-code file as:" +msgstr "名前を付けて保存" + +msgid "Save Sliced file as:" +msgstr "名前を付けて保存:" + +#, c-format, boost-format +msgid "" +"The file %s has been sent to the printer's storage space and can be viewed " +"on the printer." +msgstr "%sを送信しました、プリンターにて確認できます" + +msgid "" +"Print By Object: \n" +"Suggest to use auto-arrange to avoid collisions when printing." +msgstr "" +"オブジェクト順で造形:\n" +"衝突を回避するため、自動レイアウトはお勧めです" + +msgid "Send G-code" +msgstr "G-codeを送信" + +msgid "Send to printer" +msgstr "プリンタへ送信" + +msgid "Custom supports and color painting were removed before repairing." +msgstr "" +"モデルを変更すると、ペイントデータ(サポートや色など)がリセットされます" + +msgid "Invalid number" +msgstr "無効な数字" + +msgid "Plate Settings" +msgstr "" + +#, boost-format +msgid "Part name: %1%\n" +msgstr "パーツ名: %1%\n" + +#, boost-format +msgid "Object name: %1%\n" +msgstr "オブジェクト名: %1%\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% in\n" +msgstr "サイズ: %1% x %2% x %3% in\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% mm\n" +msgstr "サイズ: %1% x %2% x %3% mm\n" + +#, boost-format +msgid "Volume: %1% in³\n" +msgstr "ボリューム: %1% in³\n" + +#, boost-format +msgid "Volume: %1% mm³\n" +msgstr "ボリューム: %1% mm³\n" + +#, boost-format +msgid "Triangles: %1%\n" +msgstr "三角形: %1% 個\n" + +msgid "Tips:" +msgstr "ヒント" + +msgid "" +"\"Fix Model\" feature is currently only on Windows. Please repair the model " +"on Bambu Studio(windows) or CAD softwares." +msgstr "" +"「モデル修復」はWindowsのみご利用できます。Bambu Studio (Windows)か他のCADソ" +"フトウェアで修復してください。" + +#, c-format, boost-format +msgid "" +"Plate% d: %s is not suggested to be used to print filament %s(%s). If you " +"still want to do this printing, please set this filament's bed temperature " +"to non zero." +msgstr "" + +msgid "Switching the language requires application restart.\n" +msgstr "言語を切り替えるには、再起動が必要です。\n" + +msgid "Do you want to continue?" +msgstr "続行しますか?" + +msgid "Language selection" +msgstr "言語選択" + +msgid "Switching application language while some presets are modified." +msgstr "アプリケーション言語を切り替える時に、プリセットの変更があります" + +msgid "Changing application language" +msgstr "言語を変更" + +msgid "Changing the region will log out your account.\n" +msgstr "地域を変更すると、サインアウトする必要があります。\n" + +msgid "Region selection" +msgstr "地域選択" + +msgid "Second" +msgstr "秒" + +msgid "Browse" +msgstr "閲覧" + +msgid "Choose Download Directory" +msgstr "ダウンロードフォルドを選択" + +msgid "General Settings" +msgstr "一般設定" + +msgid "Asia-Pacific" +msgstr "アジア太平洋地域" + +msgid "China" +msgstr "中国" + +msgid "Europe" +msgstr "ヨーロッパ地域" + +msgid "North America" +msgstr "北米" + +msgid "Others" +msgstr "その他" + +msgid "Login Region" +msgstr "地域" + +msgid "Metric" +msgstr "メートル" + +msgid "Imperial" +msgstr "インチ" + +msgid "Units" +msgstr "単位" + +msgid "Show \"Tip of the day\" notification after start" +msgstr "起動後「毎日のヒント」を表示" + +msgid "If enabled, useful hints are displayed at startup." +msgstr "有効になる場合、起動時にヒントを表示されます。" + +msgid "User sync" +msgstr "ユーザー同期" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)" + +msgid "User Sync" +msgstr "ユーザー同期" + +msgid "Associate files to BambuStudio" +msgstr "ファイルをBambu Studioに関連付ける" + +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mfファイルをBambu Studioに関連付けます。" + +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "デフォルトで.3mfファイルをBambu Studioで開く" + +msgid "Associate .stl files to BambuStudio" +msgstr ".stlファイルをBambu Studioに関連付けます。" + +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "デフォルトで.stlファイルをBambu Studioで開く" + +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stpファイルをBambu Studioに関連付けます。" + +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "デフォルトで.step/.stpファイルをBambu Studioで開く" + +msgid "Backup" +msgstr "バックアップ" + +msgid "Auto-Backup" +msgstr "自動バックアップ" + +msgid "Backup interval" +msgstr "時間間隔" + +msgid "Downloads" +msgstr "ダウンロード" + +msgid "Dark Mode" +msgstr "ダークモード" + +msgid "Enable Dark mode" +msgstr "ダークモードを有効" + +msgid "Home page and daily tips" +msgstr "ホームページとヒント" + +msgid "Show home page on startup" +msgstr "起動時にホームページを表示" + +msgid "Sync settings" +msgstr "同期設定" + +msgid "Preset sync" +msgstr "プリセット同期" + +msgid "Preferences sync" +msgstr "設定を同期" + +msgid "View control settings" +msgstr "表示設定" + +msgid "Rotate of view" +msgstr "回転" + +msgid "Move of view" +msgstr "移動" + +msgid "Zoom of view" +msgstr "ズーム" + +msgid "Other" +msgstr "その他" + +msgid "Mouse wheel reverses when zooming" +msgstr "ズーム中にスクロール方向を反転させる" + +msgid "Develop mode" +msgstr "開発者モード" + +msgid "Dump video" +msgstr "ビデオをダウンロード" + +msgid "Log Level" +msgstr "Log Level" + +msgid "fatal" +msgstr "重大的" + +msgid "error" +msgstr "エラー" + +msgid "warning" +msgstr "警告" + +msgid "info" +msgstr "情報" + +msgid "debug" +msgstr "デバッグ" + +msgid "trace" +msgstr "トレース" + +msgid "Host Setting" +msgstr "ホスト設定" + +msgid "DEV host: api-dev.bambu-lab.com/v1" +msgstr "DEVホスト:api-dev.bambu-lab.com/v1" + +msgid "QA host: api-qa.bambu-lab.com/v1" +msgstr "QAホスト:api-qa.bambu-lab.com/v1" + +msgid "PRE host: api-pre.bambu-lab.com/v1" +msgstr "PRE ホスト: api-pre.bambu-lab.com/v1" + +msgid "Product host" +msgstr "PRODホスト" + +msgid "debug save button" +msgstr "保存" + +msgid "save debug settings" +msgstr "デバッグ設定を保存" + +msgid "DEBUG settings have saved successfully!" +msgstr "デバッグ設定" + +msgid "Switch cloud environment, Please login again!" +msgstr "クラウド環境を切り替えました、再度サインインしてください。" + +msgid "System presets" +msgstr "システム プリセット" + +msgid "User presets" +msgstr "ユーザープリセット" + +msgid "Incompatible presets" +msgstr "互換性の無い プリセット" + +msgid "AMS filaments" +msgstr "AMSフィラメント" + +msgid "Click to pick filament color" +msgstr "フィラメントの色を選択" + +msgid "Add/Remove presets" +msgstr "プリセットの追加/削除" + +msgid "Edit preset" +msgstr "プリセットを編集" + +msgid "Project-inside presets" +msgstr "プロジェクト プリセット" + +msgid "Add/Remove filaments" +msgstr "フィラメントを追加/削除" + +msgid "Add/Remove materials" +msgstr "素材を追加/削除" + +msgid "Add/Remove printers" +msgstr "プリンターを追加/削除" + +msgid "Same as Global Print Sequence" +msgstr "" + +msgid "Print sequence" +msgstr "造形シーケンス" + +msgid "Same as Global Bed Type" +msgstr "全般設定の「ベッドタイプ」と同様" + +msgid "Cool Plate" +msgstr "常温プレート" + +msgid "Engineering Plate" +msgstr "エンジニアリングプレート" + +msgid "High Temp Plate" +msgstr "高温プレート" + +msgid "Textured PEI Plate" +msgstr "PEIプレート" + +msgid "By Layer" +msgstr "" + +msgid "By Object" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Log Out" +msgstr "" + +msgid "Slice all plate to obtain time and filament estimation" +msgstr "全プレートをスライスし、造形時間を推測します" + +msgid "Packing project data into 3mf file" +msgstr "プロジェクトデータを3MFファイルに書き込む" + +msgid "Uploading 3mf" +msgstr "3mfをアップロード中" + +msgid "Jump to model publish web page" +msgstr "モデル公開ページに移動" + +msgid "Note: The preparation may takes several minutes. Please be patiant." +msgstr "注意: 準備するには数分かかる場合があります、暫くお待ち下さい。" + +msgid "Publish" +msgstr "公開する" + +msgid "Publish was cancelled" +msgstr "公開は取り消しました" + +msgid "Slicing Plate 1" +msgstr "プレート1をスライス" + +msgid "Packing data to 3mf" +msgstr "データを構成中" + +msgid "Jump to webpage" +msgstr "ウェブページに移動" + +#, c-format, boost-format +msgid "Save %s as" +msgstr "%sを名前つけて保存" + +msgid "User Preset" +msgstr "ユーザープリセット" + +msgid "Project Inside Preset" +msgstr "プロジェクト プリセット" + +msgid "Name is invalid;" +msgstr "名称が無効です" + +msgid "illegal characters:" +msgstr "無効な文字:" + +msgid "illegal suffix:" +msgstr "無効なサフィックス" + +msgid "Name is unavailable." +msgstr "名称は使用できません" + +msgid "Overwrite a system profile is not allowed" +msgstr "システムプロファイルの上書きはできません" + +#, boost-format +msgid "Preset \"%1%\" already exists." +msgstr "プリセット \"%1%\" は既に存在します。" + +#, boost-format +msgid "Preset \"%1%\" already exists and is incompatible with current printer." +msgstr "プリセット\"%1%\"は既に存在し、また互換性がありません。" + +msgid "Please note that saving action will replace this preset" +msgstr "注意:現在のプリセットを上書きされます。" + +msgid "The name is not allowed to be empty." +msgstr "「名前」が空です" + +msgid "The name is not allowed to start with space character." +msgstr "名前の先頭にスペースを入れないでください" + +msgid "The name is not allowed to end with space character." +msgstr "名前の最後にスペースを入れないでください" + +msgid "The name cannot be the same as a preset alias name." +msgstr "プリセット名と同じの為、設定できません。" + +msgid "Save preset" +msgstr "プリセットを保存" + +msgctxt "PresetName" +msgid "Copy" +msgstr "コピー" + +#, boost-format +msgid "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "プリンター \"%1%\" とプリセット \"%2%\" を選択しました" + +#, boost-format +msgid "Please choose an action with \"%1%\" preset after saving." +msgstr "保存後、プリセット\"%1%\"に対する操作を選択してください" + +#, boost-format +msgid "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "%1%に対して、%2%を%3%に変更します " + +#, boost-format +msgid "For \"%1%\", add \"%2%\" as a new preset" +msgstr "\"%1%\"に対して、\"%2%\"を新しいプリセットとして追加する" + +#, boost-format +msgid "Simply switch to \"%1%\"" +msgstr "\"%1%\"に切り替え" + +msgid "Online" +msgstr "オンライン" + +msgid "Offline" +msgstr "オフライン" + +msgid "(LAN)" +msgstr "" + +msgid "My Device" +msgstr "私のデバイス" + +msgid "Other Device" +msgstr "その他のデバイス" + +msgid "Input access code" +msgstr "アクセスコードを入力" + +msgid "Can't find my devices?" +msgstr "デバイスが見つからない?" + +msgid "Log out successful." +msgstr "サインアウトしました" + +msgid "Busy" +msgstr "ビジー状態" + +msgid "Bambu Cool Plate" +msgstr "Bambu 常温プレート" + +msgid "Bamabu Engineering Plate" +msgstr "Bambu エンジニアリングプレート" + +msgid "Bamabu High Temperature Plate" +msgstr "Bambu 高温プレート" + +msgid "Send print job to" +msgstr "造形タスクを送信" + +msgid "Refresh" +msgstr "再読込" + +msgid "Bed Leveling" +msgstr "ベッドレベリング" + +msgid "Flow Calibration" +msgstr "流量キャリブレーション" + +msgid "send completed" +msgstr "送信完了" + +msgid "No login account, only printers in LAN mode are displayed" +msgstr "アカウント無し、ローカルモードのプリンターのみが表示されます" + +msgid "Connecting to server" +msgstr "サーバーへ接続中" + +msgid "Synchronizing device information" +msgstr "デバイス情報を同期" + +msgid "Synchronizing device information time out" +msgstr "デバイス情報同期はタイムアウトしました" + +msgid "Cannot send the print job when the printer is updating firmware" +msgstr "ファームウェアが更新中の為、造形タスクを送信できません" + +msgid "" +"The printer is executing instructions. Please restart printing after it ends" +msgstr "プリンターが指令を実行中です。実行終了してから造形を再開してください。" + +msgid "The printer is busy on other print job" +msgstr "プリンターはビジーです。" + +#, c-format, boost-format +msgid "" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "フィラメント %s がAMSスロットの数を超えています。" + +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "フィラメントがAMSスロットの数を超えています。" + +msgid "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" +msgstr "" +"フィラメントとAMSスロットをマッピングしました。マッピング関係を変更できます" + +msgid "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" +msgstr "フィラメントとAMSのスロットのマッピング関係を指定できます。" + +#, c-format, boost-format +msgid "" +"Filament %s does not match the filament in AMS slot %s. Please update the " +"printer firmware to support AMS slot assignment." +msgstr "フィラメント %sがAMSスロット%sのフィラメントと一致していません。" + +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "フィラメントがAMSスロットのフィラメントと一致していません。" + +msgid "" +"The printer firmware only supports sequential mapping of filament => AMS " +"slot." +msgstr "このプリンターはAMSスロットマッピングをサポートしません" + +msgid "An SD card needs to be inserted before printing." +msgstr "SDカードが必要です" + +msgid "An SD card needs to be inserted to record timelapse." +msgstr "SDカードが必要です" + +msgid "" +"Cannot send the print job to a printer whose firmware is required to get " +"updated." +msgstr "ファームウェアを更新する必要がある為、造形タスクを送信できません" + +msgid "Cannot send the print job for empty plate" +msgstr "空プレートがある為、送信できません" + +msgid "This printer does not support printing all plates" +msgstr "プリンターが全てのプレートを造形することができません" + +msgid "Errors" +msgstr "エラー" + +msgid "" +"Please check the following infomation and click Confirm to continue sending " +"print:" +msgstr "次の情報をご確認の上、「確認」で送信してください" + +msgid "" +"The printer type used to generate G-code is not the same type as the " +"currently selected physical printer. It is recommend to re-slice by " +"selecting the same printer type." +msgstr "" +"G-code中の機種は現在選択したプリンターではありません、プリンターを選択し直す" +"か、一致機種でスライスしてください。" + +#, c-format, boost-format +msgid "The %s filament is too soft to be used with the AMS" +msgstr "%sは柔らかい為AMSに使用できません" + +msgid "" +"There are some unknown filaments in the AMS mappings. Please check whether " +"they are the required filaments. If they are okay, press \"Confirm\" to " +"start printing." +msgstr "" +"不明なフィラメントがあります、造形に必要かどうかご確認ください。引き続き造形" +"する場合は、「確認」を押してください。" + +msgid "Preparing print job" +msgstr "造形タスクを準備" + +msgid "Modifying the device name" +msgstr "デバイス名を変更" + +msgid "Send to Printer SD card" +msgstr "プリンターのSDカードに送信" + +msgid "Cannot send the print task when the upgrade is in progress" +msgstr "アップデート中では造形タスクを送信できません" + +msgid "An SD card needs to be inserted before send to printer SD card." +msgstr "" + +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "" +"このプリンターを使用するには、Bambu Studioを同一のLANで使用してください。" + +msgid "The printer does not support sending to printer SD card." +msgstr "このプリンターはSDカードに送信することができません" + +msgid "Log in printer" +msgstr "プリンターを登録" + +msgid "Would you like to log in this printer with current account?" +msgstr "現在のアカウントでプリンターをサインインしますか?" + +msgid "Log in successful." +msgstr "登録成功" + +msgid "Log out printer" +msgstr "サインアウト" + +msgid "Would you like to log out the printer?" +msgstr "プリンターをサインアウトしますか?" + +msgid "Please log in first." +msgstr "サインインしてください" + +msgid "There was a problem connecting to the printer. Please try again." +msgstr "プリンターと接続できませんでした。もう一度試してください。" + +msgid "Failed to log out." +msgstr "サインアウトできませんでした" + +#. TRN "Save current Settings" +#, c-format, boost-format +msgid "Save current %s" +msgstr "現在の %s を保存" + +msgid "Delete this preset" +msgstr "このプリセットを削除" + +msgid "Search in preset" +msgstr "検索" + +msgid "Click to reset all settings to the last saved preset." +msgstr "全ての変更をリセットします" + +msgid "" +"Prime tower is required for smooth timeplase. There may be flaws on the " +"model without prime tower. Are you sure you want to disable prime tower?" +msgstr "" +"スムーズタイムラプスビデオを作成するにはプライムタワーが必要です。プライムタ" +"ワーを有効にしますか?" + +msgid "" +"Prime tower is required for smooth timelapse. There may be flaws on the " +"model without prime tower. Do you want to enable prime tower?" +msgstr "" +"スムーズタイムラプスビデオを作成するにはプライムタワーが必要です。プライムタ" +"ワーを有効にしますか?" + +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommend using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "ツリースリムはサポートの強度を弱めてフィラメントの消費量を減らします。" + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" +"これらの設定を自動的に変更しますか? \n" +"はい - 自動的に変更します\n" +"いいえ - 変更しません" + +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " +"settings: at least 2 interface layers, at least 0.1mm top z distance or " +"using support materials on interface." +msgstr "" +"「ツリーストラング」と「ツリーハイブリッド」の場合、下記の設定をお勧めしま" +"す:接触層数を2、トップ面とのZ間隔を0.1mm。" + +msgid "" +"When using support material for the support interface, We recommend the " +"following settings:\n" +"0 top z distance, 0 interface spacing, concentric pattern." +msgstr "" +"When using support material for the support interface, We recommend the " +"following settings:\n" +"0 top z distance, 0 interface spacing, concentric pattern." + +msgid "" +"When recording timelapse without toolhead, it is recommended to add a " +"\"Timelapse Wipe Tower\" \n" +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." +msgstr "" +"ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタワー」" +"を追加してください。プレートで右クリックして、「プリミティブを追加」→「タイム" +"ラプスプライムタワー」で追加できます。" + +msgid "Line width" +msgstr "押出線幅" + +msgid "Seam" +msgstr "継ぎ目" + +msgid "Precision" +msgstr "精度" + +msgid "Wall generator" +msgstr "壁面生成器" + +msgid "Walls" +msgstr "壁面" + +msgid "Top/bottom shells" +msgstr "トップ面/底面" + +msgid "Initial layer speed" +msgstr "1層目の移動速度" + +msgid "Other layers speed" +msgstr "他の層の速度" + +msgid "Overhang speed" +msgstr "オーバーハング速度" + +msgid "" +"This is the speed for various overhang degrees. Overhang degrees are " +"expressed as a percentage of line width. 0 speed means no slowing down for " +"the overhang degree range and wall speed is used" +msgstr "" +"オーバーハングを造形時の速度です。オーバーハングの角度が線幅に対する割合で表" +"示します。0は減速無しで壁面の速度が使用されます。" + +msgid "Travel speed" +msgstr "移動速度" + +msgid "Acceleration" +msgstr "加速度" + +msgid "Raft" +msgstr "ラフト" + +msgid "Support filament" +msgstr "サポート用フィラメント" + +msgid "Prime tower" +msgstr "プライムタワー" + +msgid "Special mode" +msgstr "特別モード" + +msgid "G-code output" +msgstr "G-code出力" + +msgid "Frequent" +msgstr "よく使う" + +#, c-format, boost-format +msgid "" +"Following line %s contains reserved keywords.\n" +"Please remove it, or will beat G-code visualization and printing time " +"estimation." +msgid_plural "" +"Following lines %s contain reserved keywords.\n" +"Please remove them, or will beat G-code visualization and printing time " +"estimation." +msgstr[0] "" +"以下のラインでは %s 予約語が入っていますのでG-codeがうまく表示できない可能性" +"があります、削除してください" + +msgid "Reserved keywords found" +msgstr "保留キーワードが見つかりました" + +msgid "Setting Overrides" +msgstr "上書き設定" + +msgid "Retraction" +msgstr "リトラクション" + +msgid "Basic information" +msgstr "基本情報" + +msgid "Recommended nozzle temperature" +msgstr "推奨ノズル温度" + +msgid "Recommended nozzle temperature range of this filament. 0 means no set" +msgstr "フィラメントの推奨ノズル温度、0は未設定との意味です" + +msgid "Recommended temperature range" +msgstr "推奨温度範囲" + +msgid "Print temperature" +msgstr "造形温度" + +msgid "Nozzle" +msgstr "ノズル" + +msgid "Nozzle temperature when printing" +msgstr "ノズル温度" + +msgid "Cool plate" +msgstr "常温プレート" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate" +msgstr "" +"常温プレートが装着時のベッド温度です。値が0の場合、フィラメントが常温プレート" +"に使用できない意味です。" + +msgid "Engineering plate" +msgstr "エンジニアリングプレート" + +msgid "" +"Bed temperature when engineering plate is installed. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"エンジニアリングプレートが装着時のベッド温度です。値が0の場合、フィラメントが" +"エンジニアリングプレートに使用できない意味です。" + +msgid "" +"Bed temperature when high temperature plate is installed. Value 0 means the " +"filament does not support to print on the High Temp Plate" +msgstr "" +"高温プレートが装着時のベッド温度です。値が0の場合、フィラメントが高温プレート" +"に使用できない意味です。" + +msgid "" +"Bed temperature when Textured PEI Plate is installed. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" +"PEIプレートを使用時のベッド温度。値が0の場合、フィラメントがPEIプレートをサ" +"ポートしない意味です。" + +msgid "Volumetric speed limitation" +msgstr "体積速度制限" + +msgid "Cooling" +msgstr "冷却" + +msgid "Cooling for specific layer" +msgstr "特定層の冷却" + +msgid "Part cooling fan" +msgstr "パーツ冷却ファン" + +msgid "Min fan speed threshold" +msgstr "ファン最低回転速度" + +msgid "" +"Part cooling fan speed will start to run at min speed when the estimated " +"layer time is no longer than the layer time in setting. When layer time is " +"shorter than threshold, fan speed is interpolated between the minimum and " +"maximum fan speed according to layer printing time" +msgstr "" +"パーツ冷却ファンは、積層造形時間がこの値より長い時に最小回転速度で作動しま" +"す。" + +msgid "Max fan speed threshold" +msgstr "ファン最大回転速度" + +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"パーツ冷却ファンは、積層造形時間がこの値より短い時に最大回転速度で作動しま" +"す。" + +msgid "Auxiliary part cooling fan" +msgstr "パーツ補助冷却ファン" + +msgid "Filament start G-code" +msgstr "フィラメント開始G-code" + +msgid "Filament end G-code" +msgstr "フィラメント終了G-code" + +msgid "Printable space" +msgstr "造形可能領域" + +msgid "Extruder Clearance" +msgstr "押出機クリアランス" + +msgid "Accessory" +msgstr "アクセサリー" + +msgid "Machine gcode" +msgstr "プリンタG-code" + +msgid "Machine start G-code" +msgstr "プリンター開始G-code" + +msgid "Machine end G-code" +msgstr "プリンター終了G-code" + +msgid "Before layer change G-code" +msgstr "積層変更前のG-code" + +msgid "Layer change G-code" +msgstr "積層変更時のG-code" + +msgid "Change filament G-code" +msgstr "フィラメント変更G-code" + +msgid "Pause G-code" +msgstr "G-codeを一時停止" + +msgid "Template Custom G-code" +msgstr "カスタムG-code雛形" + +msgid "Motion ability" +msgstr "移動能力" + +msgid "Normal" +msgstr "普通" + +msgid "Speed limitation" +msgstr "速度制限" + +msgid "Acceleration limitation" +msgstr "加速制限" + +msgid "Jerk limitation" +msgstr "振動特性" + +msgid "Layer height limits" +msgstr "積層ピッチの制限" + +msgid "Retraction when switching material" +msgstr "素材変更時のリトラクション" + +msgid "Detached" +msgstr "分離的" + +msgid "Following preset will be deleted too." +msgid_plural "Following presets will be deleted too." +msgstr[0] "以下のプリセットも削除されます: " + +#, boost-format +msgid "Are you sure to %1% the selected preset?" +msgstr "選択したプリセットを %1% しますか?" + +#. TRN Remove/Delete +#, boost-format +msgid "%1% Preset" +msgstr "%1% プリセット" + +msgid "All" +msgstr "すべて" + +msgid "Set" +msgstr "設定" + +msgid "Click to reset current value and attach to the global value." +msgstr "現在値をデフォルト値に戻します" + +msgid "Click to drop current modify and reset to saved value." +msgstr "クリックして値をリセットします" + +msgid "Process Settings" +msgstr "プロセス設定" + +msgid "Undef" +msgstr "未定義" + +msgid "Unsaved Changes" +msgstr "未保存の変更" + +msgid "Discard or Keep changes" +msgstr "変更を破棄または保持" + +msgid "Old Value" +msgstr "古い値" + +msgid "New Value" +msgstr "新しい値" + +msgid "Transfer" +msgstr "流用" + +msgid "Don't save" +msgstr "保存しない" + +msgid "Discard" +msgstr "破棄" + +msgid "Click the right mouse button to display the full text." +msgstr "マウスを右クリックして全文を表示します" + +msgid "All changes will not be saved" +msgstr "変更は保存されません。" + +msgid "All changes will be discarded." +msgstr "変更内容は保存されません" + +msgid "Save the selected options." +msgstr "選択したオプションを保存" + +msgid "Keep the selected options." +msgstr "選択したオプションを保持" + +msgid "Transfer the selected options to the newly selected preset." +msgstr "選択したオプションをプリセットにコピーしました。" + +#, boost-format +msgid "" +"Save the selected options to preset \n" +"\"%1%\"." +msgstr "選択したオプションをプリセット\"%1%\"に保存" + +#, boost-format +msgid "" +"Transfer the selected options to the newly selected preset \n" +"\"%1%\"." +msgstr "選択したオプションをプリセット \"%1%\" にコピーしました。" + +#, boost-format +msgid "Preset \"%1%\" contains the following unsaved changes:" +msgstr "プリセット\"%1%\"には、以下に未保存の変更があります" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"プリセット\"%1%\"は新しいプリンターとの互換性がなく、また以下に未保存の変更が" +"あります" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"プリセット \"%1%\" は新しいプロセス・プロファイルとの互換性がなく、以下に未保" +"存の変更があります" + +#, boost-format +msgid "" +"You have changed some settings of preset \"%1%\". \n" +"Would you like to keep these changed settings (new value) after switching " +"preset?" +msgstr "" +"プリセット %1% に変更があります。\n" +"それらの変更を選択したプリセットに引き継ぎますか?" + +msgid "" +"You have changed some preset settings. \n" +"Would you like to keep these changed settings (new value) after switching " +"preset?" +msgstr "プリセットに変更がありあす。これらの変更を流用しますか?" + +msgid "Extruders count" +msgstr "押出機台数" + +msgid "General" +msgstr "一般" + +msgid "Capabilities" +msgstr "能力" + +msgid "" +"The P1P printer does not support smooth timelapse, use traditional timelapse " +"instead." +msgstr "" +"P1Pプリンターはスムージタイムラプスをサポートしません、通常タイムラプスに切替" +"えます。" + +msgid "Select presets to compare" +msgstr "" + +msgid "Show all presets (including incompatible)" +msgstr "全てのプリセットを表示" + +msgid "Add File" +msgstr "ファイルを追加" + +msgid "Set as cover" +msgstr "代表画像に設定" + +msgid "Cover" +msgstr "表紙" + +#, boost-format +msgid "The name \"%1%\" already exists." +msgstr "\"%1%\"が既に存在しています" + +msgid "Basic Info" +msgstr "基本情報" + +msgid "Pictures" +msgstr "画像" + +msgid "Bill of Materials" +msgstr "部品表" + +msgid "Assembly Guide" +msgstr "アセンブリガイド" + +msgid "Author" +msgstr "作成者" + +msgid "Model Name" +msgstr "モデル名" + +#, c-format, boost-format +msgid "%s Update" +msgstr "%s 更新" + +msgid "A new version is available" +msgstr "新しいバージョンが利用可能です" + +msgid "Configuration update" +msgstr "構成の更新" + +msgid "A new configuration package available, Do you want to install it?" +msgstr "新しい構成パッケージが利用できます。インストールしますか?" + +msgid "Description:" +msgstr "詳細:" + +msgid "Configuration incompatible" +msgstr "構成ファイルは互換性がありません" + +msgid "the configuration package is incompatible with current application." +msgstr "構成パッケージが現在のアプリケーションと互換性がありません" + +#, c-format, boost-format +msgid "" +"The configuration package is incompatible with current application.\n" +"%s will update the configuration package, Otherwise it won't be able to start" +msgstr "" +"構成パッケージは現在のバージョンと互換性ありません。\n" +"%sで構成パッケージを更新しアプリケーションを再起動します" + +#, c-format, boost-format +msgid "Exit %s" +msgstr "%s を終了" + +msgid "the Configuration package is incompatible with current APP." +msgstr "構成パッケージは、このバージョンのBambu Studioに適用できません" + +msgid "Configuration updates" +msgstr "構成の更新" + +msgid "No updates available." +msgstr "利用可能なアップデートはありません" + +msgid "The configuration is up to date." +msgstr "構成データが最新です" + +msgid "Auto-Calc" +msgstr "自動計算" + +msgid "Flushing volumes for filament change" +msgstr "フィラメントを入替える為のフラッシュ量" + +msgid "Multiplier" +msgstr "マルチプライヤ" + +msgid "Flushing volume (mm³) for each filament pair." +msgstr "各フィラメントペアのフラッシュ量(mm³)" + +#, c-format, boost-format +msgid "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "推奨フラッシュ量範囲 [%d, %d]" + +#, c-format, boost-format +msgid "The multiplier should be in range [%.2f, %.2f]." +msgstr "マルチプライヤーの有効範囲は [%.2f, %.2f] です。" + +msgid "unloaded" +msgstr "アンロードしました" + +msgid "loaded" +msgstr "ロード済み" + +msgid "Filament #" +msgstr "フィラメント#" + +msgid "From" +msgstr "From" + +msgid "To" +msgstr "→" + +msgid "Login" +msgstr "サインイン" + +msgid "The configuration package is changed in previous Config Guide" +msgstr "構成パッケージが前のコンフィグガイドに変更されました" + +msgid "Configuration package changed" +msgstr "構成パッケージが変更されました" + +msgid "Toolbar" +msgstr "ツールバー" + +msgid "Objects list" +msgstr "オブジェクト一覧" + +msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" +msgstr "" + +msgid "Copy to clipboard" +msgstr "コピー" + +msgid "Paste from clipboard" +msgstr "貼り付け" + +msgid "Show/Hide 3Dconnexion devices settings dialog" +msgstr "3Dconnexion設定を表示/非表示" + +msgid "Show keyboard shortcuts list" +msgstr "ショートカット一覧を表示" + +msgid "Global shortcuts" +msgstr "ショートカット" + +msgid "Rotate View" +msgstr "回転" + +msgid "Pan View" +msgstr "移動" + +msgid "Mouse wheel" +msgstr "マウスホイール" + +msgid "Zoom View" +msgstr "ズーム" + +msgid "" +"Auto orientates selected objects or all objects.If there are selected " +"objects, it just orientates the selected ones.Otherwise, it will orientates " +"all objects in the current disk." +msgstr "選択した或いは全てのオブジェクトの向きを自動調整します。" + +msgid "Collapse/Expand the sidebar" +msgstr "サイドバーを展開/隠す" + +msgid "⌘+Any arrow" +msgstr "⌘+↑↓←→" + +msgid "Movement in camera space" +msgstr "オブジェクト移動" + +msgid "⌥+Left mouse button" +msgstr "⌥+マウス左ボタン" + +msgid "Select a part" +msgstr "パーツを選択" + +msgid "⌘+Left mouse button" +msgstr "⌘+マウス左ボタン" + +msgid "Select multiple objects" +msgstr "複数のオブジェクトを選択" + +msgid "Ctrl+Any arrow" +msgstr "Ctrl+↑↓←→" + +msgid "Alt+Left mouse button" +msgstr "Alt+マウス左ボタン" + +msgid "Ctrl+Left mouse button" +msgstr "Ctrl+マウス左ボタン" + +msgid "Shift+Left mouse button" +msgstr "Shift + マウス左ボタン" + +msgid "Select objects by rectangle" +msgstr "矩形でオブジェクトを選択" + +msgid "Arrow Up" +msgstr "↑" + +msgid "Move selection 10 mm in positive Y direction" +msgstr "Y方向 10mm" + +msgid "Arrow Down" +msgstr "↓" + +msgid "Move selection 10 mm in negative Y direction" +msgstr "Y方向 -10mm" + +msgid "Arrow Left" +msgstr "←" + +msgid "Move selection 10 mm in negative X direction" +msgstr "X方向 -10mm" + +msgid "Arrow Right" +msgstr "→" + +msgid "Move selection 10 mm in positive X direction" +msgstr "X方向 10mm" + +msgid "Shift+Any arrow" +msgstr "Shift + ↑↓←→" + +msgid "Movement step set to 1 mm" +msgstr "移動ステップを1mmに設定" + +msgid "keyboard 1-9: set filament for object/part" +msgstr "キー1-9: オブジェクト/パーツのフィラメントを設定" + +msgid "Camera view - Default" +msgstr "デフォルト" + +msgid "Camera view - Top" +msgstr "トップ" + +msgid "Camera view - Bottom" +msgstr "底面" + +msgid "Camera view - Front" +msgstr "正面" + +msgid "Camera view - Behind" +msgstr "背面" + +msgid "Camera Angle - Left side" +msgstr "左側" + +msgid "Camera Angle - Right side" +msgstr "右側" + +msgid "Select all objects" +msgstr "すべてのオブジェクトを選択" + +msgid "Gizmo move" +msgstr "移動" + +msgid "Gizmo scale" +msgstr "スケール" + +msgid "Gizmo rotate" +msgstr "回転" + +msgid "Gizmo cut" +msgstr "カット" + +msgid "Gizmo Place face on bed" +msgstr "底面選択" + +msgid "Gizmo SLA support points" +msgstr "SLAサポートポイント" + +msgid "Gizmo FDM paint-on seam" +msgstr "継ぎ目ペイント" + +msgid "Plater" +msgstr "準備" + +msgid "Move: press to snap by 1mm" +msgstr "1mm単位で移動" + +msgid "⌘+Mouse wheel" +msgstr "⌘+マウスホイール" + +msgid "Support/Color Painting: adjust pen radius" +msgstr "サポート/色塗り: 半径のサイズ" + +msgid "⌥+Mouse wheel" +msgstr "⌥+マウスホイール" + +msgid "Support/Color Painting: adjust section position" +msgstr "サポート/色塗り: 断面の位置" + +msgid "Ctrl+Mouse wheel" +msgstr "Ctrl+マウスホイール" + +msgid "Alt+Mouse wheel" +msgstr "Alt+マウスホイール" + +msgid "Gizmo" +msgstr "Gizmo" + +msgid "Set extruder number for the objects and parts" +msgstr "オブジェクトとパーツ造形用の押出機番号を設定" + +msgid "Delete objects, parts, modifiers " +msgstr "オブジェクト、パーツ、モディファイヤを削除" + +msgid "Space" +msgstr "スペース" + +msgid "Select the object/part and press space to change the name" +msgstr "オブジェクト/パーツを選択し、名前を変更します" + +msgid "Mouse click" +msgstr "マウスクリック" + +msgid "Select the object/part and mouse click to change the name" +msgstr "オブジェクト/パーツを選択し、名前を変更します" + +msgid "Objects List" +msgstr "オブジェクト一覧" + +msgid "Vertical slider - Move active thumb Up" +msgstr "垂直スライダー" + +msgid "Vertical slider - Move active thumb Down" +msgstr "垂直スライダー" + +msgid "Horizontal slider - Move active thumb Left" +msgstr "水平スライダー (左)" + +msgid "Horizontal slider - Move active thumb Right" +msgstr "水平スライダー (右)" + +msgid "On/Off one layer mode of the vertical slider" +msgstr "On/Off one layer mode of the vertical slider" + +msgid "Move slider 5x faster" +msgstr "5x" + +msgid "Shift+Mouse wheel" +msgstr "Shift + マウスホイール" + +msgid "Release Note" +msgstr "リリースノート" + +#, c-format, boost-format +msgid "version %s update information :" +msgstr "バージョン %s 更新内容" + +msgid "Network plug-in update" +msgstr "ネットワークプラグインの更新" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" +"OK をクリックすると、次回 Bambu Studio を起動したときにネットワークプラグイン" +"が更新されます。" + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "新しいプラグイン (%s) が発見しました、インストールしますか?" + +msgid "New version of Bambu Studio" +msgstr "新バージョン" + +msgid "Don't remind me of this version again" +msgstr "今後このバージョンの通知をしません" + +msgid "Done" +msgstr "" + +msgid "LAN Connection Failed (Sending print file)" +msgstr "LAN接続失敗 (造形ファイル送信)" + +msgid "" +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." +msgstr "" +"1Bambu Studioとプリンターが同一のLANに繋いでいること確認してください。" + +msgid "" +"Step 2, if the IP and Access Code below are different from the actual values " +"on your printer, please correct them." +msgstr "2下記IPアドレスやアクセスコードが一致していない場合修正してください。" + +msgid "IP" +msgstr "IP" + +msgid "Access Code" +msgstr "アクセスコード" + +msgid "Where to find your printer's IP and Access Code?" +msgstr "どこでプリンターのIPアドレスとアクセスコードを確認できますか?" + +msgid "Error: IP or Access Code are not correct" +msgstr "エラー: IPアドレス或はアクセスコードが正しくありません" + +msgid "Model:" +msgstr "モデル" + +msgid "Serial:" +msgstr "シリアル番号" + +msgid "Version:" +msgstr "バージョン" + +msgid "Update firmware" +msgstr "ファームウェアを更新" + +msgid "Printing" +msgstr "造形中" + +msgid "Idle" +msgstr "待機中" + +msgid "Latest version" +msgstr "最新バージョン" + +msgid "Updating" +msgstr "更新中" + +msgid "Updating failed" +msgstr "更新は失敗しました" + +msgid "Updating successful" +msgstr "更新は成功しました" + +msgid "" +"Are you sure you want to update? This will take about 10 minutes. Do not " +"turn off the power while the printer is updating." +msgstr "" +"更新してもよろしいでしょうか?約 10 分ほどかかります。更新中に、プリンターの電" +"源を切らないでください。" + +msgid "" +"An important update was detected and needs to be run before printing can " +"continue. Do you want to update now? You can also update later from 'Upgrade " +"firmware'." +msgstr "" +"重要な更新が検出されたため、造形を続ける前に実行してください。今すぐ更新しま" +"すか?" + +msgid "" +"The firmware version is abnormal. Repairing and updating are required before " +"printing. Do you want to update now? You can also update later on printer or " +"update next time starting the studio." +msgstr "" +"ファームウェアのバージョンに異常があります。印刷する前に修復と更新が必要で" +"す。今すぐ更新しますか?" + +msgid "Extension Board" +msgstr "拡張ボード" + +msgid "Saving objects into the 3mf failed." +msgstr "3mfへの保存は失敗しました。" + +msgid "Only Windows 10 is supported." +msgstr "Windows 10のみ対応" + +msgid "Failed to initialize the WinRT library." +msgstr "ライブラリを初期化できませんでした" + +msgid "Exporting objects" +msgstr "オブジェクトをエクスポート中" + +msgid "Failed loading objects." +msgstr "オブジェクトをロードできませんでした" + +msgid "Repairing object by Windows service" +msgstr "Windowsサービスでオブジェクトを修復" + +msgid "Repair failed." +msgstr "修復が失敗しました" + +msgid "Loading repaired objects" +msgstr "修復されたオブジェクトをロード" + +msgid "Exporting 3mf file failed" +msgstr "3mfのエクスポートが失敗しました" + +msgid "Import 3mf file failed" +msgstr "3mf ファイルをインポート失敗" + +msgid "Repaired 3mf file does not contain any object" +msgstr "修復した3mfファイルにはオブジェクトがありません" + +msgid "Repaired 3mf file contains more than one object" +msgstr "修復した3mfファイルには複数のオブジェクトが含まれています。" + +msgid "Repaired 3mf file does not contain any volume" +msgstr "修復された3mfファイルにはパーツがありません" + +msgid "Repaired 3mf file contains more than one volume" +msgstr "修復した3mfファイルには複数のパーツが含まれています。" + +msgid "Repair finished" +msgstr "修復完了" + +msgid "Repair canceled" +msgstr "修復を取消しました" + +#, boost-format +msgid "Copying of file %1% to %2% failed: %3%" +msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)" + +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "フォルダ %1% を %2% へのコピーが失敗しました (%3%)" + +msgid "Need to check the unsaved changes before configuration updates." +msgstr "構成を更新する前に、未保存の変更をご確認ください" + +msgid "Configuration package updated to " +msgstr "構成パッケージがアップデートされました" + +msgid "Open G-code file:" +msgstr "G-codeファイルを開く" + +msgid "" +"One object has empty initial layer and can't be printed. Please Cut the " +"bottom or enable supports." +msgstr "" +"オブジェクトはプレートと接触していないため造形できません。サポートを有効する" +"か、オブジェクトを修正してください。" + +#, boost-format +msgid "Object can't be printed for empty layer between %1% and %2%." +msgstr "オブジェクトの %1% と %2% の間には、造形できるものがありません。" + +#, boost-format +msgid "Object: %1%" +msgstr "オブジェクト: %1%" + +msgid "" +"Maybe parts of the object at these height are too thin, or the object has " +"faulty mesh" +msgstr "" +"この高さでオブジェクトが薄すぎるか、メッシュに欠陥がある可能性があります" + +msgid "No object can be printed. Maybe too small" +msgstr "造形できるオブジェクトがありません。" + +msgid "" +"Failed to generate gcode for invalid custom G-code.\n" +"\n" +msgstr "G-codeを生成できませんでした\n" + +msgid "Please check the custom G-code or use the default custom G-code." +msgstr "カスタムG-codeを確認するか、デフォルトを使用してください。" + +#, boost-format +msgid "Generating G-code: layer %1%" +msgstr "G-codeを生成:レイヤー %1%" + +msgid "Inner wall" +msgstr "内壁" + +msgid "Outer wall" +msgstr "外壁" + +msgid "Overhang wall" +msgstr "オーバーハング" + +msgid "Sparse infill" +msgstr "スパース インフィル" + +msgid "Internal solid infill" +msgstr "内部ソリッド インフィル" + +msgid "Top surface" +msgstr "トップ面" + +msgid "Bottom surface" +msgstr "底面" + +msgid "Bridge" +msgstr "ブリッジ" + +msgid "Gap infill" +msgstr "隙間インフィル" + +msgid "Support interface" +msgstr "サポート接触面" + +msgid "Support transition" +msgstr "サポート変換層" + +msgid "Multiple" +msgstr "複数" + +#, boost-format +msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " +msgstr "線幅 %1% を算出できませんでした。%2%の値を取得できません。" + +msgid "undefined error" +msgstr "未定義エラー" + +msgid "too many files" +msgstr "ファイル数が多すぎます。" + +msgid "file too large" +msgstr "ファイルが大きすぎます" + +msgid "unsupported method" +msgstr "非対応方式" + +msgid "unsupported encryption" +msgstr "非対応の暗号化方式" + +msgid "unsupported feature" +msgstr "非対応機能" + +msgid "failed finding central directory" +msgstr "フォルダが見つかりませんでした" + +msgid "not a ZIP archive" +msgstr "ZIP形式ではありません" + +msgid "invalid header or corrupted" +msgstr "無効又は破損したなヘッダー" + +msgid "unsupported multidisk" +msgstr "RAID への保存はサポートされていません。" + +msgid "decompression failed" +msgstr "解凍が失敗しました" + +msgid "compression failed" +msgstr "圧縮失敗" + +msgid "unexpected decompressed size" +msgstr "解凍サイズに異常があります" + +msgid "CRC check failed" +msgstr "CRC検査失敗" + +msgid "unsupported central directory size" +msgstr "サポートされていないフォルダサイズ" + +msgid "allocation failed" +msgstr "メモリ割り当て失敗" + +msgid "file open failed" +msgstr "file open failed" + +msgid "file create failed" +msgstr "file create failed" + +msgid "file write failed" +msgstr "file write failed" + +msgid "file read failed" +msgstr "file read failed" + +msgid "file close failed" +msgstr "file close failed" + +msgid "file seek failed" +msgstr "file seek failed" + +msgid "file stat failed" +msgstr "file stat failed" + +msgid "invalid parameter" +msgstr "無効なパラメータ" + +msgid "invalid filename" +msgstr "無効なファイル名" + +msgid "buffer too small" +msgstr "バッファーが小さすぎます" + +msgid "internal error" +msgstr "内部エラー" + +msgid "file not found" +msgstr "ファイルが行方不明" + +msgid "archive too large" +msgstr "アーカイブのサイスが大きすぎです" + +msgid "validation failed" +msgstr "アカウントの認証に失敗しました" + +msgid "write callback failed" +msgstr "書込みコールバック失敗" + +#, boost-format +msgid "" +"%1% is too close to exclusion area, there may be collisions when printing." +msgstr "%1% は除外エリアに近すぎます。造形時に衝突の可能性があります。" + +#, boost-format +msgid "%1% is too close to others, and collisions may be caused." +msgstr "%1% は他のオブジェクトと近すぎるため、衝突の可能性があります。" + +#, boost-format +msgid "%1% is too tall, and collisions will be caused." +msgstr "%1% は高すぎます、衝突の可能性があります。" + +msgid " is too close to others, there may be collisions when printing." +msgstr "他のオブジェクトと近すぎます。オブジェクトと衝突の可能性があります。" + +msgid " is too close to exclusion area, there may be collisions when printing." +msgstr "が除外領域に近すぎます。衝突の可能性があります。" + +msgid "Prime Tower" +msgstr "プライムタワー" + +msgid " is too close to others, and collisions may be caused.\n" +msgstr "他のオブジェクト に近すぎるので、衝突の可能性があります\n" + +msgid " is too close to exclusion area, and collisions will be caused.\n" +msgstr "除外領域 に近すぎるので、衝突の可能性があります。\n" + +msgid "" +"Can not print multiple filaments which have large difference of temperature " +"together. Otherwise, the extruder and nozzle may be blocked or damaged " +"during printing" +msgstr "" +"温度差が大きいフィラメントを一緒に造形することができません。ノズル詰まりや損" +"傷する可能性があります" + +msgid "No extrusions under current settings." +msgstr "現在の設定では造形しません" + +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "オブジェクト順で造形するでは、この機能を使用できません。" + +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"スパイラルモードでは、[オブジェクト順]で複数のオブジェクトを造形してください" + +msgid "" +"The spiral vase mode does not work when an object contains more than one " +"materials." +msgstr "複数の素材の場合、スパイラルモードを使用できません" + +msgid "The prime tower is not supported in \"By object\" print." +msgstr "オブジェクト順で造形する場合、プライムタワーを利用できません" + +msgid "" +"The prime tower is not supported when adaptive layer height is on. It " +"requires that all objects have the same layer height." +msgstr "[アダプティブ積層ピッチ]を使用する時に、プライムタワーを利用できません" + +msgid "The prime tower requires \"support gap\" to be multiple of layer height" +msgstr "" +"プライムタワーを使用するにはサポートとのギャップを積層ピッチの整数倍である必" +"要があります" + +msgid "The prime tower requires that all objects have the same layer heights" +msgstr "" +"プライムタワーを使用するには、全てのオブジェクトが同じ積層ピッチを使う必要が" +"あります" + +msgid "" +"The prime tower requires that all objects are printed over the same number " +"of raft layers" +msgstr "" +"プライムタワーを使用するには、全てのオブジェクトが同じラフト層数を使う必要が" +"あります" + +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"プライムタワーを使用するには、全てのオブジェクトが同じ積層ピッチを使う必要が" +"あります" + +msgid "" +"The prime tower is only supported if all objects have the same variable " +"layer height" +msgstr "" +"プライムタワーを使用するには、全てのオブジェクトが同じ積層ピッチを持つ必要が" +"あります" + +msgid "Too small line width" +msgstr "線幅が小さすぎます" + +msgid "Too large line width" +msgstr "線幅が広すぎます" + +msgid "" +"The prime tower requires that support has the same layer height with object." +msgstr "" +"プライムタワーを使用するには、オブジェクトとサポートが同じ積層ピッチを使う必" +"要があります" + +msgid "" +"Support enforcers are used but support is not enabled. Please enable support." +msgstr "" +"サポート増強器を有効しましたが、サポート自体は有効されていません。有効にして" +"ください。" + +msgid "Layer height cannot exceed nozzle diameter" +msgstr "積層ピッチはノズルの直径を超える為設定できません" + +#, c-format, boost-format +msgid "Plate %d: %s does not support filament %s" +msgstr "プレート %d: %s がフィラメント %s を使用できません" + +msgid "Generating skirt & brim" +msgstr "スカートとブリムを生成" + +msgid "Exporting G-code" +msgstr "G-codeをエクスポート中" + +msgid "Generating G-code" +msgstr "G-codeを生成" + +msgid "Failed processing of the filename_format template." +msgstr "filename_formatテンプレートを処理できませんでした" + +msgid "Printable area" +msgstr "造形可能領域" + +msgid "Bed exclude area" +msgstr "除外領域" + +msgid "" +"Unprintable area in XY plane. For example, X1 Series printers use the front " +"left corner to cut filament during filament change. The area is expressed as " +"polygon by points in following format: \"XxY, XxY, ...\"" +msgstr "XY方向の除外領域" + +msgid "Bed custom texture" +msgstr "カスタムベッドテクスチャ" + +msgid "Bed custom model" +msgstr "カスタムベッドモデル" + +msgid "Elephant foot compensation" +msgstr "コーナーはみ出し補正" + +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "1層目を縮小して、コーナーのはみ出しを軽減します。" + +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"積層の高さです。小さい値では仕上がりがと良くなりますが、造形時間が伸びます。" + +msgid "Printable height" +msgstr "造形可能高さ" + +msgid "Maximum printable height which is limited by mechanism of printer" +msgstr "造形可能の最大高さです。" + +msgid "Printer preset names" +msgstr "プリセット名" + +msgid "Hostname, IP or URL" +msgstr "Hostname、IPまたはURL" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the hostname, IP address or URL of the printer host instance. Print host " +"behind HAProxy with basic auth enabled can be accessed by putting the user " +"name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" +msgstr "" +"ホスト名、IPアドレス、URLを入力してください。ユーザ名とパスワードがある場合、" +"下記形式を参照してください https://username:password@your-octopi-address/" + +msgid "API Key / Password" +msgstr "APIキー/パスワード" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the API Key or the password required for authentication." +msgstr "APIキーとパスワードを入力してください。" + +msgid "Name of the printer" +msgstr "プリンター名" + +msgid "HTTPS CA File" +msgstr "CA証書ファイル" + +msgid "" +"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " +"in crt/pem format. If left blank, the default OS CA certificate repository " +"is used." +msgstr "カスタムCA証書を指定できます(フォーマット:CRT/PEM)" + +msgid "User" +msgstr "ユーザ" + +msgid "Password" +msgstr "パスワード" + +msgid "Ignore HTTPS certificate revocation checks" +msgstr "HTTPS証書失効を無視" + +msgid "" +"Ignore HTTPS certificate revocation checks in case of missing or offline " +"distribution points. One may want to enable this option for self signed " +"certificates if connection fails." +msgstr "HTTPS証書の失効チェックを省略します。" + +msgid "Names of presets related to the physical printer" +msgstr "プリンターに関連するプリセット名" + +msgid "Authorization Type" +msgstr "認証タイプ" + +msgid "API key" +msgstr "APIキー" + +msgid "HTTP digest" +msgstr "HTTP digest" + +msgid "Avoid crossing wall" +msgstr "壁上の移動を迂回" + +msgid "Detour and avoid to travel across wall which may cause blob on surface" +msgstr "移動する時に、壁面を迂回します。表面の仕上がりが良くなります。" + +msgid "Avoid crossing wall - Max detour length" +msgstr "最大迂回距離" + +msgid "" +"Maximum detour distance for avoiding crossing wall. Don't detour if the " +"detour distance is large than this value. Detour length could be specified " +"either as an absolute value or as percentage (for example 50%) of a direct " +"travel path. Zero to disable" +msgstr "" +"迂回距離上限: 移動距離がこの値以上になる場合迂回しません。値が0の場合無効にな" +"ります。" + +msgid "mm or %" +msgstr "mm 或は %" + +msgid "Other layers" +msgstr "他の層" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Cool Plate" +msgstr "" +"ベッドの温度です(1層目以外)。値が0の場合、フィラメントが常温プレートで使用" +"できないという意味です。" + +msgid "°C" +msgstr "°C" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"ベッドの温度です(1層目以外)。値が0の場合、フィラメントがエンジニアリング プ" +"レートで使用できないという意味です。" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the High Temp Plate" +msgstr "" +"ベッドの温度です(1層目以外)。値が0の場合、フィラメントが高温プレートで使用" +"できないという意味です。" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" +"1層目以外のベッド温度。値が0の場合、フィラメントがPEIプレートをサポートしない" +"意味をします。" + +msgid "Initial layer" +msgstr "1層目" + +msgid "Initial layer bed temperature" +msgstr "1層目ベッド温度" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate" +msgstr "" +"1層目のベッド温度です。値が0の場合、フィラメントが常温プレートに使用できない" +"意味です。" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"1層目のベッド温度です。値が0の場合、フィラメントがエンジニアリング プレートに" +"使用できない意味です。" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"1層目のベッド温度です。値が0の場合、フィラメントが高温プレートに使用できない" +"意味です。" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Textured PEI Plate" +msgstr "" +"1層目のベッド温度。値が0の場合は、フィラメントがPEIプレートをサポートしない意" +"味です。" + +msgid "Bed types supported by the printer" +msgstr "適応ベッド種類" + +msgid "This G-code is inserted at every layer change before lifting z" +msgstr "積層が変わる直前に実行するG-codeです。" + +msgid "Bottom shell layers" +msgstr "底面層数" + +msgid "" +"This is the number of solid layers of bottom shell, including the bottom " +"surface layer. When the thickness calculated by this value is thinner than " +"bottom shell thickness, the bottom shell layers will be increased" +msgstr "" +"底面に使用するソリッド層数です。この値が底面の厚みより小さい場合、層数を増や" +"して厚みに合わせます。" + +msgid "Bottom shell thickness" +msgstr "底面厚さ" + +msgid "" +"The number of bottom solid layers is increased when slicing if the thickness " +"calculated by bottom shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of bottom shell is absolutely determained by " +"bottom shell layers" +msgstr "" +"底面の厚さです、底面層数で決まった厚みがこの値より小さい場合、層数を増やしま" +"す。この値が0にする場合、この設定が無効となり、設定した層数で造形します。" + +msgid "Force cooling for overhang and bridge" +msgstr "オーバーハングとブリッジの冷却" + +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"この設定により、パーツ冷却ファンの回転速度を最適化を行います。オーバーハング" +"やブリッジの冷却に有効的です。" + +msgid "Fan speed for overhang" +msgstr "オーバーハングの回転速度" + +msgid "" +"Force part cooling fan to be this speed when printing bridge or overhang " +"wall which has large overhang degree. Forcing cooling for overhang and " +"bridge can get better quality for these part" +msgstr "" +"大きなオーバーハングやブリッジを造形する時にファンの回転速度。仕上がりが向上" +"させる効果があります。" + +msgid "Cooling overhang threshold" +msgstr "オーバーハングの冷却閾値" + +#, c-format +msgid "" +"Force cooling fan to be specific speed when overhang degree of printed part " +"exceeds this value. Expressed as percentage which indicides how much width " +"of the line without support from lower layer. 0% means forcing cooling for " +"all outer wall no matter how much overhang degree" +msgstr "" +"Force cooling fan to be a specific speed when overhang degree of printed " +"part exceeds this value. This is expressed as a percentage which indicates " +"how much width of the line without support from lower layer. 0% means " +"forcing cooling for all outer wall no matter the overhang degree." + +msgid "Bridge direction" +msgstr "ブリッジ方向" + +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for " +"external bridges. Use 180°for zero angle." +msgstr "" +"ブリッジ角度。値が0の場合は自動計算となります。0°を使用したい場合は180を入力" +"していください。" + +msgid "Bridge flow" +msgstr "ブリッジ流量" + +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"この値を少し (例えば 0.9) 小さくし、ブリッジ用に押出し量を減らし、たるみを防" +"ぎます。" + +msgid "Only one wall on top surfaces" +msgstr "トップ面に1層" + +msgid "" +"Use only one wall on flat top surface, to give more space to the top infill " +"pattern" +msgstr "トップ面に1層だけ造形します、インフィルを多い空間を与えます。" + +msgid "Slow down for overhang" +msgstr "オーバーハング減速" + +msgid "Enable this option to slow printing down for different overhang degree" +msgstr "" +"オーバーハングを造形時に速度を下げます。各角度のオーバーハングに対して、下記" +"の減速パラメータを設定してください。" + +msgid "mm/s" +msgstr "mm/s" + +msgid "Speed of bridge and completely overhang wall" +msgstr "ブリッジを造形する時に速度です。" + +msgid "Brim width" +msgstr "ブリム幅" + +msgid "Distance from model to the outermost brim line" +msgstr "一番外側のブリム線がモデルと距離です。" + +msgid "Brim type" +msgstr "ブリムタイプ" + +msgid "" +"This controls the generation of the brim at outer side of models. Auto means " +"the brim width is analysed and calculated automatically." +msgstr "" + +msgid "Brim-object gap" +msgstr "ブリムとオブジェクトの間隔" + +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "" +"ブリムを取り外しやすくする為、一番内側のブリムラインをモデルと少し距離を設け" +"ます。" + +msgid "Compatible machine" +msgstr "対応機種" + +msgid "upward compatible machine" +msgstr "互換性のあるデバイス" + +msgid "Compatible machine condition" +msgstr "対応機種条件" + +msgid "Compatible process profiles" +msgstr "互換性のあるプロセスプロファイル" + +msgid "Compatible process profiles condition" +msgstr "互換性のあるプロセスプロファイル条件" + +msgid "Print sequence, layer by layer or object by object" +msgstr "造形の順番を設定します、積層順かオブジェクト順にしてください" + +msgid "By layer" +msgstr "積層順" + +msgid "By object" +msgstr "オブジェクト順" + +msgid "Slow printing down for better layer cooling" +msgstr "冷却の為減速" + +msgid "" +"Enable this option to slow printing speed down to make the final layer time " +"not shorter than the layer time threshold in \"Max fan speed threshold\", so " +"that layer can be cooled for longer time. This can improve the cooling " +"quality for needle and small details" +msgstr "" +"この設定を有効にする場合、最終層の造形で速度を下げます。よって、最終層の冷却" +"時間を延長されますので、細部の品質を改善に繋がります。" + +msgid "Normal printing" +msgstr "通常造形" + +msgid "" +"The default acceleration of both normal printing and travel except initial " +"layer" +msgstr "造形と移動時のデフォルト加速度です。" + +msgid "mm/s²" +msgstr "mm/s²" + +msgid "Default filament profile" +msgstr "デフォルト フィラメント プロファイル" + +msgid "Default filament profile when switch to this machine profile" +msgstr "デバイスを切替える時のデフォルト フィラメント プロファイル" + +msgid "Default process profile" +msgstr "デフォルト プロセスプロファイル" + +msgid "Default process profile when switch to this machine profile" +msgstr "デバイスを切替える時のデフォルト プロセス プロファイル" + +msgid "No cooling for the first" +msgstr "冷却しない最初層数" + +msgid "" +"Close all cooling fan for the first certain layers. Cooling fan of the first " +"layer used to be closed to get better build plate adhesion" +msgstr "" +"1層目をプリント時に全てのファンをオフにします。ベッドとの接着性を高めます" + +msgid "layers" +msgstr "積層" + +msgid "Don't support bridges" +msgstr "ブリッジにサポートしない" + +msgid "" +"Don't support the whole bridge area which make support very large. Bridge " +"usually can be printing directly without support if not very long" +msgstr "" +"ブリッジが長くない場合は、サポートが無くても造形できます。フィラメントの消費" +"量を減らします。" + +msgid "Thick bridges" +msgstr "厚いブリッジ" + +msgid "" +"If enabled, bridges are more reliable, can bridge longer distances, but may " +"look worse. If disabled, bridges look better but are reliable just for " +"shorter bridged distances." +msgstr "" +"有効になる場合、より長いブリッジを造形できますが、仕上がりが劣る可能性があり" +"ます。" + +msgid "Max bridge length" +msgstr "最大ブリッジ長さ" + +msgid "" +"Max length of bridges that don't need support. Set it to 0 if you want all " +"bridges to be supported, and set it to a very large value if you don't want " +"any bridges to be supported." +msgstr "" +"サポートの要らないブリッジの最大長さです。値が0の場合、全てのブリッジにサポー" +"トを使用します、非常に大きい値を入れると、全てのブリッジにサポートを使用しま" +"せん。" + +msgid "End G-code" +msgstr "終了G-code" + +msgid "End G-code when finish the whole printing" +msgstr "造形完了時のG-codeを追加" + +msgid "End G-code when finish the printing of this filament" +msgstr "このフィラメントを使用終わった時のG-codeを追加" + +msgid "Ensure vertical shell thickness" +msgstr "壁の厚さを確保" + +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)" +msgstr "傾斜面にソリッドインフィルを追加" + +msgid "Internal bridge support thickness" +msgstr "内部ブリッジサポート厚さ" + +msgid "" +"If enabled, Studio will generate support loops under the contours of " +"internal bridges.These support loops could prevent internal bridges from " +"extruding over the air and improve the top surface quality, especially when " +"the sparse infill density is low.This value determines the thickness of the " +"support loops. 0 means disable this feature" +msgstr "" + +msgid "Top surface pattern" +msgstr "トップ面パターン" + +msgid "Line pattern of top surface infill" +msgstr "トップ面のインフィルのパターンです。" + +msgid "Concentric" +msgstr "同心" + +msgid "Rectilinear" +msgstr "直線" + +msgid "Monotonic" +msgstr "単調" + +msgid "Monotonic line" +msgstr "単調線" + +msgid "Aligned Rectilinear" +msgstr "整列直線" + +msgid "Hilbert Curve" +msgstr "ヒルベルト曲線" + +msgid "Archimedean Chords" +msgstr "アルキメデス螺旋" + +msgid "Octagram Spiral" +msgstr "オクタグラムスパイラル" + +msgid "Bottom surface pattern" +msgstr "底面パターン" + +msgid "Line pattern of bottom surface infill, not bridge infill" +msgstr "底面のインフィル パターンです、ブリッジインフィルが含まれていません。" + +msgid "Line width of outer wall" +msgstr "外壁の線幅" + +msgid "" +"Speed of outer wall which is outermost and visible. It's used to be slower " +"than inner wall speed to get better quality." +msgstr "" +"外壁の造形速度です。普段は内壁より遅い速度を指定し、仕上がりが良くなります。" + +msgid "Order of inner wall/outer wall/infil" +msgstr "造形順番" + +msgid "Print sequence of inner wall, outer wall and infill. " +msgstr "内壁、外壁とインフィルの造形順序を指定します。" + +msgid "inner/outer/infill" +msgstr "内壁/外壁/インフィル" + +msgid "outer/inner/infill" +msgstr "外壁/内壁/インフィル" + +msgid "infill/inner/outer" +msgstr "インフィル/内壁/外壁" + +msgid "infill/outer/inner" +msgstr "インフィル/外壁/内壁" + +msgid "inner-outer-inner/infill" +msgstr "内壁-外壁-内壁/インフィル" + +msgid "Height to rod" +msgstr "レールまでの高さ" + +msgid "" +"Distance of the nozzle tip to the lower rod. Used for collision avoidance in " +"by-object printing." +msgstr "" +"ノズル先端から下のレールまでの距離です。オブジェクト順で造形する時に衝突防止" +"用です。" + +msgid "Height to lid" +msgstr "蓋までの高さ" + +msgid "" +"Distance of the nozzle tip to the lid. Used for collision avoidance in by-" +"object printing." +msgstr "" +"ノズル先端から蓋までの距離。オブジェクト順で造形する時に衝突防止用です。" + +msgid "" +"Clearance radius around extruder. Used for collision avoidance in by-object " +"printing." +msgstr "" +"押出機のクリアランス(半径):オブジェクト順で造形する時にこのパラメータでオ" +"ブジェクトの間隔を計算します。" + +msgid "Max Radius" +msgstr "最大半径" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "押出機のクリアランス半径。オブジェクト順で造形する時に衝突防止用です。" + +msgid "Extruder Color" +msgstr "押出機の色" + +msgid "Only used as a visual help on UI" +msgstr "ビジュアル情報として使用される" + +msgid "Extruder offset" +msgstr "押出機オフセット" + +msgid "Flow ratio" +msgstr "流量比" + +msgid "" +"The material may have volumetric change after switching between molten state " +"and crystalline state. This setting changes all extrusion flow of this " +"filament in gcode proportionally. Recommended value range is between 0.95 " +"and 1.05. Maybe you can tune this value to get nice flat surface when there " +"has slight overflow or underflow" +msgstr "" +"フィラメントは温度により体積が変わります。この設定で押出流量を比例的に調整し" +"ます。 0.95 ~ 1.05の間で設定していください。" + +msgid "Default line width if some line width is set to be zero" +msgstr "線幅が0に設定された時のデフォルト線幅" + +msgid "Keep fan always on" +msgstr "ファン常時ON" + +msgid "" +"If enable this setting, part cooling fan will never be stoped and will run " +"at least at minimum speed to reduce the frequency of starting and stoping" +msgstr "" +"この設定により、パーツ冷却ファンを停止しなく、最低速度で回転します。頻繁に回" +"転・停止の頻度を減らします。" + +msgid "Layer time" +msgstr "積層時間" + +msgid "" +"Part cooling fan will be enabled for layers of which estimated time is " +"shorter than this value. Fan speed is interpolated between the minimum and " +"maximum fan speeds according to layer printing time" +msgstr "パーツ冷却ファンは、積層造形時間がこの値より短い時に作動します。" + +msgid "s" +msgstr "s" + +msgid "Default color" +msgstr "デフォルト色" + +msgid "Default filament color" +msgstr "フィラメントのデフォルト色" + +msgid "Color" +msgstr "色" + +msgid "Required nozzle HRC" +msgstr "ノズルHRC" + +msgid "" +"Minimum HRC of nozzle required to print the filament. Zero means no checking " +"of nozzle's HRC." +msgstr "" +"フィラメントを使用するのに最低限のノズルHRCです。値が0の場合、ノズルのNRCを" +"チェックしない意味です。" + +msgid "" +"This setting stands for how much volume of filament can be melted and " +"extruded per second. Printing speed is limited by max volumetric speed, in " +"case of too high and unreasonable speed setting. Can't be zero" +msgstr "" +"この設定は、単位時間で押出できるフィラメントの体積を示します。造形速度はこの" +"パラメータにも制限されています。0に設定できません。" + +msgid "mm³/s" +msgstr "mm³/s" + +msgid "Minimal purge on wipe tower" +msgstr "プライムタワー上最小フラッシュ量" + +msgid "mm³" +msgstr "mm³" + +msgid "Filament load time" +msgstr "フィラメントロード時間" + +msgid "Time to load new filament when switch filament. For statistics only" +msgstr "" +"フィラメントを入れ替える時に、フィラメントをロードする時間です、統計目的に使" +"用されています。" + +msgid "Filament unload time" +msgstr "フィラメントアンロード時間" + +msgid "Time to unload old filament when switch filament. For statistics only" +msgstr "" +"フィラメントを入れ替える時に、フィラメントをアンロードする時間です、統計目的" +"に使用されています。" + +msgid "" +"Filament diameter is used to calculate extrusion in gcode, so it's important " +"and should be accurate" +msgstr "" +"押出制御に使用されるパラメータなので、精確なフィラメント直径を入力してくださ" +"い" + +msgid "Density" +msgstr "密度" + +msgid "Filament density. For statistics only" +msgstr "フィラメント密度" + +msgid "g/cm³" +msgstr "g/cm³" + +msgid "Type" +msgstr "タイプ" + +msgid "The material type of filament" +msgstr "フィラメント素材タイプ" + +msgid "Soluble material" +msgstr "可溶性材料" + +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "可溶性材料は、サポート又はサポート接触面の造形によく使われます" + +msgid "Support material" +msgstr "サポート材料" + +msgid "" +"Support material is commonly used to print support and support interface" +msgstr "サポート素材は、サポート又はサポート接触面の造形によく使われます。" + +msgid "Temperature of vitrificaiton" +msgstr "軟化温度" + +msgid "" +"Material becomes soft at this temperature. Thus the heatbed cannot be hotter " +"than this tempature" +msgstr "" +"この温度でフィラメントが柔らかくなります、ベッド温度をこれ以下に設定してくだ" +"さい" + +msgid "Price" +msgstr "価格" + +msgid "Filament price. For statistics only" +msgstr "フィラメント単価" + +msgid "money/kg" +msgstr "USD/kg" + +msgid "(Undefined)" +msgstr "(未定義)" + +msgid "Infill direction" +msgstr "インフィル方向" + +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "スパース インフィル パターンの角度です" + +msgid "Sparse infill density" +msgstr "充填密度" + +#, c-format +msgid "Density of internal sparse infill, 100% means solid throughout" +msgstr "スパース インフィルの密度です。100%%に設定する場合ソリッドになります。" + +msgid "Sparse infill pattern" +msgstr "充填パターン" + +msgid "Line pattern for internal sparse infill" +msgstr "スパース インフィルのパターンです。" + +msgid "Grid" +msgstr "グリッド" + +msgid "Line" +msgstr "直線" + +msgid "Cubic" +msgstr "キュービック" + +msgid "Tri-hexagon" +msgstr "六角形" + +msgid "Gyroid" +msgstr "ジャイロイド" + +msgid "Honeycomb" +msgstr "ハニカム" + +msgid "Adaptive Cubic" +msgstr "アダプティブ キュービック" + +msgid "3D Honeycomb" +msgstr "3D ハニカム" + +msgid "Support Cubic" +msgstr "キュービックサポート" + +msgid "Lightning" +msgstr "ライトニング" + +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"トップ面のインフィル加速度です。遅くすると表面の仕上がりが向上させることがで" +"きます" + +msgid "Acceleration of outer wall. Using a lower value can improve quality" +msgstr "外壁の加速度:低い値では品質を向上させることができます。" + +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhensive" +msgstr "" +"1層目の造形加速度です。遅くするとプレートとの接着を向上させることができます" + +msgid "Line width of initial layer" +msgstr "1層目の線幅" + +msgid "Initial layer height" +msgstr "1層目の高さ" + +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "1層目の高さです。高さを大きくすればプレートとの接着性が良くなります。" + +msgid "Speed of initial layer except the solid infill part" +msgstr "1層目を造形時に、ソリッド インフィル以外の部分の造形速度です。" + +msgid "Initial layer infill" +msgstr "1層目インフィル" + +msgid "Speed of solid infill part of initial layer" +msgstr "1層目のソリッド インフィルの造形速度です。" + +msgid "Initial layer nozzle temperature" +msgstr "1層目のノズル温度" + +msgid "Nozzle temperature to print initial layer when using this filament" +msgstr "1層目でのノズル温度" + +msgid "Full fan speed at layer" +msgstr "最大回転速度の積層" + +msgid "" +"Randomly jitter while printing the wall, so that the surface has a rough " +"look. This setting controls the fuzzy position" +msgstr "" +"この設定により、壁面を造形時にノズルがランダムで軽微な振動を加えます。これに" +"より、表面にザラザラ感が出来上がります。" + +msgid "None" +msgstr "無し" + +msgid "All walls" +msgstr "すべての壁" + +msgid "Fuzzy skin thickness" +msgstr "厚さ" + +msgid "" +"The width within which to jitter. It's adversed to be below outer wall line " +"width" +msgstr "ジッターの幅:外壁の線幅より小さくするのをお勧めします。" + +msgid "Fuzzy skin point distance" +msgstr "ポイント距離" + +msgid "" +"The average diatance between the random points introducded on each line " +"segment" +msgstr "ポイント間の平均距離" + +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"ギャップを充填時の速度です。ギャップの幅が不規則なので、遅くするのが推奨で" +"す。" + +msgid "Arc fitting" +msgstr "曲線フィッティング" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +"tolerance is same with resolution" +msgstr "この設定で出力のG-codeファイルにG2/G3コードを有効します。" + +msgid "Add line number" +msgstr "行番号を追加" + +msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" +msgstr "各G-codeラインの先頭に行番号 (Nx)を追加します" + +msgid "Scan first layer" +msgstr "1層目を検査" + +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "カメラで1層目検査を有効にします" + +msgid "Nozzle type" +msgstr "ノズルタイプ" + +msgid "" +"The metallic material of nozzle. This determines the abrasive resistance of " +"nozzle, and what kind of filament can be printed" +msgstr "" +"ノズル材料:これにより、ノズルの耐摩耗性と使用できるフィラメントが決まりま" +"す。" + +msgid "Undefine" +msgstr "未定義" + +msgid "Hardened steel" +msgstr "焼入れスチール" + +msgid "Stainless steel" +msgstr "ステンレススチール" + +msgid "Brass" +msgstr "真鍮" + +msgid "Nozzle HRC" +msgstr "ノズルHRC" + +msgid "" +"The nozzle's hardness. Zero means no checking for nozzle's hardness during " +"slicing." +msgstr "ノズル硬度です、値が0になる場合、ノズル硬度を考慮しません。" + +msgid "HRC" +msgstr "HRC" + +msgid "Enable this option if machine has auxiliary part cooling fan" +msgstr "パーツ補助冷却ファンがある場合有効にしてください" + +msgid "G-code flavor" +msgstr "G-codeスタイル" + +msgid "What kind of gcode the printer is compatible with" +msgstr "プリンターが対応するG-code" + +msgid "Infill combination" +msgstr "インフィル マージ" + +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"複数層のスパース インフィルをまとめて造形し、時間短縮に効きます。壁面はこの設" +"定に影響されません" + +msgid "Filament to print internal sparse infill." +msgstr "スパース インフィルを造形時使用するフィラメントです。" + +msgid "Line width of internal sparse infill" +msgstr "スパース インフィルの線幅" + +msgid "Infill/Wall overlap" +msgstr "インフィル/壁面 オーバーラップ" + +msgid "" +"Infill area is enlarged slightly to overlap with wall for better bonding. " +"The percentage value is relative to line width of sparse infill" +msgstr "" +"インフィルの領域を少し壁面を重ねるために拡大します。これにより壁面との接着性" +"が向上させます。値はスパース インフィルの線幅の割合です。" + +msgid "Speed of internal sparse infill" +msgstr "スパース インフィルの造形速度です。" + +msgid "Ironing Type" +msgstr "アイロン面" + +msgid "" +"Ironing is using small flow to print on same height of surface again to make " +"flat surface more smooth. This setting controls which layer being ironed" +msgstr "" +"アイロンでは、小さな流量で水平の表面をならします。ならす面を選択してくださ" +"い。" + +msgid "No ironing" +msgstr "しない" + +msgid "Top surfaces" +msgstr "全てのトップ面" + +msgid "Topmost surface" +msgstr "最上部のみ" + +msgid "All solid layer" +msgstr "全てのソリッド積層" + +msgid "Ironing flow" +msgstr "アイロン時の流量比率" + +msgid "" +"The amount of material to extrude during ironing. Relative to flow of normal " +"layer height. Too high value results in overextrusion on the surface" +msgstr "アイロン時の押出量です。通常流量の比率で決まります。" + +msgid "Ironing line spacing" +msgstr "アイロン時にライン間隔" + +msgid "The distance between the lines of ironing" +msgstr "アイロン時の線間隔です。" + +msgid "Ironing speed" +msgstr "アイロン時の移動速度" + +msgid "Print speed of ironing lines" +msgstr "アイロン時の造形速度です。" + +msgid "This gcode part is inserted at every layer change after lift z" +msgstr "積層が変わる直後に実行するG-codeです。" + +msgid "Supports silent mode" +msgstr "サイレントモード" + +msgid "" +"Whether the machine supports silent mode in which machine use lower " +"acceleration to print" +msgstr "サイレントモード有無" + +msgid "" +"This G-code will be used as a code for the pause print. User can insert " +"pause G-code in gcode viewer" +msgstr "" +"このG-codeは造形を一時停止用です。ユーザがこれをG-codeに入れて造形を一時停止" +"できます。" + +msgid "This G-code will be used as a custom code" +msgstr "このG-codeがカスタム用です。" + +msgid "Maximum speed X" +msgstr "最大速度 X" + +msgid "Maximum speed Y" +msgstr "最大速度 Y" + +msgid "Maximum speed Z" +msgstr "最大速度 Z" + +msgid "Maximum speed E" +msgstr "最大速度 E" + +msgid "Machine limits" +msgstr "プリンター制限" + +msgid "Maximum X speed" +msgstr "最大速度 X" + +msgid "Maximum Y speed" +msgstr "最大速度 Y" + +msgid "Maximum Z speed" +msgstr "最大速度 Z" + +msgid "Maximum E speed" +msgstr "最大速度 E" + +msgid "Maximum acceleration X" +msgstr "最大加速度 X" + +msgid "Maximum acceleration Y" +msgstr "最大加速度 Y" + +msgid "Maximum acceleration Z" +msgstr "最大加速度 Z" + +msgid "Maximum acceleration E" +msgstr "最大加速度 E" + +msgid "Maximum acceleration of the X axis" +msgstr "X軸最大加速度" + +msgid "Maximum acceleration of the Y axis" +msgstr "Y軸最大加速度" + +msgid "Maximum acceleration of the Z axis" +msgstr "Z軸最大加速度" + +msgid "Maximum acceleration of the E axis" +msgstr "E軸最大加速度" + +msgid "Maximum jerk X" +msgstr "最大振動 X" + +msgid "Maximum jerk Y" +msgstr "最大振動 Y" + +msgid "Maximum jerk Z" +msgstr "最大振動 Z" + +msgid "Maximum jerk E" +msgstr "最大振動 E" + +msgid "Maximum jerk of the X axis" +msgstr "最大振動 X" + +msgid "Maximum jerk of the Y axis" +msgstr "最大振動 Y" + +msgid "Maximum jerk of the Z axis" +msgstr "最大振動 Z" + +msgid "Maximum jerk of the E axis" +msgstr "最大振動 E" + +msgid "Minimum speed for extruding" +msgstr "押出最低速度" + +msgid "Minimum speed for extruding (M205 S)" +msgstr "押出最低速度(M205 S)" + +msgid "Minimum travel speed" +msgstr "最小移動速度" + +msgid "Minimum travel speed (M205 T)" +msgstr "最小移動速度(M205 T)" + +msgid "Maximum acceleration for extruding" +msgstr "押出最大加速度" + +msgid "Maximum acceleration for extruding (M204 P)" +msgstr "押出最大加速度 (M204 P)" + +msgid "Maximum acceleration for retracting" +msgstr "リトラクション最大加速度" + +msgid "Maximum acceleration for retracting (M204 R)" +msgstr "リトラクション最大加速度 (M204 R)" + +msgid "Maximum acceleration for travel" +msgstr "移動最大加速度" + +msgid "Maximum acceleration for travel (M204 T)" +msgstr "移動最大加速度 (M204 T)" + +msgid "Fan speed" +msgstr "回転速度" + +msgid "" +"Part cooling fan speed may be increased when auto cooling is enabled. This " +"is the maximum speed limitation of part cooling fan" +msgstr "自動冷却時に、パーツ冷却ファンの最大回転速度。" + +msgid "Max" +msgstr "最大" + +msgid "" +"The largest printable layer height for extruder. Used tp limits the maximum " +"layer hight when enable adaptive layer height" +msgstr "" +"最大積層ピッチ:この値は「アダプティブ積層ピッチ」が有効時に積層ピッチの最大" +"値です" + +msgid "Minimum speed for part cooling fan" +msgstr "パーツ冷却ファンの最低回転数" + +msgid "" +"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " +"during printing except the first several layers which is defined by no " +"cooling layers" +msgstr "補助パーツ冷却ファンの回転速度です。" + +msgid "Min" +msgstr "最小" + +msgid "" +"The lowest printable layer height for extruder. Used tp limits the minimum " +"layer hight when enable adaptive layer height" +msgstr "" +"最小積層ピッチ:この値は「アダプティブ積層ピッチ」が有効時に積層ピッチの最小" +"値です" + +msgid "Min print speed" +msgstr "最小造形速度" + +msgid "The minimum printing speed when slow down for cooling" +msgstr "冷却のために速度を落とした時の最低造形速度。" + +msgid "Nozzle diameter" +msgstr "ノズル直径" + +msgid "Diameter of nozzle" +msgstr "ノズル直径" + +msgid "Host Type" +msgstr "ホストタイプ" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field must contain " +"the kind of the host." +msgstr "ホストタイプを入力してください。" + +msgid "Nozzle volume" +msgstr "内腔容積" + +msgid "Volume of nozzle between the cutter and the end of nozzle" +msgstr "ノズル先端とフィラメントカッターの間の体積" + +msgid "Start end points" +msgstr "終始点" + +msgid "The start and end points which is from cutter area to garbage can." +msgstr "カッター領域から廃料排出口までの終始点" + +msgid "Reduce infill retraction" +msgstr "インフィルのリトラクション低減" + +msgid "" +"Don't retract when the travel is in infill area absolutely. That means the " +"oozing can't been seen. This can reduce times of retraction for complex " +"model and save printing time, but make slicing and G-code generating slower" +msgstr "" +"インフィル領域内の移動はリトラクションしません。造形時間を節約できます。" + +msgid "Enable" +msgstr "有効化" + +msgid "Filename format" +msgstr "ファイル名形式" + +msgid "User can self-define the project file name when export" +msgstr "エクスポート時ファイル名を設定できます" + +msgid "Detect overhang wall" +msgstr "オーバーハングを検出" + +#, c-format, boost-format +msgid "" +"Detect the overhang percentage relative to line width and use different " +"speed to print. For 100%% overhang, bridge speed is used." +msgstr "" +"この設定により、線幅に対するオーバーハングの割合を検出し、異なる速度で造形し" +"ます。100%%のオーバーハングの場合、ブリッジの速度が使用されます。" + +msgid "Line width of inner wall" +msgstr "内壁の線幅" + +msgid "Speed of inner wall" +msgstr "内壁の造形速度です。" + +msgid "Number of walls of every layer" +msgstr "壁面の層数です。" + +msgid "Raft contact Z distance" +msgstr "ラフト接触面Z間隔" + +msgid "Z gap between object and raft. Ignored for soluble interface" +msgstr "" +"ラフトとオブジェクトのZ方向の間隔。可溶性材料を使用する場合この設定が無効で" +"す。" + +msgid "Raft expansion" +msgstr "ラフト拡張" + +msgid "Expand all raft layers in XY plane" +msgstr "この設定により、ラフトのXYサイズを拡大します。" + +msgid "Initial layer density" +msgstr "1層目の密度" + +msgid "Density of the first raft or support layer" +msgstr "ラフト或はサポートの1層目の密度です。" + +msgid "Initial layer expansion" +msgstr "1層目拡張" + +msgid "Expand the first raft or support layer to improve bed plate adhesion" +msgstr "" +"この設定により、ラフト或はサポートの1層目を拡大します。ベッドとの接着性が良く" +"なります。" + +msgid "Raft layers" +msgstr "ラフト" + +msgid "" +"Object will be raised by this number of support layers. Use this function to " +"avoid wrapping when print ABS" +msgstr "" +"指定したサポート層数で上げて造形します。ABSなど反りやすい材料に対して有効的で" +"す。" + +msgid "" +"G-code path is genereated after simplifing the contour of model to avoid too " +"much points and gcode lines in gcode file. Smaller value means higher " +"resolution and more time to slice" +msgstr "" +"モデルを簡略化してG-codeのデータ量を減らせます。値が小さく設定するほど、分解" +"能が高くなり、スライス時間も長くなります。" + +msgid "Travel distance threshold" +msgstr "移動距離閾値" + +msgid "" +"Only trigger retraction when the travel distance is longer than this " +"threshold" +msgstr "移動距離が閾値以上の場合のみ、リトラクションを作動します。" + +msgid "Retract amount before wipe" +msgstr "拭き上げ前のリトラクション量" + +msgid "" +"The length of fast retraction before wipe, relative to retraction length" +msgstr "" +"拭き上げ前のリトラクション量です、通常のリトラクション量の比率で指定します。" + +msgid "Retract when change layer" +msgstr "積層変更時のリトラクション" + +msgid "Force a retraction when changes layer" +msgstr "この設定により、積層を変更時にリトラクションを実行します。" + +msgid "Length" +msgstr "長さ" + +msgid "Retraction Length" +msgstr "リトラクション長さ" + +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"ノズルが長い距離で移動する時に、リトラクションの量です。値が0の場合、リトラク" +"ションが無効になります。" + +msgid "Z hop when retract" +msgstr "リトラクト時にZ方向調整" + +msgid "" +"Whenever the retraction is done, the nozzle is lifted a little to create " +"clearance between nozzle and the print. It prevents nozzle from hitting the " +"print when travel move. Using spiral line to lift z can prevent stringing" +msgstr "" +"リトラクション時に、ノズルを少し上げてから移動します。この動作でモデルとの衝" +"突を回避できます。" + +msgid "Z Hop Type" +msgstr "Z方向調整タイプ" + +msgid "Slope" +msgstr "スロープ" + +msgid "Spiral" +msgstr "スパイラル" + +msgid "Retraction Speed" +msgstr "リトラクション速度" + +msgid "Speed of retractions" +msgstr "リトラクションの速度です。" + +msgid "Deretraction Speed" +msgstr "復帰速度" + +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"リトラクション後フィラメントをロードする時の速度です、値が0の場合、リトラク" +"ションの速度と同じくなります。" + +msgid "Seam position" +msgstr "継ぎ目位置" + +msgid "The start position to print each part of outer wall" +msgstr "各パーツに対して、外壁を造形時の開始位置です。" + +msgid "Nearest" +msgstr "最寄り" + +msgid "Aligned" +msgstr "整列" + +msgid "Back" +msgstr "背面" + +msgid "Random" +msgstr "ランダム" + +msgid "Skirt distance" +msgstr "スカート距離" + +msgid "Distance from skirt to brim or object" +msgstr "スカートからブリム或はオブジェクトまでの距離です。" + +msgid "Skirt height" +msgstr "" + +msgid "How many layers of skirt. Usually only one layer" +msgstr "" + +msgid "Skirt loops" +msgstr "スカートのループ数" + +msgid "Number of loops for the skirt. Zero means disabling skirt" +msgstr "スカートのループ数です、値が0の場合、スカートが無効になります。" + +msgid "" +"The printing speed in exported gcode will be slowed down, when the estimated " +"layer time is shorter than this value, to get better cooling for these layers" +msgstr "" +"積層造形時間がこの値より短い時に、より良い冷却を図るため速度を落とします。" + +msgid "Minimum sparse infill threshold" +msgstr "スパース インフィルの下閾値" + +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "" +"スパース インフィルの面積がこの値以下の場合、ソリッド インフィルに変換されま" +"す" + +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "ソリッド インフィルの線幅" + +msgid "Speed of internal solid infill, not the top and bottom surface" +msgstr "ソリッド インフィルの造形速度です。" + +msgid "Spiral vase" +msgstr "スパイラル" + +msgid "" +"Spiralize smooths out the z moves of the outer contour. And turns a solid " +"model into a single walled print with solid bottom layers. The final " +"generated model has no seam" +msgstr "" +"スパイラルモードでは、輪郭面を一筆書きで造形します。Z方向の移動に段差がないの" +"で、シームはありません。" + +msgid "" +"If smooth or traditional mode is selected, a timelapse video will be " +"generated for each print. After each layer is printed, a snapshot is taken " +"with the chamber camera. All of these snapshots are composed into a " +"timelapse video when printing completes. If smooth mode is selected, the " +"toolhead will move to the excess chute after each layer is printed and then " +"take a snapshot. Since the melt filament may leak from the nozzle during the " +"process of taking a snapshot, prime tower is required for smooth mode to " +"wipe nozzle." +msgstr "" +"有効にした場合、タイムラプスビデオを録画します。「スムーズ」では1層を造形した" +"らノズルが廃料排出口に移動して、スナップショットを撮ります。これでより綺麗な" +"ビデオを録画できますが、造型時間が伸びます。また、フィラメント垂れを防止の" +"為、プライムタワーを有効にされます。" + +msgid "Traditional" +msgstr "通常" + +msgid "Temperature variation" +msgstr "軟化温度" + +msgid "Start G-code" +msgstr "スタートG-code" + +msgid "Start G-code when start the whole printing" +msgstr "造形開始時のG-code" + +msgid "Start G-code when start the printing of this filament" +msgstr "このフィラメントを使用開始時のG-code" + +msgid "Slice gap closing radius" +msgstr "隙間充填半径" + +msgid "" +"Cracks smaller than 2x gap closing radius are being filled during the " +"triangle mesh slicing. The gap closing operation may reduce the final print " +"resolution, therefore it is advisable to keep the value reasonably low." +msgstr "" +"Cracks smaller than 2x gap closing radius are being filled during the " +"triangle mesh slicing. The gap closing operation may reduce the final print " +"resolution, therefore it is advisable to keep the value reasonably low." + +msgid "Slicing Mode" +msgstr "スライシングモード" + +msgid "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." +msgstr "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." + +msgid "Regular" +msgstr "レギュラー" + +msgid "Even-odd" +msgstr "Even-odd" + +msgid "Close holes" +msgstr "穴を閉じる" + +msgid "Enable support" +msgstr "有効化" + +msgid "Enable support generation." +msgstr "この設定によりサポート生成を有効になります。" + +msgid "" +"normal(auto) and tree(auto) is used to generate support automatically. If " +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" +msgstr "通常 (自動) と ツリー (自動) では自動でサポートを作成します。" + +msgid "normal(auto)" +msgstr "通常 (自動)" + +msgid "tree(auto)" +msgstr "ツリー (自動)" + +msgid "normal(manual)" +msgstr "通常 (手動)" + +msgid "tree(manual)" +msgstr "ツリー (手動)" + +msgid "Support/object xy distance" +msgstr "水平間隔" + +msgid "XY separation between an object and its support" +msgstr "オブジェクトとサポートのXY距離です。" + +msgid "Pattern angle" +msgstr "パターン角度" + +msgid "Use this setting to rotate the support pattern on the horizontal plane." +msgstr "この設定でサポートのパターンを回転させます。" + +msgid "On build plate only" +msgstr "ビルドプレートのみ" + +msgid "Don't create support on model surface, only on build plate" +msgstr "この設定により、プレートから生成するサポートのみを造形します。" + +msgid "Support critical regions only" +msgstr "必須領域のみ" + +msgid "" +"Only create support for critical regions including sharp tail, cantilever, " +"etc." +msgstr "造形しにくい部分だけサポートを生成します、例えば細長いしっぽ、ハリなど" + +msgid "Top Z distance" +msgstr "トップ面とのZ間隔" + +msgid "The z gap between the top support interface and object" +msgstr "サポート接触面とオブジェクトのZ方向の間隔" + +msgid "Bottom Z distance" +msgstr "底面とのZ間隔" + +msgid "The z gap between the bottom support interface and object" +msgstr "サポート底面とオブジェクトのZ方向間隔" + +msgid "Support base" +msgstr "サポート基材" + +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"サポートとラフトを造形用のフィラメント。「デフォルト」では当時のフィラメント" +"を使用する意味です。" + +msgid "Line width of support" +msgstr "サポートの線幅" + +msgid "Interface use loop pattern" +msgstr "接触面は同心パターンにする" + +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"これにより、サポートの上部接触層がループで覆われます。デフォルトでは無効に" +"なっています。" + +msgid "" +"Filament to print support interface. \"Default\" means no specific filament " +"for support interface and current filament is used" +msgstr "" +"サポートの接触面用のフィラメントです。「デフォルト」では指定しなく、当時の" +"フィラメントを使用する意味です。" + +msgid "Top interface layers" +msgstr "トップ接触面の層数" + +msgid "Number of top interface layers" +msgstr "トップ接触面の層数" + +msgid "Bottom interface layers" +msgstr "底部接触面層数" + +msgid "Top interface spacing" +msgstr "トップ接触面間隔" + +msgid "Spacing of interface lines. Zero means solid interface" +msgstr "接触面を造形時に線の距離です。0はソリッド接触面です。" + +msgid "Bottom interface spacing" +msgstr "底部接触面間隔" + +msgid "Spacing of bottom interface lines. Zero means solid interface" +msgstr "底部接触面を造形時に線の距離です。0はソリッド接触面です。" + +msgid "Speed of support interface" +msgstr "サポート接触面の造形速度です。" + +msgid "Base pattern" +msgstr "基本パターン" + +msgid "Line pattern of support" +msgstr "サポートのサターンです。" + +msgid "Rectilinear grid" +msgstr "直線グリッド" + +msgid "Hollow" +msgstr "中空" + +msgid "Interface pattern" +msgstr "接触面パターン" + +msgid "" +"Line pattern of support interface. Default pattern for non-soluble support " +"interface is Rectilinear, while default pattern for soluble support " +"interface is Concentric" +msgstr "" +"サポート接触面のパターンです。非可溶性材を使用する場合はRectilinear、可溶性材" +"を使用する場合同心です。" + +msgid "Base pattern spacing" +msgstr "基本パターン間隔" + +msgid "Spacing between support lines" +msgstr "サポートの線の間隔です" + +msgid "Normal Support expansion" +msgstr "通常サポート拡大" + +msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "+/-でサポートの水平サイズを調整します" + +msgid "Speed of support" +msgstr "サポートの造形速度です。" + +msgid "Style" +msgstr "スタイル" + +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, slim style will merge branches more aggressively and save " +"a lot of material (default), while hybrid style will create similar " +"structure to normal support under large flat overhangs." +msgstr "" +"サポートのスタイルと形状。通常サポートでは、グリッドでサポートを生成します。" +"ツリーサポートでは、サポート材を節約できます。ハイブリッドでは、ツリーより大" +"きなサポート面を生成できます。" + +msgid "Snug" +msgstr "Snug" + +msgid "Tree Slim" +msgstr "ツリースリム" + +msgid "Tree Strong" +msgstr "ツリーストロング" + +msgid "Tree Hybrid" +msgstr "ツリーハイブリッド" + +msgid "Independent support layer height" +msgstr "独立サポート層ピッチ" + +msgid "" +"Support layer uses layer height independent with object layer. This is to " +"support customizing z-gap and save print time." +msgstr "サポートの積層ピッチは独立で設定できます。" + +msgid "Threshold angle" +msgstr "閾値角度" + +msgid "" +"Support will be generated for overhangs whose slope angle is below the " +"threshold." +msgstr "オーバーハングの角度がこの閾値以下になる場合、サポートを生成します" + +msgid "Tree support branch angle" +msgstr "ツリーサポート枝アングル" + +msgid "" +"This setting determines the maximum overhang angle that t he branches of " +"tree support allowed to make.If the angle is increased, the branches can be " +"printed more horizontally, allowing them to reach farther." +msgstr "" +"ツリータイプのサポートを造形する時の最大オーバーハング最大角度です。この値が" +"大きくなると、枝部分が繋がりやすくなります。" + +msgid "Tree support branch distance" +msgstr "ツリーサポート枝間隔" + +msgid "" +"This setting determines the distance between neighboring tree support nodes." +msgstr "サポートタイプがツリーの時、隣接するノードの距離です。" + +msgid "Tree support branch diameter" +msgstr "ツリーサポート枝直径" + +msgid "This setting determines the initial diameter of support nodes." +msgstr "サポートノードの初期直径です。" + +msgid "Tree support wall loops" +msgstr "ツリーサポート壁層数" + +msgid "This setting specify the count of walls around tree support" +msgstr "ツリーサポートの壁面層数です。" + +msgid "Nozzle temperature for layers after the initial one" +msgstr "1層目後のノズル温度" + +msgid "Bed temperature difference" +msgstr "ベッド温度差" + +msgid "" +"Do not recommend bed temperature of other layer to be lower than initial " +"layer for more than this threshold. Too low bed temperature of other layer " +"may cause the model broken free from build plate" +msgstr "" +"他の層のベッド温度を1層目よりこの値以上高く設定してください。温度が低くなる" +"と、造形失敗する可能性があります。" + +msgid "Detect thin wall" +msgstr "薄い壁を検出" + +msgid "" +"Detect thin wall which can't contain two line width. And use single line to " +"print. Maybe printed not very well, because it's not closed loop" +msgstr "" +"2ラインの入らない薄い壁面を検出し、1ラインで造形します。仕上がりが悪くなり可" +"能性があります。" + +msgid "" +"This gcode is inserted when change filament, including T command to trigger " +"tool change" +msgstr "フィラメントを切り替える直後に実行するG-codeです。" + +msgid "Line width for top surfaces" +msgstr "トップ面の線幅" + +msgid "Speed of top surface infill which is solid" +msgstr "トップ面のインフィルの造形速度です。" + +msgid "Top shell layers" +msgstr "トップ面層数" + +msgid "" +"This is the number of solid layers of top shell, including the top surface " +"layer. When the thickness calculated by this value is thinner than top shell " +"thickness, the top shell layers will be increased" +msgstr "" +"トップ面に使用するソリッド層数です。この値がトップ面の厚みより小さい場合、層" +"数を増やして厚みに合わせます。" + +msgid "Top solid layers" +msgstr "トップソリッド層" + +msgid "Top shell thickness" +msgstr "トップ面厚さ" + +msgid "" +"The number of top solid layers is increased when slicing if the thickness " +"calculated by top shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of top shell is absolutely determained by top " +"shell layers" +msgstr "" +"トップ面の厚さです、トップ面層数で決まった厚みがこの値より小さい場合、層数を" +"増やします。この値が0にする場合、この設定が無効となり、設定した層数で造形しま" +"す。" + +msgid "Speed of travel which is faster and without extrusion" +msgstr "移動完了時の速度です。" + +msgid "Wipe while retracting" +msgstr "リトラクション時に拭き上げ" + +msgid "" +"Move nozzle along the last extrusion path when retracting to clean leaked " +"material on nozzle. This can minimize blob when print new part after travel" +msgstr "" +"リトラクション時に、ノズルを最後のパスに沿って移動します。この設定によって、" +"たるみにより壁面のブロブを抑えることができます。" + +msgid "Wipe Distance" +msgstr "拭き上げ距離" + +msgid "" +"Discribe how long the nozzle will move along the last path when retracting" +msgstr "リトラクション時にノズルが最後のパスに沿って移動する距離です。" + +msgid "" +"Print a tower to prime material in nozzle after switching to a new material." +msgstr "" +"フィラメントを入れ替えるために、ノズルに残るフィラメントをフラッシュする特定" +"の造形物です。" + +msgid "Purging volumes" +msgstr "フラッシュ体積" + +msgid "Flush multiplier" +msgstr "フラッシュ倍率" + +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "実フラッシュ量 = マルチプライヤー × フラッシュ量" + +msgid "Prime volume" +msgstr "プライム量" + +msgid "The volume of material to prime extruder on tower." +msgstr "フィラメントのフラッシュ量です。" + +msgid "Width" +msgstr "幅" + +msgid "Width of prime tower" +msgstr "プライムタワーの幅です。" + +msgid "" +"Purging after filament change will be done inside objects' infills. This may " +"lower the amount of waste and decrease the print time. If the walls are " +"printed with transparent filament, the mixed color infill will be seen " +"outside. It will not take effect, unless the prime tower is enabled." +msgstr "" +"廃料をオブジェクトのインフィルに使用されます。フィラメントの廃料が減り、造形" +"時間も短縮できます。ただ、壁面の色が透明又は薄い場合は中の色が見えてしまう可" +"能性があります。" + +msgid "" +"Purging after filament change will be done inside objects' support. This may " +"lower the amount of waste and decrease the print time. It will not take " +"effect, unless the prime tower is enabled." +msgstr "" +"廃料をオブジェクトのインフィルに使用されます。フィラメントの廃料が減り、造形" +"時間も短縮できます。" + +msgid "" +"This object will be used to purge the nozzle after a filament change to save " +"filament and decrease the print time. Colours of the objects will be mixed " +"as a result. It will not take effect, unless the prime tower is enabled." +msgstr "" +"このオブジェクトは廃料で造形されます。時間とフィラメントの節約として有効的で" +"すが、色の指定ができなくなります。プライムタワーが有効になる場合、この設定が" +"無効になります。" + +msgid "X-Y hole compensation" +msgstr "ホール補正 X-Y" + +msgid "" +"Holes of object will be grown or shrunk in XY plane by the configured value. " +"Positive value makes holes bigger. Negative value makes holes smaller. This " +"function is used to adjust size slightly when the object has assembling issue" +msgstr "" +"オブジェクトの穴の大きさの調整値。正数は穴を大きくし、負数は穴を小さくしま" +"す。この機能はパーツを組立てる為に、はめあいの微調査です。" + +msgid "X-Y contour compensation" +msgstr "輪郭補正 X-Y" + +msgid "" +"Contour of object will be grown or shrunk in XY plane by the configured " +"value. Positive value makes contour bigger. Negative value makes contour " +"smaller. This function is used to adjust size slightly when the object has " +"assembling issue" +msgstr "" +"オブジェクトの輪郭の大きさの調整値です。正数は大きくし、負数は小さくします。" +"これがパーツを組み立てる為にはめあいの微調整です。" + +msgid "" +"Classic wall generator produces walls with constant extrusion width and for " +"very thin areas is used gap-fill. Arachne engine produces walls with " +"variable extrusion width" +msgstr "" +"クラシックでは従来通りの壁面を生成しますが、Arachneでは押出線幅が可変になりま" +"す。" + +msgid "Classic" +msgstr "クラシック" + +msgid "Arachne" +msgstr "Arachne" + +msgid "Wall transition length" +msgstr "壁面遷移長さ" + +msgid "" +"When transitioning between different numbers of walls as the part becomes " +"thinner, a certain amount of space is allotted to split or join the wall " +"segments. It's expressed as a percentage over nozzle diameter" +msgstr "" +"When transitioning between different numbers of walls as the part becomes " +"thinner, a certain amount of space is allotted to split or join the wall " +"segments. It's expressed as a percentage over nozzle diameter" + +msgid "Wall transitioning filter margin" +msgstr "フィルタマージン" + +msgid "" +"Prevent transitioning back and forth between one extra wall and one less. " +"This margin extends the range of extrusion widths which follow to [Minimum " +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " +"margin reduces the number of transitions, which reduces the number of " +"extrusion starts/stops and travel time. However, large extrusion width " +"variation can lead to under- or overextrusion problems. It's expressed as a " +"percentage over nozzle diameter" +msgstr "" +"Prevent transitioning back and forth between one extra wall and one less. " +"This margin extends the range of extrusion widths which follow to [Minimum " +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " +"margin reduces the number of transitions, which reduces the number of " +"extrusion starts/stops and travel time. However, large extrusion width " +"variation can lead to under- or overextrusion problems. It's expressed as a " +"percentage over nozzle diameter" + +msgid "Wall transitioning threshold angle" +msgstr "角度閾値" + +msgid "" +"When to create transitions between even and odd numbers of walls. A wedge " +"shape with an angle greater than this setting will not have transitions and " +"no walls will be printed in the center to fill the remaining space. Reducing " +"this setting reduces the number and length of these center walls, but may " +"leave gaps or overextrude" +msgstr "" +"When to create transitions between even and odd numbers of walls. A wedge " +"shape with an angle greater than this setting will not have transitions and " +"no walls will be printed in the center to fill the remaining space. Reducing " +"this setting reduces the number and length of these center walls, but may " +"leave gaps or overextrude" + +msgid "Wall distribution count" +msgstr "壁面分布カウント" + +msgid "" +"The number of walls, counted from the center, over which the variation needs " +"to be spread. Lower values mean that the outer walls don't change in width" +msgstr "壁の層数" + +msgid "Minimum feature size" +msgstr "最小サイズ" + +msgid "" +"Minimum thickness of thin features. Model features that are thinner than " +"this value will not be printed, while features thicker than the Minimum " +"feature size will be widened to the Minimum wall width. It's expressed as a " +"percentage over nozzle diameter" +msgstr "小部分の厚さ下限。モデルに厚さがこの値以下になる部分を造形しません。" + +msgid "Minimum wall width" +msgstr "最小壁幅" + +msgid "" +"Width of the wall that will replace thin features (according to the Minimum " +"feature size) of the model. If the Minimum wall width is thinner than the " +"thickness of the feature, the wall will become as thick as the feature " +"itself. It's expressed as a percentage over nozzle diameter" +msgstr "" +"Width of the wall that will replace thin features (according to the Minimum " +"feature size) of the model. If the Minimum wall width is thinner than the " +"thickness of the feature, the wall will become as thick as the feature " +"itself. It's expressed as a percentage over nozzle diameter" + +msgid "Detect narrow internal solid infill" +msgstr "薄いソリッド インフィル検出" + +msgid "" +"This option will auto detect narrow internal solid infill area. If enabled, " +"concentric pattern will be used for the area to speed printing up. " +"Otherwise, rectilinear pattern is used defaultly." +msgstr "" +"ソリッド インフィル領域に狭い部分があるか検出します。その設定を有効にする場" +"合、狭い領域は同心パターンを使用し、それ以外の領域は、直線パターンを使用しま" +"す。" + +msgid "invalid value " +msgstr "" + +#, c-format, boost-format +msgid " doesn't work at 100%% density " +msgstr "" + +msgid "Invalid value when spiral vase mode is enabled: " +msgstr "" + +msgid "too large line width " +msgstr "" + +msgid " not in range " +msgstr "" + +msgid "Export 3MF" +msgstr "3mf をエクスポート" + +msgid "Export project as 3MF." +msgstr "プロジェクトを3MF式で出力" + +msgid "Export slicing data" +msgstr "スライスデータをエクスポート" + +msgid "Export slicing data to a folder." +msgstr "スライスデータをエクスポート" + +msgid "Load slicing data" +msgstr "スライスデータを読込み" + +msgid "Load cached slicing data from directory" +msgstr "スライスデータを読込み" + +msgid "Slice" +msgstr "スライス" + +msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" +msgstr "プレートをスライス: 0: 全て, i:プレートi, その他: 無効" + +msgid "Show command help." +msgstr "ヘルプを表示します。" + +msgid "UpToDate" +msgstr "最新の状態です。" + +msgid "Update the configs values of 3mf to latest." +msgstr "3mfの構成値を更新" + +msgid "Output Model Info" +msgstr "出力モデル情報" + +msgid "Output the model's information." +msgstr "出力するモデル情報です。" + +msgid "Export Settings" +msgstr "エクスポート設定" + +msgid "Export settings to a file." +msgstr "設定をファイルにエクスポートします。" + +msgid "Send progress to pipe" +msgstr "パイプに進捗を送信" + +msgid "Send progress to pipe." +msgstr "パイプに進捗を送信" + +msgid "Arrange Options" +msgstr "レイアウト設定" + +msgid "Arrange options: 0-disable, 1-enable, others-auto" +msgstr "レイアウト設定: 0: 無効 1: 有効 その他: 自動" + +msgid "Convert Unit" +msgstr "単位変換" + +msgid "Convert the units of model" +msgstr "モデルの単位を変換" + +msgid "Orient the model" +msgstr "モデルの向きを調整" + +msgid "Scale the model by a float factor" +msgstr "指定した比率で伸縮する" + +msgid "Load General Settings" +msgstr "一般設定を読込む" + +msgid "Load process/machine settings from the specified file" +msgstr "指定ファイルから設定値を読込む" + +msgid "Load Filament Settings" +msgstr "フィラメント設定を読込む" + +msgid "Load filament settings from the specified file list" +msgstr "指定したファイルリストからフィラメント設定を読込む" + +msgid "Output directory" +msgstr "出力先フォルダ" + +msgid "Output directory for the exported files." +msgstr "エクスポートの出力先フォルダです。" + +msgid "Debug level" +msgstr "デバッグ レベル" + +msgid "" +"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +"trace\n" +msgstr "" +"デバッグロギングレベルを設定します。0:fatal、1:error、2:warning、3:info、4:" +"debug、5:trace。\n" + +msgid "Error in zip archive" +msgstr "ファイル圧縮にエラー発生" + +msgid "Generating walls" +msgstr "壁面を生成" + +msgid "Generating infill regions" +msgstr "インフィル領域を生成" + +msgid "Generating infill toolpath" +msgstr "インフィルパスを生成" + +msgid "Detect overhangs for auto-lift" +msgstr "オーバーハング自動検出" + +msgid "Generating support" +msgstr "サポートを生成" + +msgid "Checking support necessity" +msgstr "サポートの必要性を確認" + +#, c-format, boost-format +msgid "" +"It seems object %s has completely floating regions. Please re-orient the " +"object or enable support generation." +msgstr "" +"オブジェクト %s がプレートに接触していません。向きを調整するか、サポートを有" +"効にしてください。" + +#, c-format, boost-format +msgid "" +"It seems object %s has large overhangs. Please enable support generation." +msgstr "" +"オブジェクト %s に大きなオーバーハングがあります、サポートを有効にしてくださ" +"い。" + +msgid "Optimizing toolpath" +msgstr "ツールパスを最適化" + +msgid "Empty layers around bottom are replaced by nearest normal layers." +msgstr "底面との隙間があります、レイヤーを入れ替えました" + +msgid "The model has too many empty layers." +msgstr "このモデルには空層があります。" + +msgid "Slicing mesh" +msgstr "メッシュをスライス中" + +msgid "" +"No layers were detected. You might want to repair your STL file(s) or check " +"their size or thickness and retry.\n" +msgstr "" + +msgid "" +"An object's XY size compensation will not be used because it is also color-" +"painted.\n" +"XY Size compensation can not be combined with color-painting." +msgstr "" + +#, c-format, boost-format +msgid "Support: generate toolpath at layer %d" +msgstr "サポート: 積層%dのツールパスを生成" + +msgid "Support: detect overhangs" +msgstr "サポート: オーバーハングを検出" + +msgid "Support: generate contact points" +msgstr "サポート: 接触点を生成" + +msgid "Support: propagate branches" +msgstr "サポート: ブランチを生成" + +msgid "Support: draw polygons" +msgstr "サポート: ポリゴンを作成" + +msgid "Support: generate toolpath" +msgstr "サポート: ツールパスを生成" + +#, c-format, boost-format +msgid "Support: generate polygons at layer %d" +msgstr "サポート: 積層%dのポリゴンを生成" + +#, c-format, boost-format +msgid "Support: fix holes at layer %d" +msgstr "サポート: 積層%dの穴を修正" + +#, c-format, boost-format +msgid "Support: propagate branches at layer %d" +msgstr "サポート: 積層%dのブランチを生成" + +#: resources/data/hints.ini: [hint:3D Scene Operations] +msgid "" +"3D Scene Operations\n" +"Did you know how to control view and object/part selection with mouse and " +"touchpanel in the 3D scene?" +msgstr "" +"3Dシーンの操作\n" +"マウスとタッチパネルで、オブジェクト/パーツの操作方法を確認しましょう" + +#: resources/data/hints.ini: [hint:Cut Tool] +msgid "" +"Cut Tool\n" +"Did you know that you can cut a model at any angle and position with the " +"cutting tool?" +msgstr "" +"カットツール\n" +"カットツールでモデルを自由な角度で修正することができます。" + +#: resources/data/hints.ini: [hint:Fix Model] +msgid "" +"Fix Model\n" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems?" +msgstr "" +"モデル修復\n" +"破損したモデルでも修復してスライスできます。" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "" +"Timelapse\n" +"Did you know that you can generate a timelapse video during each print?" +msgstr "" +"タイムラプス\n" +"カメラの活用は、モニタリングだけでなく、自慢のタイムラプスビデオも生成できま" +"す。" + +#: resources/data/hints.ini: [hint:Auto-Arrange] +msgid "" +"Auto-Arrange\n" +"Did you know that you can auto-arrange all objects in your project?" +msgstr "" +"自動レイアウト\n" +"自動レイアウトでプレートを最大限利用できます。" + +#: resources/data/hints.ini: [hint:Auto-Orient] +msgid "" +"Auto-Orient\n" +"Did you know that you can rotate objects to an optimal orientation for " +"printing by a simple click?" +msgstr "" +"自動向き調整\n" +"自動向き調整で最適な向きをワンクリックで実現できます。" + +#: resources/data/hints.ini: [hint:Lay on Face] +msgid "" +"Lay on Face\n" +"Did you know that you can quickly orient a model so that one of its faces " +"sits on the print bed? Select the \"Place on face\" function or press the " +"F key." +msgstr "" +"底面を選択\n" +"プレートと接触する面を指定し、オブジェクトの向きを簡単に調整できます。" + +#: resources/data/hints.ini: [hint:Object List] +msgid "" +"Object List\n" +"Did you know that you can view all objects/parts in a list and change " +"settings for each object/part?" +msgstr "" +"オブジェクト一覧\n" +"全てのオブジェクトを確認でき、造形パラメータもオブジェクト別で設定できます" + +#: resources/data/hints.ini: [hint:Simplify Model] +msgid "" +"Simplify Model\n" +"Did you know that you can reduce the number of triangles in a mesh using the " +"Simplify mesh feature? Right-click the model and select Simplify model. Read " +"more in the documentation." +msgstr "" +"モデルを簡略化\n" +"オブジェクトのメッシュを簡略化して、スライスの速度を上げられます。モデルを右" +"クリックし、メニューで選択できます。" + +#: resources/data/hints.ini: [hint:Slicing Parameter Table] +msgid "" +"Slicing Parameter Table\n" +"Did you know that you can view all objects/parts on a table and change " +"settings for each object/part?" +msgstr "" +"スライシングパラメータ\n" +"オブジェクト/パーツごとのパラメータを設定できます。" + +#: resources/data/hints.ini: [hint:Split to Objects/Parts] +msgid "" +"Split to Objects/Parts\n" +"Did you know that you can split a big object into small ones for easy " +"colorizing or printing?" +msgstr "" +"オブジェクト/パーツに分割\n" +"一つのオブジェクトを複数のオブジェクト/パーツに分割して色を簡単につけましょ" +"う。" + +#: resources/data/hints.ini: [hint:Subtract a Part] +msgid "" +"Subtract a Part\n" +"Did you know that you can subtract one mesh from another using the Negative " +"part modifier? That way you can, for example, create easily resizable holes " +"directly in Bambu Studio. Read more in the documentation." +msgstr "" +"パーツをサブストラクト\n" +"マイナスパーツでモデルからメッシュを引くことができます。" + +#: resources/data/hints.ini: [hint:STEP] +msgid "" +"STEP\n" +"Did you know that you can improve your print quality by slicing a STEP file " +"instead of an STL?\n" +"Bambu Studio supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" +msgstr "" +"STEP\n" +"STEP形式で、STL形式よりもっと高品質なスライス結果を得られます、是非お試しくだ" +"さい。" + +#: resources/data/hints.ini: [hint:Z seam location] +msgid "" +"Z seam location\n" +"Did you know that you can customize the location of the Z seam, and even " +"paint it on your print, to have it in a less visible location? This improves " +"the overall look of your model. Check it out!" +msgstr "" +"継ぎ目位置\n" +"継ぎ目の位置を描き、見えにくい場所に指定して仕上がりを向上させます。" + +#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] +msgid "" +"Fine-tuning for flow rate\n" +"Did you know that flow rate can be fine-tuned for even better-looking " +"prints? Depending on the material, you can improve the overall finish of the " +"printed model by doing some fine-tuning." +msgstr "" +"流量を微調整\n" +"流量を材料、温度により微調整し、更に良い仕上がりが得られます。" + +#: resources/data/hints.ini: [hint:Split your prints into plates] +msgid "" +"Split your prints into plates\n" +"Did you know that you can split a model that has a lot of parts into " +"individual plates ready to print? This will simplify the process of keeping " +"track of all the parts." +msgstr "" +"複数のプレートに分割\n" +"一つのモデルを分割し、複数のプレートで造形することもできます。" + +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] +msgid "" +"Speed up your print with Adaptive Layer Height\n" +"Did you know that you can print a model even faster, by using the Adaptive " +"Layer Height option? Check it out!" +msgstr "「アダプティブ積層ピッチ」で造形速度アップ!" + +#: resources/data/hints.ini: [hint:Support painting] +msgid "" +"Support painting\n" +"Did you know that you can paint the location of your supports? This feature " +"makes it easy to place the support material only on the sections of the " +"model that actually need it." +msgstr "" +"サポートペイント\n" +"サポートは塗り絵のように生成することができます。" + +#: resources/data/hints.ini: [hint:Different types of supports] +msgid "" +"Different types of supports\n" +"Did you know that you can choose from multiple types of supports? Tree " +"supports work great for organic models, while saving filament and improving " +"print speed. Check them out!" +msgstr "" +"さまざまなサポートタイプ\n" +"いろんなサポートタイプをつかえます、ツリータイプではフィラメントも節約できる" +"し、造形時間も短縮できます。" + +#: resources/data/hints.ini: [hint:Printing Silk Filament] +msgid "" +"Printing Silk Filament\n" +"Did you know that Silk filament needs special consideration to print it " +"successfully? Higher temperature and lower speed are always recommended for " +"the best results." +msgstr "" +"シルク質感のフィラメント\n" +"光沢がある美しい造形物をできるフィラメントは、プロセスに特別なケアが必要で" +"す。" + +#: resources/data/hints.ini: [hint:Brim for better adhesion] +msgid "" +"Brim for better adhesion\n" +"Did you know that when printing models have a small contact interface with " +"the printing surface, it's recommended to use a brim?" +msgstr "" +"接着力を高めるには?\n" +"ブリムを活用してください。" + +#: resources/data/hints.ini: [hint:Set parameters for multiple objects] +msgid "" +"Set parameters for multiple objects\n" +"Did you know that you can set slicing parameters for all selected objects at " +"one time?" +msgstr "" +"オブジェクトのパラメータを設定\n" +"複数のオブジェクトを一回で設定できます" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "" +"Stack objects\n" +"Did you know that you can stack objects as a whole one?" +msgstr "" +"オブジェクトを積み重ね\n" +"複数のオブジェクトを積み重ねて造形できます。" + +#: resources/data/hints.ini: [hint:Flush into support/objects/infill] +msgid "" +"Flush into support/objects/infill\n" +"Did you know that you can save the wasted filament by flushing them into " +"support/objects/infill during filament change?" +msgstr "" +"サポート/オブジェクト/インフィルにフラッシュ\n" +"サポート、オブジェクトやインフィルどちらにもフラッシュでき、廃料の節約や、造" +"形時間短縮も有効的です。" + +#: resources/data/hints.ini: [hint:Improve strength] +msgid "" +"Improve strength\n" +"Did you know that you can use more wall loops and higher sparse infill " +"density to improve the strength of the model?" +msgstr "" +"強度の向上\n" +"壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" + +#~ msgid "" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "\n" +#~ "%1% は除外領域に近すぎます。造形時に衝突の可能性があります。" + +#~ msgid "" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "%1% は除外領域に近すぎます。造形時に衝突の可能性があります。" + +#~ msgid "&Edit" +#~ msgstr "編集" + +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "AMSMaterialsSetting" +#~ msgstr "AMS素材設定" + +#~ msgid "AWS PRE host" +#~ msgstr "AWS PREホスト" + +#~ msgid "AWS host" +#~ msgstr "AWSホスト" + +#~ msgid "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "実フラッシュ量 = フラッシュ量 × マルチプライヤー" + +#~ msgid "Adaptive layer height" +#~ msgstr "アダプティブ積層ピッチ" + +#~ msgid "Add Custom Printer" +#~ msgstr "カスタムプリンターを追加" + +#~ msgid "" +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." +#~ msgstr "" +#~ "プレートの境界を越えるか、高さ制限を超えるオブジェクトがあります、ご確認く" +#~ "ださい" + +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly\n" +#~ msgstr "" +#~ "Arachneを使用するには、オーハーハング減速を無効にする必要があります。従っ" +#~ "てオーバーハングの造形品質が劣る可能性があります。\n" + +#~ msgid "Auto arrange" +#~ msgstr "自動レイアウト" + +#~ msgid "" +#~ "Auto orientates selected objects or all objects.If there are selected " +#~ "objects, it just orientates the selected ones.Otherwise, it will " +#~ "orientates all objects in the project." +#~ msgstr "選択中或いは全てのオブジェクトの向きを自動的に調整する。" + +#~ msgid "Aux Cooling" +#~ msgstr "補助冷却" + +#~ msgid "Avoid crossing wall when travel" +#~ msgstr "移動時に壁面を避ける" + +#~ msgid "" +#~ "Bed exclude area that can't used as printable area in X-Y plane. For " +#~ "example, the bottom left area which is used to cut filament in X1 when " +#~ "printing multi colors with AMS. The area is expressed as polygon by " +#~ "points in following format: \"XxY, XxY, ...\"" +#~ msgstr "XY方向の除外領域" + +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "ベッド温度がフィラメントのガラス化温度より高いです、ノズル詰まりまたは造形" +#~ "失敗となる可能性があります" + +#~ msgid "" +#~ "Calibration completed. Please select the factors according to the left " +#~ "figure and fill them in the input boxes." +#~ msgstr "" +#~ "キャリブレーションが完了しました、左図のように係数を決めて入力してくださ" +#~ "い。" + +#~ msgid "Can't connect to the printer" +#~ msgstr "プリンターに接続できない" + +#~ msgid "" +#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " +#~ "same LAN?" +#~ msgstr "" +#~ "%s のIPアドレスを検出できませんでした。Bambu Studioと同じネットワークに繋" +#~ "いでいますか?" + +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "ファイルを選択 (3mf/step/stl/obj/amf):" + +#~ msgid "Choose save directory" +#~ msgstr "保存先フォルダの選択" + +#~ msgid "Clean" +#~ msgstr "消去" + +#~ msgid "Clear all" +#~ msgstr "クリア" + +#~ msgid "" +#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " +#~ "collision when print object by object" +#~ msgstr "" +#~ "押出機のクリアランス半径:オブジェクト順で造形する場合、この値を使用し自動" +#~ "レイアウトします、正しく設定してください" + +#~ msgid "Click the pencil icon to edit the filament." +#~ msgstr "フィラメントを編集します" + +#~ msgid "Clipping of view" +#~ msgstr "クリップビュー" + +#~ msgid "Color Print" +#~ msgstr "色付き造形" + +#~ msgid "Comsumption" +#~ msgstr "消費量" + +#~ msgid "Creating" +#~ msgstr "作成中" + +#~ msgid "Ctrl + Any arrow" +#~ msgstr "Ctrl + ↑↓←→" + +#~ msgid "Ctrl + Left mouse button" +#~ msgstr "Ctrl + 左クリック" + +#~ msgid "Debug" +#~ msgstr "デバッグ" + +#~ msgid "" +#~ "Desiccant status lower than two bars indicates that desiccant can be " +#~ "inactive. Please change the desiccant.(Higher the better)" +#~ msgstr "" +#~ "乾燥剤のステータスがバー2本より低い場合は、乾燥効果が弱まっていることを示" +#~ "します。乾燥剤の交換をお勧めします。" + +#~ msgid "Designer" +#~ msgstr "デザイナー" + +#~ msgid "Device:" +#~ msgstr "デバイス" + +#~ msgid "Display printable box" +#~ msgstr "造形可能な境界を表示" + +#~ msgid "Display shadow of objects" +#~ msgstr "オブジェクトの影を表示" + +#~ msgid "Display triangles of models" +#~ msgstr "モデルの三角形を表示" + +#~ msgid "" +#~ "Do not recommand bed temperature of other layer to be lower than initial " +#~ "layer for more than this threshold. Too low bed temperature of other " +#~ "layer may cause the model broken free from build plate" +#~ msgstr "" +#~ "他の層のベッド温度を1層目よりこの値以上高く設定してください。温度が低くな" +#~ "ると、造形失敗する可能性があります。" + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "Contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "下記のデータをクラウドと同期しますか?\n" +#~ "1. プロセスプリセット\n" +#~ "2. フィラメント設定\n" +#~ "3. プリンター設定\n" + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "It contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "下記のデータをクラウドと同期しますか?\n" +#~ "1. プロセスプリセット\n" +#~ "2. フィラメント設定\n" +#~ "3. プリンター設定\n" + +#~ msgid "" +#~ "Don't retract when the travel is in infill area absolutely. That means " +#~ "the oozing can't been seen" +#~ msgstr "インフィル領域内で移動する時に、リトラクションが無効です。" + +#~ msgid "Downloading Bambu Network plug-in" +#~ msgstr "Bambuネットワークプラグインをダウンロード" + +#~ msgid "" +#~ "Enabling this option means the height of every layer except the first " +#~ "will be automatically calculated during slicing according to the slope of " +#~ "the model’s surface.\n" +#~ "Note that this option only takes effect if no prime tower is generated in " +#~ "current plate." +#~ msgstr "" +#~ "この設定により、1層目以外の積層ピッチを自動調整します。\n" +#~ "注意:この設定が有効な場合、プライムタワーを無効にしてください。" + +#~ msgid "Enter a search term" +#~ msgstr "検索語を入力" + +#~ msgid "Entering Seam painting" +#~ msgstr "継ぎ目をペイント" + +#~ msgid "Erase painting" +#~ msgstr "ペイントを消去" + +#~ msgid "Error at line %1%:\n" +#~ msgstr "%1%行目でエラー発生\n" + +#~ msgid "Export." +#~ msgstr "エクスポート" + +#~ msgid "Export G-Code." +#~ msgstr "G-codeにエクスポート" + +#~ msgid "Export Sliced File" +#~ msgstr "スライス結果をエクスポート" + +#~ msgid "Export current Sliced file" +#~ msgstr "スライス結果をエクスポート" + +#~ msgid "Export ok." +#~ msgstr "エクスポートが完了しました" + +#~ msgid "Export sliced file" +#~ msgstr "スライス結果をエクスポート" + +#~ msgid "Extruder position" +#~ msgstr "押出機位置" + +#~ msgid "Failed" +#~ msgstr "失敗" + +#~ msgid "" +#~ "Failed to connect to the printer through LAN. Please enter the correct " +#~ "printer IP address and access code." +#~ msgstr "" +#~ "プリンターと接続できませんでした。IPアドレスとアクセスコードをご確認くださ" +#~ "い。" + +#~ msgid "Filament 1" +#~ msgstr "フィラメント 1" + +#~ msgid "Filament N XX" +#~ msgstr "フィラメント N XX" + +#~ msgid "" +#~ "Filament index %s does not match the filament in AMS slot %s. Please " +#~ "update the printer firmware to support AMS slot assignment." +#~ msgstr "フィラメント %sがAMSスロット%sのフィラメントと一致していません。" + +#~ msgid "" +#~ "Filament index %s exceeds the number of AMS slots. Please update the " +#~ "printer firmware to support AMS slot assignment." +#~ msgstr "フィラメント %s がAMSスロットの数を超えています。" + +#~ msgid "" +#~ "Filament index does not match the filament in AMS slot. Please update the " +#~ "printer firmware to support AMS slot assignment." +#~ msgstr "フィラメントがAMSスロットのフィラメントと一致していません。" + +#~ msgid "" +#~ "Filament index exceeds the number of AMS slots. Please update the printer " +#~ "firmware to support AMS slot assignment." +#~ msgstr "フィラメントがAMSスロットの数を超えています。" + +#~ msgid "" +#~ "Filament to print support and raft. \"Default\" means no specific " +#~ "filament for support and current filament is used" +#~ msgstr "" +#~ "サポートとラフトを造形用のフィラメント。「デフォルト」では当時のフィラメン" +#~ "トを使用する意味です。" + +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "サポート或はスカートに使用するフィラメントです。値が0の場合、自動選択とな" +#~ "ります。" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "サポート接触面に使用するフィラメント。0は指定しないという意味です。" + +#~ msgid "Filaments Selection" +#~ msgstr "フィラメント選択" + +#~ msgid "Finish" +#~ msgstr "完了" + +#~ msgid "Finished" +#~ msgstr "完了" + +#~ msgid "Fix model locally" +#~ msgstr "モデルをローカルで修正" + +#~ msgid "Fix model through cloud" +#~ msgstr "クラウドによるモデルの修正" + +#~ msgid "Flushed filament" +#~ msgstr "フィラメントフラッシュ量 " + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "オーバーハング角度が大きくなる場合、冷却ファンを指定した速度で回転します。" + +#~ msgid "Fragment Filter" +#~ msgstr "断片フィルタ" + +#~ msgid "Fragment area" +#~ msgstr "断片領域" + +#~ msgid "Fragment filter" +#~ msgstr "断片フィルタ" + +#~ msgid "" +#~ "Green represents that AMS humidity is normal, orange and red represent " +#~ "that humidity is too high.(Lower the better)" +#~ msgstr "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" + +#~ msgid "" +#~ "Heat the nozzle to target \n" +#~ "temperature" +#~ msgstr "" +#~ "ノズル目標温度にを加熱\n" +#~ "温度" + +#~ msgid "Heat the nozzle to target temperature" +#~ msgstr "ノズルを目標温度に加熱" + +#~ msgid "Height:" +#~ msgstr "高さ:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "押出機のクリアランス高度:オブジェクト順で造形する場合、この値を使用し自動" +#~ "レイアウトします、正しく設定してください" + +#~ msgid "" +#~ "If enabled, a timelapse video will be generated for each print. After " +#~ "each layer is printed, the toolhead will move to the excess chute, and " +#~ "then a snapshot is taken with the chamber camera. All of these snapshots " +#~ "are composed into a timelapse video when printing completes. Since the " +#~ "melt filament may leak from the nozzle during the process of taking a " +#~ "snapshot, prime tower is required for nozzle priming." +#~ msgstr "" +#~ "有効にした場合、タイムラプスビデオを録画します。「スムーズ」では1層を造形" +#~ "したらノズルが廃料排出口に移動して、スナップショットを撮ります。これでより" +#~ "綺麗なビデオを録画できますが、造型時間が伸びます。また、フィラメント垂れを" +#~ "防止の為、プライムタワーを有効にされます。" + +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "3MF/STL/STEP/OBJ/AMFをインポート" + +#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +#~ msgstr "STL/STEP/3MF/OBJ/AMF ファイルからジオメトリデータをインポート" + +#~ msgid "In the calibration of extrusion flow" +#~ msgstr "押出流量をキャリブレーション中" + +#~ msgid "In the calibration of laser scanner" +#~ msgstr "ライダーをキャリブレーション中" + +#~ msgid "Initialize failed [%d]!" +#~ msgstr "初期化失敗 [%d]" + +#~ msgid "Initialize failed (Not supported without remote video tunnel)!" +#~ msgstr "初期化失敗 (ビデオ)" + +#~ msgid "Inner wall speed" +#~ msgstr "内壁速度" + +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "オブジェクト %s の造形にはサポートが必要なようです。サポートを有効にしてく" +#~ "ださい。" + +#~ msgid "Layer Time(log): " +#~ msgstr "積層時間 (log)" + +#~ msgid "Layer Time (log)" +#~ msgstr "積層時間 (Log)" + +#~ msgid "Layers and Perimeters" +#~ msgstr "積層と境界" + +#~ msgid "Leaving Seam painting" +#~ msgstr "継ぎ目ペイントを退出" + +#~ msgid "Line type" +#~ msgstr "種類" + +#~ msgid "Loading user presets..." +#~ msgstr "ユーザープリセットを読込み中..." + +#~ msgid "Management" +#~ msgstr "管理" + +#~ msgid "Max travel detour distance" +#~ msgstr "最大迂回距離" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "壁面と接触しないために最大の迂回移動距離です、これ以上の移動距離に対して" +#~ "は、迂回することを保証しません。" + +#~ msgid "Modify" +#~ msgstr "修正" + +#~ msgid "Module" +#~ msgstr "モジュール" + +#~ msgid "Monitoring" +#~ msgstr "モニタリング" + +#~ msgid "Monitoring Recording" +#~ msgstr "モニタリング録画" + +#~ msgid "NO AMS" +#~ msgstr "AMS無し" + +#~ msgid "Not supported." +#~ msgstr "未対応" + +#~ msgid "" +#~ "Note : The location of IP and access code on the machine is as follows :" +#~ msgstr "注: IPアドレス とアクセスコードの確認場所は次の通り" + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "PrusaSlicerを開く" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "PrusaSlicerを開く" + +#~ msgid "Output file" +#~ msgstr "出力ファイル" + +#~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" +#~ msgstr "P1PのWLAN設定" + +#~ msgid "Paint-on seam editing" +#~ msgstr "継ぎ目編集" + +#~ msgid "Part Cooling" +#~ msgstr "パーツ冷却" + +#~ msgid "Pause(heated bed temperature error)" +#~ msgstr "一時停止 (ベッド温度エラー)" + +#~ msgid "Pause(hotend temperature error)" +#~ msgstr "一時停止 (ホットエンド温度エラー)" + +#~ msgid "Pause(toolhead shell off)" +#~ msgstr "一時停止 (ヘッドカバー脱落)" + +#~ msgid "Per object edit" +#~ msgstr "オブジェクト単位で編集" + +#~ msgid "Plate %d: %s does not support filament %s\n" +#~ msgstr "プレート %d: %s がフィラメント %s を使用できません\n" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "プレート %d: %s はフィラメント %s をサポートしません。\n" + +#~ msgid "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "プレート %d: %s がフィラメント %s を使用できません (%s)" + +#~ msgid "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "プレート %d: %s がフィラメント %s を使用できません (%s)\n" + +#~ msgid "Please Fill Task Report." +#~ msgstr "タスクレポートを記入してください" + +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:\n" +#~ msgstr "送信する前に、下記の情報をご確認ください\n" + +#~ msgid "Please fill report first." +#~ msgstr "まずはレポートをご記入ください。" + +#~ msgid "Please upgrade your printer first" +#~ msgstr "ファームウェアをアップデートしてください" + +#~ msgid "Position:" +#~ msgstr "位置" + +#~ msgid "" +#~ "Preview only mode:\n" +#~ "The loaded file contains gcode only." +#~ msgstr "プレビュー専用モード: ファイルにはG-codeのみが入っています。" + +#~ msgid "Preview only mode for gcode file." +#~ msgstr "プレビュー専用モード" + +#~ msgid "" +#~ "Prime tower is required by timelapse. Do you want to enable both of them?" +#~ msgstr "" +#~ "タイムラプスを使用するにはプライムタワーが必要です、両方有効にしますか?" + +#~ msgid "" +#~ "Prime tower is required by timeplase. Are you sure you want to disable " +#~ "both of them?" +#~ msgstr "" +#~ "タイムラプスを使用するにはプライムタワーが必要です、両方を無効にしますか?" + +#~ msgid "Printer Selection" +#~ msgstr "プリンター選択" + +#~ msgid "Printer firmware does not support material = >ams slot mapping." +#~ msgstr "素材とAMSスロットのマッピングがサポートしません" + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' infills. This " +#~ "may lower the amount of waste and decrease the print time. If the walls " +#~ "are printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "廃料をオブジェクトのインフィルに使用されます。フィラメントの廃料が減り、造" +#~ "形時間も短縮できます。ただ、壁面の色が透明又は薄い場合は中の色が見えてしま" +#~ "う可能性があります。" + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "廃料はサポートとしてしようされます。フィラメント廃料が減り、造形時間も短縮" +#~ "できます。" + +#~ msgid "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "フィラメントを押出機に押入れる" + +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "タイムラプスビデオの中にヘッドが映らないように録画します。" + +#~ msgid "Reduce Triangles" +#~ msgstr "三角形を減らす" + +#~ msgid "Reload item" +#~ msgstr "アイテムを再読み込み" + +#~ msgid "Reload items" +#~ msgstr "アイテムを再読み込み" + +#~ msgid "Repair" +#~ msgstr "修復" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "モデルのメッシュを修復" + +#~ msgid "Report" +#~ msgstr "報告" + +#~ msgid "Rotation:" +#~ msgstr "回転:" + +#~ msgid "Save configuration as:" +#~ msgstr "構成を名前付けで保存" + +#~ msgid "Select Bed Type" +#~ msgstr "ベッドタイプを選択" + +#~ msgid "Sending" +#~ msgstr "送信中" + +#~ msgid "Set pen size" +#~ msgstr "ペンサイズを設定" + +#~ msgid "Shift + Any arrow" +#~ msgstr "Shift + ↑↓←→" + +#~ msgid "Shift + Mouse wheel" +#~ msgstr "Shift + マウスホイール" + +#~ msgid "Show Log" +#~ msgstr "ログを表示" + +#~ msgid "Show Model Mesh(TODO)" +#~ msgstr "メッシュを表示 (TODO)" + +#~ msgid "Show Model Shadow(TODO)" +#~ msgstr "シャドウを表示 (TODO)" + +#~ msgid "Show Printable Box(TODO)" +#~ msgstr "造形可能な領域を表示 (TODO)" + +#~ msgid "Spaghetti Detection" +#~ msgstr "スパゲティ検出" + +#~ msgid "Spaghetti and Excess Chute Pileup Detection" +#~ msgstr "スパゲティと廃料詰り検出" + +#~ msgid "Spiral mode" +#~ msgstr "スパイラル モード" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数" +#~ "を0、スパース インフィルの充填密度を0に変更する必要があります\n" + +#~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" +#~ msgstr "スパゲティや廃料口詰りを検出した場合、造形を停止します" + +#~ msgid "Stop printing when spaghetti detected" +#~ msgstr "スパゲティを検出した場合造型を停止します" + +#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" +#~ msgstr "送信しました、%s秒後デバイスページへ移動します" + +#~ msgid "" +#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ msgstr "送信しました、%s秒後デバイスページへ移動します" + +#~ msgid "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "推奨ボリューム範囲 [%d, %d]" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "サポートの積層ピッチを造形用積層ピッチと違う値を設定でき、カスタムサポート" +#~ "ギャップを実現できますが、フィラメントの切替回数が増えます。" + +#~ msgid "" +#~ "Switch to rectilinear pattern?\n" +#~ "Yes - switch to rectilinear pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "直線パターンに切り替えますか?\n" + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "ジグザグパターンに切り替える?\n" +#~ "はい - 自動的にジグザグパターンに切り替えます\n" +#~ "いいえ - 密度をデフォルト値にリセット\n" + +#~ msgid "Swith cloud environment, Please login again!" +#~ msgstr "クラウド環境が切り替わったため、再度サインインしてください" + +#~ msgid "Sync material list from AMS" +#~ msgstr "AMSと素材を同期" + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " +#~ "unrecognized:\n" +#~ msgstr "" +#~ "この3mfのバージョン %sは %sのバージョン %sより新しいです、下記のキーは認識" +#~ "できません:\n" + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " +#~ "your software.\n" +#~ msgstr "" +#~ "3mfのバージョン %s は %s のバージョン %s より新しいので、ソフトウェアの更" +#~ "新をお勧めいたします。\n" + +#~ msgid "The 3mf is not from Bambu lab, load geometry data only." +#~ msgstr "" +#~ "この3mfファイルと互換性がありません、ジオメトリーデータのみ読込みます。" + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "構成データは互換性がない為ロードできませんでした" + +#~ msgid "" +#~ "The firmware versions of printer and AMS are too low.Please update to the " +#~ "latest version before sending the print job" +#~ msgstr "AMSのファームウェアが古いです、アップデートしてください。" + +#~ msgid "" +#~ "The flush volume is less than the minimum value and will be automatically " +#~ "set to the minimum value." +#~ msgstr "フラッシュ量は最小量未満の場合は最小量に設定されます。" + +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "このモデルはオーバーラップや自己交差する部分があるため、修復を行いました。" +#~ "この結果をご確認の上、次の操作をしてください。" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type.\n" +#~ msgstr "" +#~ "G-code中の機種は現在選択したプリンターではありません、プリンターを選択し直" +#~ "すか、一致機種でスライスしてください。\n" + +#~ msgid "" +#~ "This controls brim position including outer side of models, inner side of " +#~ "holes or both. Auto means both the brim position and brim width is " +#~ "analysed and calculated automatically" +#~ msgstr "ブリムの位置を設定します。" + +#~ msgid "" +#~ "This object will be used to purge the nozzle after a filament change to " +#~ "save filament and decrease the print time. Colours of the objects will be " +#~ "mixed as a result" +#~ msgstr "" +#~ "フィラメントを入れ替える時に、廃料をこのオブジェクトにフラッシュします。時" +#~ "間とフィラメントの節約につながりますが、このオブジェクトが混色になります。" + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "この設定により、大きいツリーサポートを造形する時に、インフィルを追加しま" +#~ "す。" + +#~ msgid "" +#~ "This setting stands for how much volume of filament can be melted and " +#~ "extruded per second. Printing speed is limited by max volumetric speed, " +#~ "in case of too high and unreasonable speed setting. Zero means no limit" +#~ msgstr "" +#~ "ヘッドが1秒で溶融できるフィラメントの体積の上限です。値が0の場合上限がかか" +#~ "りません。" + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "タイムラプス用のプライムタワー" + +#~ msgid "Timelapse without toolhead" +#~ msgstr "ヘッド抜きのタイムラプスビデオ" + +#~ msgid "Translation" +#~ msgstr "移動" + +#~ msgid "Tree support with infill" +#~ msgstr "ツリーサポートインフィル使用" + +#~ msgid "Unable to connect printer" +#~ msgstr "プリンターに接続できませんでした" + +#~ msgid "Unable to create zip file" +#~ msgstr "ZIP ファイルを作成できませんでした" + +#~ msgid "Uploading" +#~ msgstr "アップロード中" + +#~ msgid "User pause" +#~ msgstr "ユーザによる一時停止" + +#~ msgid "Waiting" +#~ msgstr "待機中" + +#~ msgid "" +#~ "When recording timelapse without toolhead, it is recommended to add a " +#~ "\"Timelapse Wipe Tower\" \n" +#~ "by right-click the empty position of build plate and choose \"Add " +#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ msgstr "" +#~ "ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタ" +#~ "ワー」を追加してください。プレートで右クリックして、「プリミティブを追加」" +#~ "→「タイムラプスプライムタワー」で追加できます。\n" + +#~ msgid "" +#~ "When sparse infill density is low, the internal solid infill or internal " +#~ "bridge may have no archor at the end of line. This cause falling and bad " +#~ "quality when printing internal solid infill. When enable this feature, " +#~ "loop paths will be added to the sparse fill of the lower layers for " +#~ "specific thickness, so that better archor can be provided for internal " +#~ "bridge. 0 means disable this feature" +#~ msgstr "" +#~ "インフィル充填密度が低い場合、ソリッドインフィルや内部ブリッジと繋げない可" +#~ "能性があります。この機能を有効にする場合、指定された厚さでパスを追加されま" +#~ "す。値が0の場合、この機能が無効になります。" + +#~ msgid "" +#~ "X1 General Settings - Network Settings in the side bar of X1 main screen" +#~ msgstr "一般設定" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "プリセットにいくつか変更があります。\n" +#~ "これらの変更を保存しますか?" + +#~ msgid "Zig zag" +#~ msgstr "ジグザグ" + +#~ msgid "(Sort)" +#~ msgstr "並べ替え" + +#~ msgid " Object:" +#~ msgstr "オブジェクト:" + +#~ msgid "" +#~ " is too close to exclusion area, there may be collisions when printing.\n" +#~ msgstr "除外領域を近すぎます、衝突の可能性があります。\n" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr "除外領域 に近すぎるので、衝突の可能性があります。\n" + +#~ msgid " is too close to others, there may be collisions when printing.\n" +#~ msgstr "他のオブジェクトに近すぎます、衝突の可能性があります。\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr "他のオブジェクトに近すぎるので、衝突の可能性があります。\n" + +#~ msgid "" +#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr "を閉じてから新しいモデルを作成します、続行しますか?" + +#~ msgid "default value" +#~ msgstr "デフォルト" + +#~ msgid "hybrid(auto)" +#~ msgstr "ハイブリッド" + +#~ msgid "normal" +#~ msgstr "普通" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "通常 (自動), ハイブリッド (自動) と ツリー (自動) では自動でサポートを作成" +#~ "します。" + +#~ msgid "preparing, export 3mf failed!" +#~ msgstr "3mfのエクスポートが失敗しました" + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "この3mfファイルは互換性がなく、ジオメトリーのみを読込みます" + +#~ msgid "tree" +#~ msgstr "ツリー" diff --git a/bbl/i18n/list.txt b/bbl/i18n/list.txt index 5ea7c7a693..60f99e9654 100644 --- a/bbl/i18n/list.txt +++ b/bbl/i18n/list.txt @@ -16,6 +16,7 @@ src/slic3r/GUI/Gizmos/GLGizmoText.cpp src/slic3r/GUI/Gizmos/GLGizmoText.hpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI_App.cpp +src/slic3r/GUI/GUI_AuxiliaryList.cpp src/slic3r/GUI/GUI_Init.cpp src/slic3r/GUI/GUI_Factories.cpp src/slic3r/GUI/GUI_ObjectList.cpp @@ -39,6 +40,7 @@ src/slic3r/GUI/Jobs/RotoptimizeJob.cpp src/slic3r/GUI/Jobs/BindJob.cpp src/slic3r/GUI/Jobs/PrintJob.cpp src/slic3r/GUI/Jobs/SendJob.cpp +src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp src/slic3r/GUI/AboutDialog.cpp src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -83,6 +85,8 @@ src/slic3r/GUI/Preferences.cpp src/slic3r/GUI/PresetComboBoxes.cpp src/slic3r/GUI/PresetHints.cpp src/slic3r/GUI/ProgressStatusBar.cpp +src/slic3r/GUI/PlateSettingsDialog.cpp +src/slic3r/GUI/PrivacyUpdateDialog.cpp src/slic3r/GUI/PublishDialog.cpp src/slic3r/GUI/SavePresetDialog.cpp src/slic3r/GUI/Search.cpp @@ -90,7 +94,6 @@ src/slic3r/GUI/Selection.cpp src/slic3r/GUI/SelectMachine.cpp src/slic3r/GUI/SendSystemInfoDialog.cpp src/slic3r/GUI/SendToPrinter.cpp -src/slic3r/GUI/SetBedTypeDialog.cpp src/slic3r/GUI/BindDialog.cpp src/slic3r/GUI/Tab.cpp src/slic3r/GUI/Tab.hpp @@ -106,6 +109,7 @@ src/slic3r/GUI/KBShortcutsDialog.cpp src/slic3r/GUI/ReleaseNote.cpp src/slic3r/GUI/ReleaseNote.hpp src/slic3r/GUI/UpgradePanel.cpp +src/slic3r/GUI/UnsavedChangesDialog.cpp src/slic3r/Utils/FixModelByWin10.cpp src/slic3r/Utils/PresetUpdater.cpp src/slic3r/Utils/Http.cpp diff --git a/deps/Boost/0001-Boost-fix.patch b/deps/Boost/0001-Boost-fix.patch new file mode 100644 index 0000000000..f1aad38d62 --- /dev/null +++ b/deps/Boost/0001-Boost-fix.patch @@ -0,0 +1,125 @@ +From 1d6cd7c2f8640db3cda194c1b9b82f1e4b321395 Mon Sep 17 00:00:00 2001 +From: "chunmao.guo" +Date: Thu, 5 Jan 2023 15:55:57 +0800 +Subject: [PATCH] FIX: limit_handles + +--- + boost/process/detail/posix/executor.hpp | 4 +++- + boost/process/detail/posix/pipe_out.hpp | 13 +++++++++++-- + boost/process/detail/used_handles.hpp | 3 +++ + boost/process/detail/windows/handles.hpp | 10 +++++++--- + 4 files changed, 24 insertions(+), 6 deletions(-) + +diff --git a/boost/process/detail/posix/executor.hpp b/boost/process/detail/posix/executor.hpp +index ca7713c..5521720 100644 +--- a/boost/process/detail/posix/executor.hpp ++++ b/boost/process/detail/posix/executor.hpp +@@ -325,6 +325,7 @@ public: + } + void set_error(const std::error_code &ec, const std::string &msg) {set_error(ec, msg.c_str());}; + ++ int error_sink() const { return _pipe_sink; } + }; + + template +@@ -388,6 +389,8 @@ child executor::invoke(boost::mpl::false_, boost::mpl::false_) + set_error(err, "fcntl(2) failed");//this might throw, so we need to be sure our pipe is safe. + return child(); + } ++ _pipe_sink = p.p[1]; ++ + _ec.clear(); + boost::fusion::for_each(seq, call_on_setup(*this)); + +@@ -411,7 +414,6 @@ child executor::invoke(boost::mpl::false_, boost::mpl::false_) + } + else if (pid == 0) + { +- _pipe_sink = p.p[1]; + ::close(p.p[0]); + + boost::fusion::for_each(seq, call_on_exec_setup(*this)); +diff --git a/boost/process/detail/posix/pipe_out.hpp b/boost/process/detail/posix/pipe_out.hpp +index d54cca4..a081d78 100644 +--- a/boost/process/detail/posix/pipe_out.hpp ++++ b/boost/process/detail/posix/pipe_out.hpp +@@ -18,7 +18,7 @@ + namespace boost { namespace process { namespace detail { namespace posix { + + template +-struct pipe_out : handler_base_ext ++struct pipe_out : handler_base_ext, ::boost::process::detail::uses_handles + { + int sink; + int source; //opposite end +@@ -30,6 +30,14 @@ struct pipe_out : handler_base_ext + { + p.assign_sink(-1); + } ++ ++ std::array get_used_handles() ++ { ++ const auto pp1 = p1 != -1 ? p1 : p2; ++ const auto pp2 = p2 != -1 ? p2 : p1; ++ ++ return {sink, source, pp1, pp2}; ++ } + + template + void on_error(Executor &, const std::error_code &) const +@@ -66,7 +74,7 @@ void pipe_out<2,-1>::on_exec_setup(Executor &e) const + if (::dup2(sink, STDERR_FILENO) == -1) + e.set_error(::boost::process::detail::get_last_error(), "dup2() failed"); + +- if (sink != STDOUT_FILENO) ++ if (sink != STDERR_FILENO) + ::close(sink); + ::close(source); + } +@@ -81,6 +89,7 @@ void pipe_out<1,2>::on_exec_setup(Executor &e) const + e.set_error(::boost::process::detail::get_last_error(), "dup2() failed"); + if ((sink != STDOUT_FILENO) && (sink != STDERR_FILENO)) + ::close(sink); ++ ::close(source); + } + + class async_pipe; +diff --git a/boost/process/detail/used_handles.hpp b/boost/process/detail/used_handles.hpp +index 4d56af3..5d71dc3 100644 +--- a/boost/process/detail/used_handles.hpp ++++ b/boost/process/detail/used_handles.hpp +@@ -61,6 +61,9 @@ struct foreach_handle_invocator + template + void foreach_used_handle(Executor &exec, Function &&func) + { ++#if defined(BOOST_POSIX_API) ++ func(exec.error_sink()); ++#endif + boost::fusion::for_each(boost::fusion::filter_if>(exec.seq), + foreach_handle_invocator(func)); + } +diff --git a/boost/process/detail/windows/handles.hpp b/boost/process/detail/windows/handles.hpp +index 7a93ac2..f120ef7 100644 +--- a/boost/process/detail/windows/handles.hpp ++++ b/boost/process/detail/windows/handles.hpp +@@ -139,10 +139,14 @@ struct limit_handles_ : handler_base_ext + ::boost::winapi::DWORD_ flags = 0u; + if (itr != all_handles.end()) + *itr = ::boost::winapi::INVALID_HANDLE_VALUE_; +- else if ((::boost::winapi::GetHandleInformation(*itr, &flags) != 0) +- &&((flags & ::boost::winapi::HANDLE_FLAG_INHERIT_) == 0)) //it is NOT inherited anyhow, so ignore too +- *itr = ::boost::winapi::INVALID_HANDLE_VALUE_; + }); ++ for (auto& h : all_handles) { ++ ::boost::winapi::DWORD_ flags = 0u; ++ if ((h != ::boost::winapi::INVALID_HANDLE_VALUE_) ++ && (::boost::winapi::GetHandleInformation(h, &flags) != 0) ++ && ((flags & ::boost::winapi::HANDLE_FLAG_INHERIT_) == 0)) //it is NOT inherited anyhow, so ignore too ++ h = ::boost::winapi::INVALID_HANDLE_VALUE_; ++ } + + auto part_itr = std::partition(all_handles.begin(), all_handles.end(), + [](::boost::winapi::HANDLE_ handle) {return handle != ::boost::winapi::INVALID_HANDLE_VALUE_;}); +-- +2.36.1.windows.1 + diff --git a/deps/JPEG/JPEG.cmake b/deps/JPEG/JPEG.cmake index 6e058aa732..bf7c6d3277 100644 --- a/deps/JPEG/JPEG.cmake +++ b/deps/JPEG/JPEG.cmake @@ -1,3 +1,16 @@ +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if (JPEG_VERSION STREQUAL "6") + message("Using Jpeg Lib 62") + set(jpeg_flag "") + elseif (JPEG_VERSION STREQUAL "7") + message("Using Jpeg Lib 70") + set(jpeg_flag "-DWITH_JPEG7=ON") + else () + message("Using Jpeg Lib 80") + set(jpeg_flag "-DWITH_JPEG8=ON") + endif () +endif() + bambustudio_add_cmake_project(JPEG URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1 @@ -5,4 +18,5 @@ bambustudio_add_cmake_project(JPEG CMAKE_ARGS -DENABLE_SHARED=OFF -DENABLE_STATIC=ON + ${jpeg_flag} ) diff --git a/src/slic3r/GUI/WebView2.h b/deps/WebView2/include/WebView2.h similarity index 50% rename from src/slic3r/GUI/WebView2.h rename to deps/WebView2/include/WebView2.h index 75c2d7910c..2ce594ebd5 100644 --- a/src/slic3r/GUI/WebView2.h +++ b/deps/WebView2/include/WebView2.h @@ -39,6 +39,14 @@ #pragma once #endif +#ifndef DECLSPEC_XFGVIRT +#if _CONTROL_FLOW_GUARD_XFG +#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) +#else +#define DECLSPEC_XFGVIRT(base, func) +#endif +#endif + /* Forward Declarations */ #ifndef __ICoreWebView2AcceleratorKeyPressedEventArgs_FWD_DEFINED__ @@ -125,6 +133,69 @@ typedef interface ICoreWebView2_7 ICoreWebView2_7; #endif /* __ICoreWebView2_7_FWD_DEFINED__ */ +#ifndef __ICoreWebView2_8_FWD_DEFINED__ +#define __ICoreWebView2_8_FWD_DEFINED__ +typedef interface ICoreWebView2_8 ICoreWebView2_8; + +#endif /* __ICoreWebView2_8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_9_FWD_DEFINED__ +#define __ICoreWebView2_9_FWD_DEFINED__ +typedef interface ICoreWebView2_9 ICoreWebView2_9; + +#endif /* __ICoreWebView2_9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_10_FWD_DEFINED__ +#define __ICoreWebView2_10_FWD_DEFINED__ +typedef interface ICoreWebView2_10 ICoreWebView2_10; + +#endif /* __ICoreWebView2_10_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_11_FWD_DEFINED__ +#define __ICoreWebView2_11_FWD_DEFINED__ +typedef interface ICoreWebView2_11 ICoreWebView2_11; + +#endif /* __ICoreWebView2_11_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_12_FWD_DEFINED__ +#define __ICoreWebView2_12_FWD_DEFINED__ +typedef interface ICoreWebView2_12 ICoreWebView2_12; + +#endif /* __ICoreWebView2_12_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_13_FWD_DEFINED__ +#define __ICoreWebView2_13_FWD_DEFINED__ +typedef interface ICoreWebView2_13 ICoreWebView2_13; + +#endif /* __ICoreWebView2_13_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationRequestedEventArgs ICoreWebView2BasicAuthenticationRequestedEventArgs; + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationRequestedEventHandler ICoreWebView2BasicAuthenticationRequestedEventHandler; + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ +#define __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ +typedef interface ICoreWebView2BasicAuthenticationResponse ICoreWebView2BasicAuthenticationResponse; + +#endif /* __ICoreWebView2BasicAuthenticationResponse_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2BrowserProcessExitedEventArgs_FWD_DEFINED__ #define __ICoreWebView2BrowserProcessExitedEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2BrowserProcessExitedEventArgs ICoreWebView2BrowserProcessExitedEventArgs; @@ -160,6 +231,13 @@ typedef interface ICoreWebView2CompositionController2 ICoreWebView2CompositionCo #endif /* __ICoreWebView2CompositionController2_FWD_DEFINED__ */ +#ifndef __ICoreWebView2CompositionController3_FWD_DEFINED__ +#define __ICoreWebView2CompositionController3_FWD_DEFINED__ +typedef interface ICoreWebView2CompositionController3 ICoreWebView2CompositionController3; + +#endif /* __ICoreWebView2CompositionController3_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2Controller_FWD_DEFINED__ #define __ICoreWebView2Controller_FWD_DEFINED__ typedef interface ICoreWebView2Controller ICoreWebView2Controller; @@ -181,6 +259,20 @@ typedef interface ICoreWebView2Controller3 ICoreWebView2Controller3; #endif /* __ICoreWebView2Controller3_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Controller4_FWD_DEFINED__ +#define __ICoreWebView2Controller4_FWD_DEFINED__ +typedef interface ICoreWebView2Controller4 ICoreWebView2Controller4; + +#endif /* __ICoreWebView2Controller4_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions_FWD_DEFINED__ +#define __ICoreWebView2ControllerOptions_FWD_DEFINED__ +typedef interface ICoreWebView2ControllerOptions ICoreWebView2ControllerOptions; + +#endif /* __ICoreWebView2ControllerOptions_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ #define __ICoreWebView2ContentLoadingEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2ContentLoadingEventArgs ICoreWebView2ContentLoadingEventArgs; @@ -195,6 +287,20 @@ typedef interface ICoreWebView2ContentLoadingEventHandler ICoreWebView2ContentLo #endif /* __ICoreWebView2ContentLoadingEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuRequestedEventArgs ICoreWebView2ContextMenuRequestedEventArgs; + +#endif /* __ICoreWebView2ContextMenuRequestedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuRequestedEventHandler ICoreWebView2ContextMenuRequestedEventHandler; + +#endif /* __ICoreWebView2ContextMenuRequestedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2Cookie_FWD_DEFINED__ #define __ICoreWebView2Cookie_FWD_DEFINED__ typedef interface ICoreWebView2Cookie ICoreWebView2Cookie; @@ -216,6 +322,13 @@ typedef interface ICoreWebView2CookieManager ICoreWebView2CookieManager; #endif /* __ICoreWebView2CookieManager_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Certificate_FWD_DEFINED__ +#define __ICoreWebView2Certificate_FWD_DEFINED__ +typedef interface ICoreWebView2Certificate ICoreWebView2Certificate; + +#endif /* __ICoreWebView2Certificate_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2ClientCertificate_FWD_DEFINED__ #define __ICoreWebView2ClientCertificate_FWD_DEFINED__ typedef interface ICoreWebView2ClientCertificate ICoreWebView2ClientCertificate; @@ -230,6 +343,13 @@ typedef interface ICoreWebView2StringCollection ICoreWebView2StringCollection; #endif /* __ICoreWebView2StringCollection_FWD_DEFINED__ */ +#ifndef __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ClearBrowsingDataCompletedHandler ICoreWebView2ClearBrowsingDataCompletedHandler; + +#endif /* __ICoreWebView2ClearBrowsingDataCompletedHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2ClientCertificateCollection_FWD_DEFINED__ #define __ICoreWebView2ClientCertificateCollection_FWD_DEFINED__ typedef interface ICoreWebView2ClientCertificateCollection ICoreWebView2ClientCertificateCollection; @@ -251,6 +371,34 @@ typedef interface ICoreWebView2ClientCertificateRequestedEventHandler ICoreWebVi #endif /* __ICoreWebView2ClientCertificateRequestedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2ContextMenuItem_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuItem_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuItem ICoreWebView2ContextMenuItem; + +#endif /* __ICoreWebView2ContextMenuItem_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuItemCollection ICoreWebView2ContextMenuItemCollection; + +#endif /* __ICoreWebView2ContextMenuItemCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ +#define __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ +typedef interface ICoreWebView2ContextMenuTarget ICoreWebView2ContextMenuTarget; + +#endif /* __ICoreWebView2ContextMenuTarget_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler; + +#endif /* __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_FWD_DEFINED__ #define __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_FWD_DEFINED__ typedef interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler; @@ -286,6 +434,13 @@ typedef interface ICoreWebView2CursorChangedEventHandler ICoreWebView2CursorChan #endif /* __ICoreWebView2CursorChangedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2CustomItemSelectedEventHandler ICoreWebView2CustomItemSelectedEventHandler; + +#endif /* __ICoreWebView2CustomItemSelectedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ #define __ICoreWebView2DocumentTitleChangedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2DocumentTitleChangedEventHandler ICoreWebView2DocumentTitleChangedEventHandler; @@ -321,6 +476,13 @@ typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs ICoreWebVi #endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_FWD_DEFINED__ */ +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 ICoreWebView2DevToolsProtocolEventReceivedEventArgs2; + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ #define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler ICoreWebView2DevToolsProtocolEventReceivedEventHandler; @@ -398,6 +560,34 @@ typedef interface ICoreWebView2Environment6 ICoreWebView2Environment6; #endif /* __ICoreWebView2Environment6_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Environment7_FWD_DEFINED__ +#define __ICoreWebView2Environment7_FWD_DEFINED__ +typedef interface ICoreWebView2Environment7 ICoreWebView2Environment7; + +#endif /* __ICoreWebView2Environment7_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment8_FWD_DEFINED__ +#define __ICoreWebView2Environment8_FWD_DEFINED__ +typedef interface ICoreWebView2Environment8 ICoreWebView2Environment8; + +#endif /* __ICoreWebView2Environment8_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment9_FWD_DEFINED__ +#define __ICoreWebView2Environment9_FWD_DEFINED__ +typedef interface ICoreWebView2Environment9 ICoreWebView2Environment9; + +#endif /* __ICoreWebView2Environment9_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment10_FWD_DEFINED__ +#define __ICoreWebView2Environment10_FWD_DEFINED__ +typedef interface ICoreWebView2Environment10 ICoreWebView2Environment10; + +#endif /* __ICoreWebView2Environment10_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ #define __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ typedef interface ICoreWebView2EnvironmentOptions ICoreWebView2EnvironmentOptions; @@ -405,6 +595,13 @@ typedef interface ICoreWebView2EnvironmentOptions ICoreWebView2EnvironmentOption #endif /* __ICoreWebView2EnvironmentOptions_FWD_DEFINED__ */ +#ifndef __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ +#define __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ +typedef interface ICoreWebView2EnvironmentOptions2 ICoreWebView2EnvironmentOptions2; + +#endif /* __ICoreWebView2EnvironmentOptions2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2EstimatedEndTimeChangedEventHandler_FWD_DEFINED__ #define __ICoreWebView2EstimatedEndTimeChangedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2EstimatedEndTimeChangedEventHandler ICoreWebView2EstimatedEndTimeChangedEventHandler; @@ -426,6 +623,27 @@ typedef interface ICoreWebView2Frame ICoreWebView2Frame; #endif /* __ICoreWebView2Frame_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Frame2_FWD_DEFINED__ +#define __ICoreWebView2Frame2_FWD_DEFINED__ +typedef interface ICoreWebView2Frame2 ICoreWebView2Frame2; + +#endif /* __ICoreWebView2Frame2_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame3_FWD_DEFINED__ +#define __ICoreWebView2Frame3_FWD_DEFINED__ +typedef interface ICoreWebView2Frame3 ICoreWebView2Frame3; + +#endif /* __ICoreWebView2Frame3_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameContentLoadingEventHandler ICoreWebView2FrameContentLoadingEventHandler; + +#endif /* __ICoreWebView2FrameContentLoadingEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2FrameCreatedEventArgs_FWD_DEFINED__ #define __ICoreWebView2FrameCreatedEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2FrameCreatedEventArgs ICoreWebView2FrameCreatedEventArgs; @@ -447,6 +665,13 @@ typedef interface ICoreWebView2FrameDestroyedEventHandler ICoreWebView2FrameDest #endif /* __ICoreWebView2FrameDestroyedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameDOMContentLoadedEventHandler ICoreWebView2FrameDOMContentLoadedEventHandler; + +#endif /* __ICoreWebView2FrameDOMContentLoadedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ #define __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2FrameNameChangedEventHandler ICoreWebView2FrameNameChangedEventHandler; @@ -454,6 +679,34 @@ typedef interface ICoreWebView2FrameNameChangedEventHandler ICoreWebView2FrameNa #endif /* __ICoreWebView2FrameNameChangedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameNavigationCompletedEventHandler ICoreWebView2FrameNavigationCompletedEventHandler; + +#endif /* __ICoreWebView2FrameNavigationCompletedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameNavigationStartingEventHandler ICoreWebView2FrameNavigationStartingEventHandler; + +#endif /* __ICoreWebView2FrameNavigationStartingEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FramePermissionRequestedEventHandler ICoreWebView2FramePermissionRequestedEventHandler; + +#endif /* __ICoreWebView2FramePermissionRequestedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FrameWebMessageReceivedEventHandler ICoreWebView2FrameWebMessageReceivedEventHandler; + +#endif /* __ICoreWebView2FrameWebMessageReceivedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2FrameInfo_FWD_DEFINED__ #define __ICoreWebView2FrameInfo_FWD_DEFINED__ typedef interface ICoreWebView2FrameInfo ICoreWebView2FrameInfo; @@ -517,6 +770,13 @@ typedef interface ICoreWebView2HttpResponseHeaders ICoreWebView2HttpResponseHead #endif /* __ICoreWebView2HttpResponseHeaders_FWD_DEFINED__ */ +#ifndef __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler; + +#endif /* __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ #define __ICoreWebView2MoveFocusRequestedEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2MoveFocusRequestedEventArgs ICoreWebView2MoveFocusRequestedEventArgs; @@ -538,6 +798,13 @@ typedef interface ICoreWebView2NavigationCompletedEventArgs ICoreWebView2Navigat #endif /* __ICoreWebView2NavigationCompletedEventArgs_FWD_DEFINED__ */ +#ifndef __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationCompletedEventArgs2 ICoreWebView2NavigationCompletedEventArgs2; + +#endif /* __ICoreWebView2NavigationCompletedEventArgs2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ #define __ICoreWebView2NavigationCompletedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2NavigationCompletedEventHandler ICoreWebView2NavigationCompletedEventHandler; @@ -552,6 +819,13 @@ typedef interface ICoreWebView2NavigationStartingEventArgs ICoreWebView2Navigati #endif /* __ICoreWebView2NavigationStartingEventArgs_FWD_DEFINED__ */ +#ifndef __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2NavigationStartingEventArgs2 ICoreWebView2NavigationStartingEventArgs2; + +#endif /* __ICoreWebView2NavigationStartingEventArgs2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ #define __ICoreWebView2NavigationStartingEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2NavigationStartingEventHandler ICoreWebView2NavigationStartingEventHandler; @@ -594,6 +868,13 @@ typedef interface ICoreWebView2PermissionRequestedEventArgs ICoreWebView2Permiss #endif /* __ICoreWebView2PermissionRequestedEventArgs_FWD_DEFINED__ */ +#ifndef __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ +typedef interface ICoreWebView2PermissionRequestedEventArgs2 ICoreWebView2PermissionRequestedEventArgs2; + +#endif /* __ICoreWebView2PermissionRequestedEventArgs2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ #define __ICoreWebView2PermissionRequestedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2PermissionRequestedEventHandler ICoreWebView2PermissionRequestedEventHandler; @@ -643,6 +924,20 @@ typedef interface ICoreWebView2ProcessFailedEventHandler ICoreWebView2ProcessFai #endif /* __ICoreWebView2ProcessFailedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Profile_FWD_DEFINED__ +#define __ICoreWebView2Profile_FWD_DEFINED__ +typedef interface ICoreWebView2Profile ICoreWebView2Profile; + +#endif /* __ICoreWebView2Profile_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile2_FWD_DEFINED__ +#define __ICoreWebView2Profile2_FWD_DEFINED__ +typedef interface ICoreWebView2Profile2 ICoreWebView2Profile2; + +#endif /* __ICoreWebView2Profile2_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ #define __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ typedef interface ICoreWebView2RasterizationScaleChangedEventHandler ICoreWebView2RasterizationScaleChangedEventHandler; @@ -650,6 +945,20 @@ typedef interface ICoreWebView2RasterizationScaleChangedEventHandler ICoreWebVie #endif /* __ICoreWebView2RasterizationScaleChangedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ +typedef interface ICoreWebView2ServerCertificateErrorDetectedEventArgs ICoreWebView2ServerCertificateErrorDetectedEventArgs; + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventArgs_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ServerCertificateErrorDetectedEventHandler ICoreWebView2ServerCertificateErrorDetectedEventHandler; + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ #define __ICoreWebView2ScriptDialogOpeningEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2ScriptDialogOpeningEventArgs ICoreWebView2ScriptDialogOpeningEventArgs; @@ -706,6 +1015,13 @@ typedef interface ICoreWebView2Settings6 ICoreWebView2Settings6; #endif /* __ICoreWebView2Settings6_FWD_DEFINED__ */ +#ifndef __ICoreWebView2Settings7_FWD_DEFINED__ +#define __ICoreWebView2Settings7_FWD_DEFINED__ +typedef interface ICoreWebView2Settings7 ICoreWebView2Settings7; + +#endif /* __ICoreWebView2Settings7_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ #define __ICoreWebView2SourceChangedEventArgs_FWD_DEFINED__ typedef interface ICoreWebView2SourceChangedEventArgs ICoreWebView2SourceChangedEventArgs; @@ -727,6 +1043,13 @@ typedef interface ICoreWebView2StateChangedEventHandler ICoreWebView2StateChange #endif /* __ICoreWebView2StateChangedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2StatusBarTextChangedEventHandler ICoreWebView2StatusBarTextChangedEventHandler; + +#endif /* __ICoreWebView2StatusBarTextChangedEventHandler_FWD_DEFINED__ */ + + #ifndef __ICoreWebView2TrySuspendCompletedHandler_FWD_DEFINED__ #define __ICoreWebView2TrySuspendCompletedHandler_FWD_DEFINED__ typedef interface ICoreWebView2TrySuspendCompletedHandler ICoreWebView2TrySuspendCompletedHandler; @@ -825,6 +1148,69 @@ typedef interface ICoreWebView2ZoomFactorChangedEventHandler ICoreWebView2ZoomFa #endif /* __ICoreWebView2ZoomFactorChangedEventHandler_FWD_DEFINED__ */ +#ifndef __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsMutedChangedEventHandler ICoreWebView2IsMutedChangedEventHandler; + +#endif /* __ICoreWebView2IsMutedChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler ICoreWebView2IsDocumentPlayingAudioChangedEventHandler; + +#endif /* __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfo_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfo_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfo ICoreWebView2ProcessInfo; + +#endif /* __ICoreWebView2ProcessInfo_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfoCollection ICoreWebView2ProcessInfoCollection; + +#endif /* __ICoreWebView2ProcessInfoCollection_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2ProcessInfosChangedEventHandler ICoreWebView2ProcessInfosChangedEventHandler; + +#endif /* __ICoreWebView2ProcessInfosChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ +#define __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ +typedef interface ICoreWebView2FaviconChangedEventHandler ICoreWebView2FaviconChangedEventHandler; + +#endif /* __ICoreWebView2FaviconChangedEventHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ +#define __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ +typedef interface ICoreWebView2GetFaviconCompletedHandler ICoreWebView2GetFaviconCompletedHandler; + +#endif /* __ICoreWebView2GetFaviconCompletedHandler_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_14_FWD_DEFINED__ +#define __ICoreWebView2_14_FWD_DEFINED__ +typedef interface ICoreWebView2_14 ICoreWebView2_14; + +#endif /* __ICoreWebView2_14_FWD_DEFINED__ */ + + +#ifndef __ICoreWebView2_15_FWD_DEFINED__ +#define __ICoreWebView2_15_FWD_DEFINED__ +typedef interface ICoreWebView2_15 ICoreWebView2_15; + +#endif /* __ICoreWebView2_15_FWD_DEFINED__ */ + + /* header files for imported files */ #include "objidl.h" #include "oaidl.h" @@ -933,6 +1319,60 @@ extern "C"{ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1009,7 +1449,8 @@ enum COREWEBVIEW2_PROCESS_FAILED_REASON COREWEBVIEW2_PROCESS_FAILED_REASON_TERMINATED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_UNRESPONSIVE + 1 ) , COREWEBVIEW2_PROCESS_FAILED_REASON_CRASHED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_TERMINATED + 1 ) , COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_CRASHED + 1 ) , - COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY = ( COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED + 1 ) + COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY = ( COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED + 1 ) , + COREWEBVIEW2_PROCESS_FAILED_REASON_PROFILE_DELETED = ( COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY + 1 ) } COREWEBVIEW2_PROCESS_FAILED_REASON; typedef /* [v1_enum] */ @@ -1051,7 +1492,9 @@ enum COREWEBVIEW2_WEB_ERROR_STATUS COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED = ( COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT + 1 ) , COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED = ( COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED + 1 ) , COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED = ( COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED + 1 ) , - COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR = ( COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED + 1 ) + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR = ( COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_VALID_AUTHENTICATION_CREDENTIALS_REQUIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR + 1 ) , + COREWEBVIEW2_WEB_ERROR_STATUS_VALID_PROXY_AUTHENTICATION_REQUIRED = ( COREWEBVIEW2_WEB_ERROR_STATUS_VALID_AUTHENTICATION_CREDENTIALS_REQUIRED + 1 ) } COREWEBVIEW2_WEB_ERROR_STATUS; typedef /* [v1_enum] */ @@ -1152,7 +1595,7 @@ enum COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_X_BUTTON2 = 0x40 } COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS; -DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS); +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS) typedef /* [v1_enum] */ enum COREWEBVIEW2_POINTER_EVENT_KIND { @@ -1229,6 +1672,111 @@ enum COREWEBVIEW2_PRINT_ORIENTATION COREWEBVIEW2_PRINT_ORIENTATION_LANDSCAPE = ( COREWEBVIEW2_PRINT_ORIENTATION_PORTRAIT + 1 ) } COREWEBVIEW2_PRINT_ORIENTATION; +typedef /* [v1_enum] */ +enum COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT + { + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_LEFT = 0, + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_RIGHT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_LEFT + 1 ) , + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_LEFT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_TOP_RIGHT + 1 ) , + COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_RIGHT = ( COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT_BOTTOM_LEFT + 1 ) + } COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PROCESS_KIND + { + COREWEBVIEW2_PROCESS_KIND_BROWSER = 0, + COREWEBVIEW2_PROCESS_KIND_RENDERER = ( COREWEBVIEW2_PROCESS_KIND_BROWSER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_UTILITY = ( COREWEBVIEW2_PROCESS_KIND_RENDERER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_SANDBOX_HELPER = ( COREWEBVIEW2_PROCESS_KIND_UTILITY + 1 ) , + COREWEBVIEW2_PROCESS_KIND_GPU = ( COREWEBVIEW2_PROCESS_KIND_SANDBOX_HELPER + 1 ) , + COREWEBVIEW2_PROCESS_KIND_PPAPI_PLUGIN = ( COREWEBVIEW2_PROCESS_KIND_GPU + 1 ) , + COREWEBVIEW2_PROCESS_KIND_PPAPI_BROKER = ( COREWEBVIEW2_PROCESS_KIND_PPAPI_PLUGIN + 1 ) + } COREWEBVIEW2_PROCESS_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PDF_TOOLBAR_ITEMS + { + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_NONE = 0, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SAVE = 0x1, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PRINT = 0x2, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SAVE_AS = 0x4, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ZOOM_IN = 0x8, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ZOOM_OUT = 0x10, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_ROTATE = 0x20, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_FIT_PAGE = 0x40, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PAGE_LAYOUT = 0x80, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_BOOKMARKS = 0x100, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_PAGE_SELECTOR = 0x200, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_SEARCH = 0x400, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_FULL_SCREEN = 0x800, + COREWEBVIEW2_PDF_TOOLBAR_ITEMS_MORE_SETTINGS = 0x1000 + } COREWEBVIEW2_PDF_TOOLBAR_ITEMS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_PDF_TOOLBAR_ITEMS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND + { + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_PAGE = 0, + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_IMAGE = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_PAGE + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_SELECTED_TEXT = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_IMAGE + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_AUDIO = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_SELECTED_TEXT + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_VIDEO = ( COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND_AUDIO + 1 ) + } COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND + { + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_COMMAND = 0, + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_CHECK_BOX = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_COMMAND + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_RADIO = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_CHECK_BOX + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SEPARATOR = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_RADIO + 1 ) , + COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SUBMENU = ( COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND_SEPARATOR + 1 ) + } COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_PREFERRED_COLOR_SCHEME + { + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_AUTO = 0, + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT = ( COREWEBVIEW2_PREFERRED_COLOR_SCHEME_AUTO + 1 ) , + COREWEBVIEW2_PREFERRED_COLOR_SCHEME_DARK = ( COREWEBVIEW2_PREFERRED_COLOR_SCHEME_LIGHT + 1 ) + } COREWEBVIEW2_PREFERRED_COLOR_SCHEME; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_BROWSING_DATA_KINDS + { + COREWEBVIEW2_BROWSING_DATA_KINDS_FILE_SYSTEMS = ( 1 << 0 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_INDEXED_DB = ( 1 << 1 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_LOCAL_STORAGE = ( 1 << 2 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_WEB_SQL = ( 1 << 3 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_CACHE_STORAGE = ( 1 << 4 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_DOM_STORAGE = ( 1 << 5 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_COOKIES = ( 1 << 6 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_SITE = ( 1 << 7 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_DISK_CACHE = ( 1 << 8 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_DOWNLOAD_HISTORY = ( 1 << 9 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_GENERAL_AUTOFILL = ( 1 << 10 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_PASSWORD_AUTOSAVE = ( 1 << 11 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_BROWSING_HISTORY = ( 1 << 12 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_SETTINGS = ( 1 << 13 ) , + COREWEBVIEW2_BROWSING_DATA_KINDS_ALL_PROFILE = ( 1 << 14 ) + } COREWEBVIEW2_BROWSING_DATA_KINDS; + +DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_BROWSING_DATA_KINDS) +typedef /* [v1_enum] */ +enum COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION + { + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_ALWAYS_ALLOW = 0, + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_CANCEL = ( COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_ALWAYS_ALLOW + 1 ) , + COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_DEFAULT = ( COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION_CANCEL + 1 ) + } COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION; + +typedef /* [v1_enum] */ +enum COREWEBVIEW2_FAVICON_IMAGE_FORMAT + { + COREWEBVIEW2_FAVICON_IMAGE_FORMAT_PNG = 0, + COREWEBVIEW2_FAVICON_IMAGE_FORMAT_JPEG = ( COREWEBVIEW2_FAVICON_IMAGE_FORMAT_PNG + 1 ) + } COREWEBVIEW2_FAVICON_IMAGE_FORMAT; + STDAPI CreateCoreWebView2EnvironmentWithOptions(PCWSTR browserExecutableFolder, PCWSTR userDataFolder, ICoreWebView2EnvironmentOptions* environmentOptions, ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler); STDAPI CreateCoreWebView2Environment(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* environmentCreatedHandler); STDAPI GetAvailableCoreWebView2BrowserVersionString(PCWSTR browserExecutableFolder, LPWSTR* versionInfo); @@ -1278,38 +1826,47 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AcceleratorKeyPressedE { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2AcceleratorKeyPressedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2AcceleratorKeyPressedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventKind )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_KEY_EVENT_KIND *keyEventKind); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_VirtualKey) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_VirtualKey )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [retval][out] */ UINT *virtualKey); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_KeyEventLParam) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyEventLParam )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [retval][out] */ INT *lParam); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_PhysicalKeyStatus) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PhysicalKeyStatus )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_PHYSICAL_KEY_STATUS *physicalKeyStatus); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [retval][out] */ BOOL *handled); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2AcceleratorKeyPressedEventArgs * This, /* [in] */ BOOL handled); @@ -1394,18 +1951,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AcceleratorKeyPressedE { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2AcceleratorKeyPressedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2AcceleratorKeyPressedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2AcceleratorKeyPressedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2AcceleratorKeyPressedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2AcceleratorKeyPressedEventHandler * This, /* [in] */ ICoreWebView2Controller *sender, @@ -1476,18 +2037,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2AddScriptToExecuteOnDo { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -1558,18 +2123,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CallDevToolsProtocolMe { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CallDevToolsProtocolMethodCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -1639,18 +2208,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CapturePreviewComplete { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CapturePreviewCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CapturePreviewCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CapturePreviewCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CapturePreviewCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CapturePreviewCompletedHandler * This, /* [in] */ HRESULT errorCode); @@ -1911,267 +2484,328 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2 = {0x76eceacb,0x0462, { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2 * This, /* [in] */ EventRegistrationToken token); @@ -2431,297 +3065,365 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_2 = {0x9E8F0CF8,0xE67 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_2 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_2 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_2 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_2 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_2 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_2 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_2 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_2 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_2 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_2 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_2 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_2 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_2 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_2 * This, /* [retval][out] */ ICoreWebView2Environment **environment); @@ -2996,318 +3698,391 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_3 = {0xA0D6DF20,0x3B9 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_3 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_3 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_3 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_3 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_3 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_3 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_3 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_3 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_3 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_3 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_3 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_3 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_3 * This, /* [retval][out] */ ICoreWebView2Environment **environment); + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) HRESULT ( STDMETHODCALLTYPE *TrySuspend )( ICoreWebView2_3 * This, /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2_3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( ICoreWebView2_3 * This, /* [retval][out] */ BOOL *isSuspended); + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR hostName, /* [in] */ LPCWSTR folderPath, /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( ICoreWebView2_3 * This, /* [in] */ LPCWSTR hostName); @@ -3596,336 +4371,413 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_4 = {0x20d02d59,0x6df { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_4 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_4 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_4 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_4 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_4 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_4 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_4 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_4 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_4 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_4 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_4 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_4 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_4 * This, /* [retval][out] */ ICoreWebView2Environment **environment); + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) HRESULT ( STDMETHODCALLTYPE *TrySuspend )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2_4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( ICoreWebView2_4 * This, /* [retval][out] */ BOOL *isSuspended); + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR hostName, /* [in] */ LPCWSTR folderPath, /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( ICoreWebView2_4 * This, /* [in] */ LPCWSTR hostName); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( ICoreWebView2_4 * This, /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( ICoreWebView2_4 * This, /* [in] */ EventRegistrationToken token); @@ -4220,345 +5072,424 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_5 = {0xbedb11b8,0xd63 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_5 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_5 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_5 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_5 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_5 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_5 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_5 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_5 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_5 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_5 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_5 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_5 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_5 * This, /* [retval][out] */ ICoreWebView2Environment **environment); + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) HRESULT ( STDMETHODCALLTYPE *TrySuspend )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2_5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( ICoreWebView2_5 * This, /* [retval][out] */ BOOL *isSuspended); + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR hostName, /* [in] */ LPCWSTR folderPath, /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( ICoreWebView2_5 * This, /* [in] */ LPCWSTR hostName); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( ICoreWebView2_5 * This, /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( ICoreWebView2_5 * This, /* [in] */ EventRegistrationToken token); @@ -4855,349 +5786,429 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_6 = {0x499aadac,0xd92 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_6 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_6 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_6 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_6 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_6 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_6 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_6 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_6 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_6 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_6 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_6 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_6 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_6 * This, /* [retval][out] */ ICoreWebView2Environment **environment); + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) HRESULT ( STDMETHODCALLTYPE *TrySuspend )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2_6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( ICoreWebView2_6 * This, /* [retval][out] */ BOOL *isSuspended); + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR hostName, /* [in] */ LPCWSTR folderPath, /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( ICoreWebView2_6 * This, /* [in] */ LPCWSTR hostName); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( ICoreWebView2_6 * This, /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( ICoreWebView2_6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( ICoreWebView2_6 * This); @@ -5500,352 +6511,433 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_7 = {0x79c24d83,0x09a { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2_7 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( ICoreWebView2_7 * This, /* [retval][out] */ ICoreWebView2Settings **settings); + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2_7 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) HRESULT ( STDMETHODCALLTYPE *Navigate )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) HRESULT ( STDMETHODCALLTYPE *NavigateToString )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR htmlContent); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR id); + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR javaScript, /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) HRESULT ( STDMETHODCALLTYPE *CapturePreview )( ICoreWebView2_7 * This, /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, /* [in] */ IStream *imageStream, /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) HRESULT ( STDMETHODCALLTYPE *Reload )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR webMessageAsString); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR methodName, /* [in] */ LPCWSTR parametersAsJson, /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2_7 * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( ICoreWebView2_7 * This, /* [retval][out] */ BOOL *canGoBack); + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( ICoreWebView2_7 * This, /* [retval][out] */ BOOL *canGoForward); + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) HRESULT ( STDMETHODCALLTYPE *GoBack )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) HRESULT ( STDMETHODCALLTYPE *GoForward )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR eventName, /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) HRESULT ( STDMETHODCALLTYPE *Stop )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( ICoreWebView2_7 * This, /* [retval][out] */ LPWSTR *title); + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR name, /* [in] */ VARIANT *object); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( ICoreWebView2_7 * This, /* [retval][out] */ BOOL *containsFullScreenElement); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( ICoreWebView2_7 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( ICoreWebView2_7 * This, /* [in] */ const LPCWSTR uri, /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2WebResourceRequest *request); + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( ICoreWebView2_7 * This, /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( ICoreWebView2_7 * This, /* [retval][out] */ ICoreWebView2Environment **environment); + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) HRESULT ( STDMETHODCALLTYPE *TrySuspend )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( ICoreWebView2_7 * This, /* [retval][out] */ BOOL *isSuspended); + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR hostName, /* [in] */ LPCWSTR folderPath, /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR hostName); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( ICoreWebView2_7 * This, /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( ICoreWebView2_7 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( ICoreWebView2_7 * This); + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( ICoreWebView2_7 * This, /* [in] */ LPCWSTR resultFilePath, @@ -6126,6 +7218,5750 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_7 = {0x79c24d83,0x09a #endif /* __ICoreWebView2_7_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2_8_INTERFACE_DEFINED__ +#define __ICoreWebView2_8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_8 = {0xE9632730,0x6E1E,0x43AB,{0xB7,0xB8,0x7B,0x2C,0x9E,0x62,0xE0,0x94}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E9632730-6E1E-43AB-B7B8-7B2C9E62E094") + ICoreWebView2_8 : public ICoreWebView2_7 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_IsMutedChanged( + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsMutedChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsMuted( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsMuted( + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_IsDocumentPlayingAudioChanged( + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsDocumentPlayingAudioChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsDocumentPlayingAudio( + /* [retval][out] */ BOOL *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_8 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_8 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_8 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_8 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_8 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_8 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_8 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_8 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_8 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_8 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_8 * This, + /* [retval][out] */ BOOL *value); + + END_INTERFACE + } ICoreWebView2_8Vtbl; + + interface ICoreWebView2_8 + { + CONST_VTBL struct ICoreWebView2_8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_8_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_8_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_8_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_8_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_8_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_8_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_8_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_8_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_8_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_8_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_8_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_8_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_8_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_8_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_8_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_8_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_8_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_8_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_8_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_8_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_8_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_8_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_8_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_8_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_8_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_8_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_8_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_8_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_8_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_8_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_8_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_8_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_8_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_8_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_8_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_8_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_8_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_8_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_8_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_8_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_8_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_8_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_8_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_8_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_8_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_8_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_8_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_8_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_8_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_8_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_8_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_8_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_8_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_8_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_8_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_8_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_8_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_8_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_8_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_8_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_8_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_8_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_8_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_8_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_9_INTERFACE_DEFINED__ +#define __ICoreWebView2_9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_9 = {0x4d7b2eab,0x9fdc,0x468d,{0xb9,0x98,0xa9,0x26,0x0b,0x5e,0xd6,0x51}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4d7b2eab-9fdc-468d-b998-a9260b5ed651") + ICoreWebView2_9 : public ICoreWebView2_8 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_IsDefaultDownloadDialogOpenChanged( + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_IsDefaultDownloadDialogOpenChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsDefaultDownloadDialogOpen( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenDefaultDownloadDialog( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE CloseDefaultDownloadDialog( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadDialogCornerAlignment( + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadDialogCornerAlignment( + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadDialogMargin( + /* [retval][out] */ POINT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadDialogMargin( + /* [in] */ POINT value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_9 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_9 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_9 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_9 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_9 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_9 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_9 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_9 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_9 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_9 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_9 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_9 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_9 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_9 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_9 * This, + /* [in] */ POINT value); + + END_INTERFACE + } ICoreWebView2_9Vtbl; + + interface ICoreWebView2_9 + { + CONST_VTBL struct ICoreWebView2_9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_9_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_9_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_9_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_9_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_9_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_9_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_9_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_9_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_9_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_9_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_9_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_9_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_9_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_9_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_9_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_9_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_9_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_9_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_9_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_9_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_9_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_9_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_9_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_9_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_9_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_9_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_9_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_9_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_9_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_9_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_9_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_9_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_9_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_9_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_9_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_9_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_9_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_9_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_9_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_9_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_9_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_9_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_9_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_9_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_9_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_9_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_9_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_9_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_9_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_9_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_9_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_9_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_9_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_9_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_9_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_9_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_9_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_9_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_9_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_9_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_9_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_9_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_9_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_9_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_9_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_9_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_9_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_9_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_9_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_9_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_9_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_9_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_9_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_10_INTERFACE_DEFINED__ +#define __ICoreWebView2_10_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_10 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_10 = {0xb1690564,0x6f5a,0x4983,{0x8e,0x48,0x31,0xd1,0x14,0x3f,0xec,0xdb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b1690564-6f5a-4983-8e48-31d1143fecdb") + ICoreWebView2_10 : public ICoreWebView2_9 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_BasicAuthenticationRequested( + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_BasicAuthenticationRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_10Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_10 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_10 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_10 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_10 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_10 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_10 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_10 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_10 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_10 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_10 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_10 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_10 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_10 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_10 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_10 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_10 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_10 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_10Vtbl; + + interface ICoreWebView2_10 + { + CONST_VTBL struct ICoreWebView2_10Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_10_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_10_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_10_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_10_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_10_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_10_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_10_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_10_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_10_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_10_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_10_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_10_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_10_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_10_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_10_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_10_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_10_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_10_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_10_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_10_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_10_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_10_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_10_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_10_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_10_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_10_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_10_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_10_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_10_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_10_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_10_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_10_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_10_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_10_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_10_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_10_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_10_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_10_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_10_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_10_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_10_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_10_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_10_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_10_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_10_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_10_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_10_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_10_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_10_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_10_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_10_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_10_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_10_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_10_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_10_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_10_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_10_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_10_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_10_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_10_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_10_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_10_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_10_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_10_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_10_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_10_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_10_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_10_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_10_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_10_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_10_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_10_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_10_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_10_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_10_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_10_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_10_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_10_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_11_INTERFACE_DEFINED__ +#define __ICoreWebView2_11_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_11 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_11 = {0x0be78e56,0xc193,0x4051,{0xb9,0x43,0x23,0xb4,0x60,0xc0,0x8b,0xdb}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0be78e56-c193-4051-b943-23b460c08bdb") + ICoreWebView2_11 : public ICoreWebView2_10 + { + public: + virtual HRESULT STDMETHODCALLTYPE CallDevToolsProtocolMethodForSession( + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContextMenuRequested( + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContextMenuRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_11Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_11 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_11 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_11 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_11 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_11 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_11 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_11 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_11 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_11 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_11 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_11 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_11 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_11 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_11 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_11 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_11 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_11 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_11 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2_11Vtbl; + + interface ICoreWebView2_11 + { + CONST_VTBL struct ICoreWebView2_11Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_11_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_11_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_11_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_11_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_11_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_11_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_11_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_11_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_11_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_11_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_11_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_11_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_11_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_11_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_11_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_11_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_11_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_11_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_11_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_11_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_11_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_11_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_11_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_11_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_11_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_11_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_11_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_11_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_11_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_11_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_11_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_11_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_11_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_11_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_11_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_11_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_11_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_11_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_11_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_11_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_11_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_11_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_11_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_11_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_11_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_11_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_11_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_11_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_11_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_11_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_11_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_11_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_11_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_11_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_11_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_11_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_11_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_11_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_11_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_11_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_11_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_11_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_11_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_11_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_11_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_11_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_11_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_11_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_11_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_11_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_11_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_11_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_11_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_11_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_11_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_11_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_11_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_11_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_11_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_11_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_12_INTERFACE_DEFINED__ +#define __ICoreWebView2_12_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_12 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_12 = {0x35D69927,0xBCFA,0x4566,{0x93,0x49,0x6B,0x3E,0x0D,0x15,0x4C,0xAC}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("35D69927-BCFA-4566-9349-6B3E0D154CAC") + ICoreWebView2_12 : public ICoreWebView2_11 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_StatusBarTextChanged( + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_StatusBarTextChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_StatusBarText( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_12Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_12 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_12 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_12 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_12 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_12 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_12 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_12 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_12 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_12 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_12 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_12 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_12 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_12 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_12 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_12 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_12 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_12 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2_12Vtbl; + + interface ICoreWebView2_12 + { + CONST_VTBL struct ICoreWebView2_12Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_12_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_12_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_12_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_12_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_12_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_12_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_12_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_12_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_12_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_12_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_12_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_12_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_12_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_12_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_12_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_12_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_12_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_12_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_12_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_12_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_12_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_12_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_12_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_12_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_12_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_12_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_12_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_12_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_12_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_12_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_12_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_12_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_12_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_12_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_12_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_12_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_12_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_12_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_12_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_12_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_12_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_12_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_12_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_12_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_12_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_12_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_12_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_12_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_12_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_12_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_12_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_12_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_12_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_12_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_12_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_12_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_12_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_12_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_12_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_12_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_12_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_12_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_12_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_12_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_12_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_12_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_12_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_12_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_12_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_12_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_12_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_12_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_12_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_12_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_12_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_12_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_12_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_12_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_12_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_12_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_12_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_12_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_13_INTERFACE_DEFINED__ +#define __ICoreWebView2_13_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_13 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_13 = {0xF75F09A8,0x667E,0x4983,{0x88,0xD6,0xC8,0x77,0x3F,0x31,0x5E,0x84}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F75F09A8-667E-4983-88D6-C8773F315E84") + ICoreWebView2_13 : public ICoreWebView2_12 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Profile( + /* [retval][out] */ ICoreWebView2Profile **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_13Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_13 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_13 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_13 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_13 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_13 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_13 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_13 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_13 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_13 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_13 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_13 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_13 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_13 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_13 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_13 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_13 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_13 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + END_INTERFACE + } ICoreWebView2_13Vtbl; + + interface ICoreWebView2_13 + { + CONST_VTBL struct ICoreWebView2_13Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_13_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_13_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_13_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_13_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_13_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_13_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_13_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_13_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_13_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_13_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_13_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_13_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_13_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_13_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_13_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_13_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_13_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_13_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_13_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_13_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_13_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_13_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_13_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_13_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_13_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_13_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_13_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_13_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_13_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_13_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_13_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_13_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_13_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_13_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_13_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_13_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_13_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_13_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_13_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_13_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_13_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_13_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_13_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_13_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_13_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_13_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_13_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_13_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_13_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_13_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_13_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_13_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_13_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_13_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_13_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_13_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_13_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_13_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_13_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_13_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_13_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_13_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_13_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_13_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_13_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_13_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_13_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_13_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_13_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_13_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_13_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_13_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_13_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_13_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_13_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_13_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_13_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_13_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_13_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_13_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_13_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_13_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_13_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationRequestedEventArgs = {0xef05516f,0xd897,0x4f9e,{0xb6,0x72,0xd8,0xe2,0x30,0x7a,0x3f,0xb0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ef05516f-d897-4f9e-b672-d8e2307a3fb0") + ICoreWebView2BasicAuthenticationRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Uri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Challenge( + /* [retval][out] */ LPWSTR *challenge) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Response( + /* [retval][out] */ ICoreWebView2BasicAuthenticationResponse **response) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Cancel( + /* [retval][out] */ BOOL *cancel) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Cancel( + /* [in] */ BOOL cancel) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Challenge) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Challenge )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ LPWSTR *challenge); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Response) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2BasicAuthenticationResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2BasicAuthenticationRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl; + + interface ICoreWebView2BasicAuthenticationRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Uri(This,value) \ + ( (This)->lpVtbl -> get_Uri(This,value) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Challenge(This,challenge) \ + ( (This)->lpVtbl -> get_Challenge(This,challenge) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Response(This,response) \ + ( (This)->lpVtbl -> get_Response(This,response) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationRequestedEventHandler = {0x58b4d6c2,0x18d4,0x497e,{0xb3,0x9b,0x9a,0x96,0x53,0x3f,0xa2,0x78}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("58b4d6c2-18d4-497e-b39b-9a96533fa278") + ICoreWebView2BasicAuthenticationRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2BasicAuthenticationRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl; + + interface ICoreWebView2BasicAuthenticationRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ +#define __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ + +/* interface ICoreWebView2BasicAuthenticationResponse */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BasicAuthenticationResponse = {0x07023f7d,0x2d77,0x4d67,{0x90,0x40,0x6e,0x7d,0x42,0x8c,0x6a,0x40}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("07023f7d-2d77-4d67-9040-6e7d428c6a40") + ICoreWebView2BasicAuthenticationResponse : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UserName( + /* [retval][out] */ LPWSTR *userName) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_UserName( + /* [in] */ LPCWSTR userName) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Password( + /* [retval][out] */ LPWSTR *password) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Password( + /* [in] */ LPCWSTR password) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2BasicAuthenticationResponseVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2BasicAuthenticationResponse * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2BasicAuthenticationResponse * This); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, get_UserName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserName )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [retval][out] */ LPWSTR *userName); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, put_UserName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserName )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ LPCWSTR userName); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, get_Password) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Password )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [retval][out] */ LPWSTR *password); + + DECLSPEC_XFGVIRT(ICoreWebView2BasicAuthenticationResponse, put_Password) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Password )( + ICoreWebView2BasicAuthenticationResponse * This, + /* [in] */ LPCWSTR password); + + END_INTERFACE + } ICoreWebView2BasicAuthenticationResponseVtbl; + + interface ICoreWebView2BasicAuthenticationResponse + { + CONST_VTBL struct ICoreWebView2BasicAuthenticationResponseVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2BasicAuthenticationResponse_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2BasicAuthenticationResponse_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2BasicAuthenticationResponse_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2BasicAuthenticationResponse_get_UserName(This,userName) \ + ( (This)->lpVtbl -> get_UserName(This,userName) ) + +#define ICoreWebView2BasicAuthenticationResponse_put_UserName(This,userName) \ + ( (This)->lpVtbl -> put_UserName(This,userName) ) + +#define ICoreWebView2BasicAuthenticationResponse_get_Password(This,password) \ + ( (This)->lpVtbl -> get_Password(This,password) ) + +#define ICoreWebView2BasicAuthenticationResponse_put_Password(This,password) \ + ( (This)->lpVtbl -> put_Password(This,password) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2BasicAuthenticationResponse_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2BrowserProcessExitedEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2BrowserProcessExitedEventArgs_INTERFACE_DEFINED__ @@ -6156,22 +12992,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserProcessExitedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2BrowserProcessExitedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2BrowserProcessExitedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2BrowserProcessExitedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventArgs, get_BrowserProcessExitKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessExitKind )( ICoreWebView2BrowserProcessExitedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_BROWSER_PROCESS_EXIT_KIND *browserProcessExitKind); + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventArgs, get_BrowserProcessId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( ICoreWebView2BrowserProcessExitedEventArgs * This, /* [retval][out] */ UINT32 *value); @@ -6244,18 +13085,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BrowserProcessExitedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2BrowserProcessExitedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2BrowserProcessExitedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2BrowserProcessExitedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2BrowserProcessExitedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2BrowserProcessExitedEventHandler * This, /* [in] */ ICoreWebView2Environment *sender, @@ -6326,18 +13171,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2BytesReceivedChangedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2BytesReceivedChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2BytesReceivedChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2BytesReceivedChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2BytesReceivedChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2BytesReceivedChangedEventHandler * This, /* [in] */ ICoreWebView2DownloadOperation *sender, @@ -6433,26 +13282,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CompositionController * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CompositionController * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CompositionController * This); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( ICoreWebView2CompositionController * This, /* [retval][out] */ IUnknown **target); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( ICoreWebView2CompositionController * This, /* [in] */ IUnknown *target); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( ICoreWebView2CompositionController * This, /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, @@ -6460,24 +13315,29 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController /* [in] */ UINT32 mouseData, /* [in] */ POINT point); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( ICoreWebView2CompositionController * This, /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( ICoreWebView2CompositionController * This, /* [retval][out] */ HCURSOR *cursor); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( ICoreWebView2CompositionController * This, /* [retval][out] */ UINT32 *systemCursorId); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( ICoreWebView2CompositionController * This, /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( ICoreWebView2CompositionController * This, /* [in] */ EventRegistrationToken token); @@ -6555,7 +13415,7 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 ICoreWebView2CompositionController2 : public ICoreWebView2CompositionController { public: - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UIAProvider( + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AutomationProvider( /* [retval][out] */ IUnknown **provider) = 0; }; @@ -6567,26 +13427,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CompositionController2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CompositionController2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CompositionController2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( ICoreWebView2CompositionController2 * This, /* [retval][out] */ IUnknown **target); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( ICoreWebView2CompositionController2 * This, /* [in] */ IUnknown *target); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( ICoreWebView2CompositionController2 * This, /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, @@ -6594,29 +13460,35 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 /* [in] */ UINT32 mouseData, /* [in] */ POINT point); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( ICoreWebView2CompositionController2 * This, /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( ICoreWebView2CompositionController2 * This, /* [retval][out] */ HCURSOR *cursor); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( ICoreWebView2CompositionController2 * This, /* [retval][out] */ UINT32 *systemCursorId); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( ICoreWebView2CompositionController2 * This, /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( ICoreWebView2CompositionController2 * This, /* [in] */ EventRegistrationToken token); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UIAProvider )( + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( ICoreWebView2CompositionController2 * This, /* [retval][out] */ IUnknown **provider); @@ -6668,8 +13540,8 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) -#define ICoreWebView2CompositionController2_get_UIAProvider(This,provider) \ - ( (This)->lpVtbl -> get_UIAProvider(This,provider) ) +#define ICoreWebView2CompositionController2_get_AutomationProvider(This,provider) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,provider) ) #endif /* COBJMACROS */ @@ -6682,6 +13554,216 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController2 #endif /* __ICoreWebView2CompositionController2_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ +#define __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CompositionController3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CompositionController3 = {0x9570570e,0x4d76,0x4361,{0x9e,0xe1,0xf0,0x4d,0x0d,0xbd,0xfb,0x1e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9570570e-4d76-4361-9ee1-f04d0dbdfb1e") + ICoreWebView2CompositionController3 : public ICoreWebView2CompositionController2 + { + public: + virtual HRESULT STDMETHODCALLTYPE DragEnter( + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + virtual HRESULT STDMETHODCALLTYPE DragLeave( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DragOver( + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + virtual HRESULT STDMETHODCALLTYPE Drop( + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CompositionController3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CompositionController3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_RootVisualTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RootVisualTarget )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ IUnknown **target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, put_RootVisualTarget) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RootVisualTarget )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IUnknown *target); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendMouseInput) + HRESULT ( STDMETHODCALLTYPE *SendMouseInput )( + ICoreWebView2CompositionController3 * This, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + /* [in] */ COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + /* [in] */ UINT32 mouseData, + /* [in] */ POINT point); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, SendPointerInput) + HRESULT ( STDMETHODCALLTYPE *SendPointerInput )( + ICoreWebView2CompositionController3 * This, + /* [in] */ COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + /* [in] */ ICoreWebView2PointerInfo *pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_Cursor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cursor )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ HCURSOR *cursor); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, get_SystemCursorId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SystemCursorId )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ UINT32 *systemCursorId); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, add_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *add_CursorChanged )( + ICoreWebView2CompositionController3 * This, + /* [in] */ ICoreWebView2CursorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController, remove_CursorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_CursorChanged )( + ICoreWebView2CompositionController3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController2, get_AutomationProvider) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AutomationProvider )( + ICoreWebView2CompositionController3 * This, + /* [retval][out] */ IUnknown **provider); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragEnter) + HRESULT ( STDMETHODCALLTYPE *DragEnter )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragLeave) + HRESULT ( STDMETHODCALLTYPE *DragLeave )( + ICoreWebView2CompositionController3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, DragOver) + HRESULT ( STDMETHODCALLTYPE *DragOver )( + ICoreWebView2CompositionController3 * This, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + DECLSPEC_XFGVIRT(ICoreWebView2CompositionController3, Drop) + HRESULT ( STDMETHODCALLTYPE *Drop )( + ICoreWebView2CompositionController3 * This, + /* [in] */ IDataObject *dataObject, + /* [in] */ DWORD keyState, + /* [in] */ POINT point, + /* [retval][out] */ DWORD *effect); + + END_INTERFACE + } ICoreWebView2CompositionController3Vtbl; + + interface ICoreWebView2CompositionController3 + { + CONST_VTBL struct ICoreWebView2CompositionController3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CompositionController3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CompositionController3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CompositionController3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CompositionController3_get_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> get_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController3_put_RootVisualTarget(This,target) \ + ( (This)->lpVtbl -> put_RootVisualTarget(This,target) ) + +#define ICoreWebView2CompositionController3_SendMouseInput(This,eventKind,virtualKeys,mouseData,point) \ + ( (This)->lpVtbl -> SendMouseInput(This,eventKind,virtualKeys,mouseData,point) ) + +#define ICoreWebView2CompositionController3_SendPointerInput(This,eventKind,pointerInfo) \ + ( (This)->lpVtbl -> SendPointerInput(This,eventKind,pointerInfo) ) + +#define ICoreWebView2CompositionController3_get_Cursor(This,cursor) \ + ( (This)->lpVtbl -> get_Cursor(This,cursor) ) + +#define ICoreWebView2CompositionController3_get_SystemCursorId(This,systemCursorId) \ + ( (This)->lpVtbl -> get_SystemCursorId(This,systemCursorId) ) + +#define ICoreWebView2CompositionController3_add_CursorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CursorChanged(This,eventHandler,token) ) + +#define ICoreWebView2CompositionController3_remove_CursorChanged(This,token) \ + ( (This)->lpVtbl -> remove_CursorChanged(This,token) ) + + +#define ICoreWebView2CompositionController3_get_AutomationProvider(This,provider) \ + ( (This)->lpVtbl -> get_AutomationProvider(This,provider) ) + + +#define ICoreWebView2CompositionController3_DragEnter(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> DragEnter(This,dataObject,keyState,point,effect) ) + +#define ICoreWebView2CompositionController3_DragLeave(This) \ + ( (This)->lpVtbl -> DragLeave(This) ) + +#define ICoreWebView2CompositionController3_DragOver(This,keyState,point,effect) \ + ( (This)->lpVtbl -> DragOver(This,keyState,point,effect) ) + +#define ICoreWebView2CompositionController3_Drop(This,dataObject,keyState,point,effect) \ + ( (This)->lpVtbl -> Drop(This,dataObject,keyState,point,effect) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CompositionController3_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2Controller_INTERFACE_DEFINED__ #define __ICoreWebView2Controller_INTERFACE_DEFINED__ @@ -6779,110 +13861,136 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller = {0x4d00c0 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Controller * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Controller * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Controller * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( ICoreWebView2Controller * This, /* [retval][out] */ BOOL *isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( ICoreWebView2Controller * This, /* [in] */ BOOL isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( ICoreWebView2Controller * This, /* [retval][out] */ RECT *bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( ICoreWebView2Controller * This, /* [in] */ RECT bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( ICoreWebView2Controller * This, /* [retval][out] */ double *zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( ICoreWebView2Controller * This, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( ICoreWebView2Controller * This, /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( ICoreWebView2Controller * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( ICoreWebView2Controller * This, /* [in] */ RECT bounds, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) HRESULT ( STDMETHODCALLTYPE *MoveFocus )( ICoreWebView2Controller * This, /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( ICoreWebView2Controller * This, /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( ICoreWebView2Controller * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( ICoreWebView2Controller * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( ICoreWebView2Controller * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( ICoreWebView2Controller * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( ICoreWebView2Controller * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( ICoreWebView2Controller * This, /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( ICoreWebView2Controller * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( ICoreWebView2Controller * This, /* [retval][out] */ HWND *parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( ICoreWebView2Controller * This, /* [in] */ HWND parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( ICoreWebView2Controller * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) HRESULT ( STDMETHODCALLTYPE *Close )( ICoreWebView2Controller * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( ICoreWebView2Controller * This, /* [retval][out] */ ICoreWebView2 **coreWebView2); @@ -7020,118 +14128,146 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller2 = {0xc9799 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Controller2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Controller2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Controller2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( ICoreWebView2Controller2 * This, /* [retval][out] */ BOOL *isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( ICoreWebView2Controller2 * This, /* [in] */ BOOL isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( ICoreWebView2Controller2 * This, /* [retval][out] */ RECT *bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( ICoreWebView2Controller2 * This, /* [in] */ RECT bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( ICoreWebView2Controller2 * This, /* [retval][out] */ double *zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( ICoreWebView2Controller2 * This, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( ICoreWebView2Controller2 * This, /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( ICoreWebView2Controller2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( ICoreWebView2Controller2 * This, /* [in] */ RECT bounds, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) HRESULT ( STDMETHODCALLTYPE *MoveFocus )( ICoreWebView2Controller2 * This, /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( ICoreWebView2Controller2 * This, /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( ICoreWebView2Controller2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( ICoreWebView2Controller2 * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( ICoreWebView2Controller2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( ICoreWebView2Controller2 * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( ICoreWebView2Controller2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( ICoreWebView2Controller2 * This, /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( ICoreWebView2Controller2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( ICoreWebView2Controller2 * This, /* [retval][out] */ HWND *parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( ICoreWebView2Controller2 * This, /* [in] */ HWND parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( ICoreWebView2Controller2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) HRESULT ( STDMETHODCALLTYPE *Close )( ICoreWebView2Controller2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( ICoreWebView2Controller2 * This, /* [retval][out] */ ICoreWebView2 **coreWebView2); + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( ICoreWebView2Controller2 * This, /* [retval][out] */ COREWEBVIEW2_COLOR *backgroundColor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( ICoreWebView2Controller2 * This, /* [in] */ COREWEBVIEW2_COLOR backgroundColor); @@ -7295,151 +14431,187 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller3 = {0xf9614 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Controller3 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Controller3 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Controller3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( ICoreWebView2Controller3 * This, /* [retval][out] */ BOOL *isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( ICoreWebView2Controller3 * This, /* [in] */ BOOL isVisible); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( ICoreWebView2Controller3 * This, /* [retval][out] */ RECT *bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( ICoreWebView2Controller3 * This, /* [in] */ RECT bounds); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( ICoreWebView2Controller3 * This, /* [retval][out] */ double *zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( ICoreWebView2Controller3 * This, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( ICoreWebView2Controller3 * This, /* [in] */ RECT bounds, /* [in] */ double zoomFactor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) HRESULT ( STDMETHODCALLTYPE *MoveFocus )( ICoreWebView2Controller3 * This, /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( ICoreWebView2Controller3 * This, /* [retval][out] */ HWND *parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( ICoreWebView2Controller3 * This, /* [in] */ HWND parentWindow); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( ICoreWebView2Controller3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) HRESULT ( STDMETHODCALLTYPE *Close )( ICoreWebView2Controller3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( ICoreWebView2Controller3 * This, /* [retval][out] */ ICoreWebView2 **coreWebView2); + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( ICoreWebView2Controller3 * This, /* [retval][out] */ COREWEBVIEW2_COLOR *backgroundColor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( ICoreWebView2Controller3 * This, /* [in] */ COREWEBVIEW2_COLOR backgroundColor); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_RasterizationScale) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RasterizationScale )( ICoreWebView2Controller3 * This, /* [retval][out] */ double *scale); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_RasterizationScale) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RasterizationScale )( ICoreWebView2Controller3 * This, /* [in] */ double scale); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_ShouldDetectMonitorScaleChanges) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDetectMonitorScaleChanges )( ICoreWebView2Controller3 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_ShouldDetectMonitorScaleChanges) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldDetectMonitorScaleChanges )( ICoreWebView2Controller3 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, add_RasterizationScaleChanged) HRESULT ( STDMETHODCALLTYPE *add_RasterizationScaleChanged )( ICoreWebView2Controller3 * This, /* [in] */ ICoreWebView2RasterizationScaleChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, remove_RasterizationScaleChanged) HRESULT ( STDMETHODCALLTYPE *remove_RasterizationScaleChanged )( ICoreWebView2Controller3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_BoundsMode) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BoundsMode )( ICoreWebView2Controller3 * This, /* [retval][out] */ COREWEBVIEW2_BOUNDS_MODE *boundsMode); + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_BoundsMode) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_BoundsMode )( ICoreWebView2Controller3 * This, /* [in] */ COREWEBVIEW2_BOUNDS_MODE boundsMode); @@ -7579,6 +14751,490 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller3 = {0xf9614 #endif /* __ICoreWebView2Controller3_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Controller4_INTERFACE_DEFINED__ +#define __ICoreWebView2Controller4_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Controller4 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Controller4 = {0x97d418d5,0xa426,0x4e49,{0xa1,0x51,0xe1,0xa1,0x0f,0x32,0x7d,0x9e}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("97d418d5-a426-4e49-a151-e1a10f327d9e") + ICoreWebView2Controller4 : public ICoreWebView2Controller3 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AllowExternalDrop( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AllowExternalDrop( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Controller4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Controller4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_IsVisible) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsVisible )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_IsVisible) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsVisible )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL isVisible); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_Bounds) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Bounds )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ RECT *bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_Bounds) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Bounds )( + ICoreWebView2Controller4 * This, + /* [in] */ RECT bounds); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ZoomFactor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ZoomFactor )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ double *zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ZoomFactor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ZoomFactor )( + ICoreWebView2Controller4 * This, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *add_ZoomFactorChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2ZoomFactorChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_ZoomFactorChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ZoomFactorChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, SetBoundsAndZoomFactor) + HRESULT ( STDMETHODCALLTYPE *SetBoundsAndZoomFactor )( + ICoreWebView2Controller4 * This, + /* [in] */ RECT bounds, + /* [in] */ double zoomFactor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, MoveFocus) + HRESULT ( STDMETHODCALLTYPE *MoveFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *add_MoveFocusRequested )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2MoveFocusRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_MoveFocusRequested) + HRESULT ( STDMETHODCALLTYPE *remove_MoveFocusRequested )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_GotFocus) + HRESULT ( STDMETHODCALLTYPE *add_GotFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_GotFocus) + HRESULT ( STDMETHODCALLTYPE *remove_GotFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_LostFocus) + HRESULT ( STDMETHODCALLTYPE *add_LostFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2FocusChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_LostFocus) + HRESULT ( STDMETHODCALLTYPE *remove_LostFocus )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, add_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *add_AcceleratorKeyPressed )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2AcceleratorKeyPressedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, remove_AcceleratorKeyPressed) + HRESULT ( STDMETHODCALLTYPE *remove_AcceleratorKeyPressed )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_ParentWindow) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParentWindow )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ HWND *parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, put_ParentWindow) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ParentWindow )( + ICoreWebView2Controller4 * This, + /* [in] */ HWND parentWindow); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, NotifyParentWindowPositionChanged) + HRESULT ( STDMETHODCALLTYPE *NotifyParentWindowPositionChanged )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ICoreWebView2Controller4 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller, get_CoreWebView2) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CoreWebView2 )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ ICoreWebView2 **coreWebView2); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, get_DefaultBackgroundColor) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultBackgroundColor )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ COREWEBVIEW2_COLOR *backgroundColor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller2, put_DefaultBackgroundColor) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultBackgroundColor )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_COLOR backgroundColor); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_RasterizationScale) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RasterizationScale )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ double *scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_RasterizationScale) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_RasterizationScale )( + ICoreWebView2Controller4 * This, + /* [in] */ double scale); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_ShouldDetectMonitorScaleChanges) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_ShouldDetectMonitorScaleChanges) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldDetectMonitorScaleChanges )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, add_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *add_RasterizationScaleChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ ICoreWebView2RasterizationScaleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, remove_RasterizationScaleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_RasterizationScaleChanged )( + ICoreWebView2Controller4 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, get_BoundsMode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BoundsMode )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ COREWEBVIEW2_BOUNDS_MODE *boundsMode); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller3, put_BoundsMode) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_BoundsMode )( + ICoreWebView2Controller4 * This, + /* [in] */ COREWEBVIEW2_BOUNDS_MODE boundsMode); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller4, get_AllowExternalDrop) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowExternalDrop )( + ICoreWebView2Controller4 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Controller4, put_AllowExternalDrop) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowExternalDrop )( + ICoreWebView2Controller4 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2Controller4Vtbl; + + interface ICoreWebView2Controller4 + { + CONST_VTBL struct ICoreWebView2Controller4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Controller4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Controller4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Controller4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Controller4_get_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> get_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller4_put_IsVisible(This,isVisible) \ + ( (This)->lpVtbl -> put_IsVisible(This,isVisible) ) + +#define ICoreWebView2Controller4_get_Bounds(This,bounds) \ + ( (This)->lpVtbl -> get_Bounds(This,bounds) ) + +#define ICoreWebView2Controller4_put_Bounds(This,bounds) \ + ( (This)->lpVtbl -> put_Bounds(This,bounds) ) + +#define ICoreWebView2Controller4_get_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> get_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller4_put_ZoomFactor(This,zoomFactor) \ + ( (This)->lpVtbl -> put_ZoomFactor(This,zoomFactor) ) + +#define ICoreWebView2Controller4_add_ZoomFactorChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ZoomFactorChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_ZoomFactorChanged(This,token) \ + ( (This)->lpVtbl -> remove_ZoomFactorChanged(This,token) ) + +#define ICoreWebView2Controller4_SetBoundsAndZoomFactor(This,bounds,zoomFactor) \ + ( (This)->lpVtbl -> SetBoundsAndZoomFactor(This,bounds,zoomFactor) ) + +#define ICoreWebView2Controller4_MoveFocus(This,reason) \ + ( (This)->lpVtbl -> MoveFocus(This,reason) ) + +#define ICoreWebView2Controller4_add_MoveFocusRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_MoveFocusRequested(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_MoveFocusRequested(This,token) \ + ( (This)->lpVtbl -> remove_MoveFocusRequested(This,token) ) + +#define ICoreWebView2Controller4_add_GotFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_GotFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_GotFocus(This,token) \ + ( (This)->lpVtbl -> remove_GotFocus(This,token) ) + +#define ICoreWebView2Controller4_add_LostFocus(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_LostFocus(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_LostFocus(This,token) \ + ( (This)->lpVtbl -> remove_LostFocus(This,token) ) + +#define ICoreWebView2Controller4_add_AcceleratorKeyPressed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_AcceleratorKeyPressed(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_AcceleratorKeyPressed(This,token) \ + ( (This)->lpVtbl -> remove_AcceleratorKeyPressed(This,token) ) + +#define ICoreWebView2Controller4_get_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> get_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller4_put_ParentWindow(This,parentWindow) \ + ( (This)->lpVtbl -> put_ParentWindow(This,parentWindow) ) + +#define ICoreWebView2Controller4_NotifyParentWindowPositionChanged(This) \ + ( (This)->lpVtbl -> NotifyParentWindowPositionChanged(This) ) + +#define ICoreWebView2Controller4_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ICoreWebView2Controller4_get_CoreWebView2(This,coreWebView2) \ + ( (This)->lpVtbl -> get_CoreWebView2(This,coreWebView2) ) + + +#define ICoreWebView2Controller4_get_DefaultBackgroundColor(This,backgroundColor) \ + ( (This)->lpVtbl -> get_DefaultBackgroundColor(This,backgroundColor) ) + +#define ICoreWebView2Controller4_put_DefaultBackgroundColor(This,backgroundColor) \ + ( (This)->lpVtbl -> put_DefaultBackgroundColor(This,backgroundColor) ) + + +#define ICoreWebView2Controller4_get_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> get_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller4_put_RasterizationScale(This,scale) \ + ( (This)->lpVtbl -> put_RasterizationScale(This,scale) ) + +#define ICoreWebView2Controller4_get_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> get_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller4_put_ShouldDetectMonitorScaleChanges(This,value) \ + ( (This)->lpVtbl -> put_ShouldDetectMonitorScaleChanges(This,value) ) + +#define ICoreWebView2Controller4_add_RasterizationScaleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_RasterizationScaleChanged(This,eventHandler,token) ) + +#define ICoreWebView2Controller4_remove_RasterizationScaleChanged(This,token) \ + ( (This)->lpVtbl -> remove_RasterizationScaleChanged(This,token) ) + +#define ICoreWebView2Controller4_get_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> get_BoundsMode(This,boundsMode) ) + +#define ICoreWebView2Controller4_put_BoundsMode(This,boundsMode) \ + ( (This)->lpVtbl -> put_BoundsMode(This,boundsMode) ) + + +#define ICoreWebView2Controller4_get_AllowExternalDrop(This,value) \ + ( (This)->lpVtbl -> get_AllowExternalDrop(This,value) ) + +#define ICoreWebView2Controller4_put_AllowExternalDrop(This,value) \ + ( (This)->lpVtbl -> put_AllowExternalDrop(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Controller4_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ +#define __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ControllerOptions */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ControllerOptions = {0x12aae616,0x8ccb,0x44ec,{0xbc,0xb3,0xeb,0x18,0x31,0x88,0x16,0x35}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("12aae616-8ccb-44ec-bcb3-eb1831881635") + ICoreWebView2ControllerOptions : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfileName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ProfileName( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsInPrivateModeEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsInPrivateModeEnabled( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ControllerOptionsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ControllerOptions * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ControllerOptions * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ControllerOptions * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2ControllerOptions * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_ProfileName) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ProfileName )( + ICoreWebView2ControllerOptions * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ControllerOptions, put_IsInPrivateModeEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsInPrivateModeEnabled )( + ICoreWebView2ControllerOptions * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2ControllerOptionsVtbl; + + interface ICoreWebView2ControllerOptions + { + CONST_VTBL struct ICoreWebView2ControllerOptionsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ControllerOptions_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ControllerOptions_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ControllerOptions_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ControllerOptions_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions_put_ProfileName(This,value) \ + ( (This)->lpVtbl -> put_ProfileName(This,value) ) + +#define ICoreWebView2ControllerOptions_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2ControllerOptions_put_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsInPrivateModeEnabled(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ControllerOptions_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2ContentLoadingEventArgs_INTERFACE_DEFINED__ @@ -7609,22 +15265,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContentLoadingEventArg { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ContentLoadingEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ContentLoadingEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ContentLoadingEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventArgs, get_IsErrorPage) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsErrorPage )( ICoreWebView2ContentLoadingEventArgs * This, /* [retval][out] */ BOOL *isErrorPage); + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventArgs, get_NavigationId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( ICoreWebView2ContentLoadingEventArgs * This, /* [retval][out] */ UINT64 *navigationId); @@ -7697,18 +15358,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContentLoadingEventHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ContentLoadingEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ContentLoadingEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ContentLoadingEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ContentLoadingEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ContentLoadingEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -7751,6 +15416,253 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContentLoadingEventHan #endif /* __ICoreWebView2ContentLoadingEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuRequestedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuRequestedEventArgs = {0xa1d309ee,0xc03f,0x11eb,{0x85,0x29,0x02,0x42,0xac,0x13,0x00,0x03}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a1d309ee-c03f-11eb-8529-0242ac130003") + ICoreWebView2ContextMenuRequestedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MenuItems( + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ContextMenuTarget( + /* [retval][out] */ ICoreWebView2ContextMenuTarget **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Location( + /* [retval][out] */ POINT *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_SelectedCommandId( + /* [in] */ INT32 value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SelectedCommandId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuRequestedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuRequestedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_MenuItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MenuItems )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_ContextMenuTarget) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContextMenuTarget )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2ContextMenuTarget **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_Location) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Location )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, put_SelectedCommandId) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SelectedCommandId )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ INT32 value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_SelectedCommandId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectedCommandId )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ContextMenuRequestedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ContextMenuRequestedEventArgsVtbl; + + interface ICoreWebView2ContextMenuRequestedEventArgs + { + CONST_VTBL struct ICoreWebView2ContextMenuRequestedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuRequestedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_MenuItems(This,value) \ + ( (This)->lpVtbl -> get_MenuItems(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_ContextMenuTarget(This,value) \ + ( (This)->lpVtbl -> get_ContextMenuTarget(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_Location(This,value) \ + ( (This)->lpVtbl -> get_Location(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_put_SelectedCommandId(This,value) \ + ( (This)->lpVtbl -> put_SelectedCommandId(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_SelectedCommandId(This,value) \ + ( (This)->lpVtbl -> get_SelectedCommandId(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_put_Handled(This,value) \ + ( (This)->lpVtbl -> put_Handled(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_get_Handled(This,value) \ + ( (This)->lpVtbl -> get_Handled(This,value) ) + +#define ICoreWebView2ContextMenuRequestedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuRequestedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuRequestedEventHandler = {0x04d3fe1d,0xab87,0x42fb,{0xa8,0x98,0xda,0x24,0x1d,0x35,0xb6,0x3c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("04d3fe1d-ab87-42fb-a898-da241d35b63c") + ICoreWebView2ContextMenuRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContextMenuRequestedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ContextMenuRequestedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ContextMenuRequestedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ContextMenuRequestedEventHandlerVtbl; + + interface ICoreWebView2ContextMenuRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2ContextMenuRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuRequestedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2Cookie_INTERFACE_DEFINED__ #define __ICoreWebView2Cookie_INTERFACE_DEFINED__ @@ -7817,70 +15729,87 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Cookie = {0xAD26D6BE,0 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Cookie * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Cookie * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Cookie * This); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Name) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( ICoreWebView2Cookie * This, /* [retval][out] */ LPWSTR *name); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Value) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Value )( ICoreWebView2Cookie * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_Value) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Value )( ICoreWebView2Cookie * This, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Domain) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Domain )( ICoreWebView2Cookie * This, /* [retval][out] */ LPWSTR *domain); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Path) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )( ICoreWebView2Cookie * This, /* [retval][out] */ LPWSTR *path); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_Expires) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Expires )( ICoreWebView2Cookie * This, /* [retval][out] */ double *expires); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_Expires) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Expires )( ICoreWebView2Cookie * This, /* [in] */ double expires); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsHttpOnly) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsHttpOnly )( ICoreWebView2Cookie * This, /* [retval][out] */ BOOL *isHttpOnly); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_IsHttpOnly) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsHttpOnly )( ICoreWebView2Cookie * This, /* [in] */ BOOL isHttpOnly); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_SameSite) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SameSite )( ICoreWebView2Cookie * This, /* [retval][out] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND *sameSite); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_SameSite) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SameSite )( ICoreWebView2Cookie * This, /* [in] */ COREWEBVIEW2_COOKIE_SAME_SITE_KIND sameSite); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsSecure) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSecure )( ICoreWebView2Cookie * This, /* [retval][out] */ BOOL *isSecure); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, put_IsSecure) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSecure )( ICoreWebView2Cookie * This, /* [in] */ BOOL isSecure); + DECLSPEC_XFGVIRT(ICoreWebView2Cookie, get_IsSession) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSession )( ICoreWebView2Cookie * This, /* [retval][out] */ BOOL *isSession); @@ -7992,22 +15921,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieList = {0xF7F6F7 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CookieList * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CookieList * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CookieList * This); + DECLSPEC_XFGVIRT(ICoreWebView2CookieList, get_Count) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( ICoreWebView2CookieList * This, /* [retval][out] */ UINT *count); + DECLSPEC_XFGVIRT(ICoreWebView2CookieList, GetValueAtIndex) HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( ICoreWebView2CookieList * This, /* [in] */ UINT index, @@ -8109,18 +16043,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieManager = {0x177 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CookieManager * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CookieManager * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CookieManager * This); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, CreateCookie) HRESULT ( STDMETHODCALLTYPE *CreateCookie )( ICoreWebView2CookieManager * This, /* [in] */ LPCWSTR name, @@ -8129,35 +16067,42 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieManager = {0x177 /* [in] */ LPCWSTR path, /* [retval][out] */ ICoreWebView2Cookie **cookie); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, CopyCookie) HRESULT ( STDMETHODCALLTYPE *CopyCookie )( ICoreWebView2CookieManager * This, /* [in] */ ICoreWebView2Cookie *cookieParam, /* [retval][out] */ ICoreWebView2Cookie **cookie); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, GetCookies) HRESULT ( STDMETHODCALLTYPE *GetCookies )( ICoreWebView2CookieManager * This, /* [in] */ LPCWSTR uri, /* [in] */ ICoreWebView2GetCookiesCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, AddOrUpdateCookie) HRESULT ( STDMETHODCALLTYPE *AddOrUpdateCookie )( ICoreWebView2CookieManager * This, /* [in] */ ICoreWebView2Cookie *cookie); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookie) HRESULT ( STDMETHODCALLTYPE *DeleteCookie )( ICoreWebView2CookieManager * This, /* [in] */ ICoreWebView2Cookie *cookie); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookies) HRESULT ( STDMETHODCALLTYPE *DeleteCookies )( ICoreWebView2CookieManager * This, /* [in] */ LPCWSTR name, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteCookiesWithDomainAndPath) HRESULT ( STDMETHODCALLTYPE *DeleteCookiesWithDomainAndPath )( ICoreWebView2CookieManager * This, /* [in] */ LPCWSTR name, /* [in] */ LPCWSTR domain, /* [in] */ LPCWSTR path); + DECLSPEC_XFGVIRT(ICoreWebView2CookieManager, DeleteAllCookies) HRESULT ( STDMETHODCALLTYPE *DeleteAllCookies )( ICoreWebView2CookieManager * This); @@ -8219,6 +16164,167 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CookieManager = {0x177 #endif /* __ICoreWebView2CookieManager_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Certificate_INTERFACE_DEFINED__ +#define __ICoreWebView2Certificate_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Certificate */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Certificate = {0xC5FB2FCE,0x1CAC,0x4AEE,{0x9C,0x79,0x5E,0xD0,0x36,0x2E,0xAA,0xE0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C5FB2FCE-1CAC-4AEE-9C79-5ED0362EAAE0") + ICoreWebView2Certificate : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Subject( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Issuer( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidFrom( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ValidTo( + /* [retval][out] */ double *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DerEncodedSerialNumber( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DisplayName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE ToPemEncoding( + /* [retval][out] */ LPWSTR *pemEncodedData) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PemEncodedIssuerCertificateChain( + /* [retval][out] */ ICoreWebView2StringCollection **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CertificateVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Certificate * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Certificate * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Certificate * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_Subject) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Subject )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_Issuer) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Issuer )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_ValidFrom) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidFrom )( + ICoreWebView2Certificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_ValidTo) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidTo )( + ICoreWebView2Certificate * This, + /* [retval][out] */ double *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_DerEncodedSerialNumber) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DerEncodedSerialNumber )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_DisplayName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayName )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, ToPemEncoding) + HRESULT ( STDMETHODCALLTYPE *ToPemEncoding )( + ICoreWebView2Certificate * This, + /* [retval][out] */ LPWSTR *pemEncodedData); + + DECLSPEC_XFGVIRT(ICoreWebView2Certificate, get_PemEncodedIssuerCertificateChain) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PemEncodedIssuerCertificateChain )( + ICoreWebView2Certificate * This, + /* [retval][out] */ ICoreWebView2StringCollection **value); + + END_INTERFACE + } ICoreWebView2CertificateVtbl; + + interface ICoreWebView2Certificate + { + CONST_VTBL struct ICoreWebView2CertificateVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Certificate_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Certificate_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Certificate_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Certificate_get_Subject(This,value) \ + ( (This)->lpVtbl -> get_Subject(This,value) ) + +#define ICoreWebView2Certificate_get_Issuer(This,value) \ + ( (This)->lpVtbl -> get_Issuer(This,value) ) + +#define ICoreWebView2Certificate_get_ValidFrom(This,value) \ + ( (This)->lpVtbl -> get_ValidFrom(This,value) ) + +#define ICoreWebView2Certificate_get_ValidTo(This,value) \ + ( (This)->lpVtbl -> get_ValidTo(This,value) ) + +#define ICoreWebView2Certificate_get_DerEncodedSerialNumber(This,value) \ + ( (This)->lpVtbl -> get_DerEncodedSerialNumber(This,value) ) + +#define ICoreWebView2Certificate_get_DisplayName(This,value) \ + ( (This)->lpVtbl -> get_DisplayName(This,value) ) + +#define ICoreWebView2Certificate_ToPemEncoding(This,pemEncodedData) \ + ( (This)->lpVtbl -> ToPemEncoding(This,pemEncodedData) ) + +#define ICoreWebView2Certificate_get_PemEncodedIssuerCertificateChain(This,value) \ + ( (This)->lpVtbl -> get_PemEncodedIssuerCertificateChain(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Certificate_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2ClientCertificate_INTERFACE_DEFINED__ #define __ICoreWebView2ClientCertificate_INTERFACE_DEFINED__ @@ -8270,50 +16376,62 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificate = {0 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ClientCertificate * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ClientCertificate * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ClientCertificate * This); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Subject) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Subject )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Issuer) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Issuer )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_ValidFrom) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidFrom )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ double *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_ValidTo) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ValidTo )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ double *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_DerEncodedSerialNumber) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DerEncodedSerialNumber )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_DisplayName) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayName )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, ToPemEncoding) HRESULT ( STDMETHODCALLTYPE *ToPemEncoding )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ LPWSTR *pemEncodedData); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_PemEncodedIssuerCertificateChain) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PemEncodedIssuerCertificateChain )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ ICoreWebView2StringCollection **value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificate, get_Kind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( ICoreWebView2ClientCertificate * This, /* [retval][out] */ COREWEBVIEW2_CLIENT_CERTIFICATE_KIND *value); @@ -8410,22 +16528,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StringCollection = {0x { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2StringCollection * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2StringCollection * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2StringCollection * This); + DECLSPEC_XFGVIRT(ICoreWebView2StringCollection, get_Count) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( ICoreWebView2StringCollection * This, /* [retval][out] */ UINT *value); + DECLSPEC_XFGVIRT(ICoreWebView2StringCollection, GetValueAtIndex) HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( ICoreWebView2StringCollection * This, /* [in] */ UINT index, @@ -8471,6 +16594,90 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StringCollection = {0x #endif /* __ICoreWebView2StringCollection_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClearBrowsingDataCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClearBrowsingDataCompletedHandler = {0xe9710a06,0x1d1d,0x49b2,{0x82,0x34,0x22,0x6f,0x35,0x84,0x6a,0xe5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e9710a06-1d1d-49b2-8234-226f35846ae5") + ICoreWebView2ClearBrowsingDataCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClearBrowsingDataCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ClearBrowsingDataCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl; + + interface ICoreWebView2ClearBrowsingDataCompletedHandler + { + CONST_VTBL struct ICoreWebView2ClearBrowsingDataCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClearBrowsingDataCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClearBrowsingDataCompletedHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2ClientCertificateCollection_INTERFACE_DEFINED__ #define __ICoreWebView2ClientCertificateCollection_INTERFACE_DEFINED__ @@ -8502,22 +16709,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateColle { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ClientCertificateCollection * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ClientCertificateCollection * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ClientCertificateCollection * This); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateCollection, get_Count) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( ICoreWebView2ClientCertificateCollection * This, /* [retval][out] */ UINT *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateCollection, GetValueAtIndex) HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( ICoreWebView2ClientCertificateCollection * This, /* [in] */ UINT index, @@ -8623,62 +16835,77 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateReque { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ClientCertificateRequestedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ClientCertificateRequestedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Host) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Host )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Port) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Port )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ int *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_IsProxy) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsProxy )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_AllowedCertificateAuthorities) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowedCertificateAuthorities )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2StringCollection **value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_MutuallyTrustedCertificates) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MutuallyTrustedCertificates )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2ClientCertificateCollection **value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_SelectedCertificate) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectedCertificate )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2ClientCertificate **value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_SelectedCertificate) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_SelectedCertificate )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [in] */ ICoreWebView2ClientCertificate *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Cancel) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_Cancel) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2ClientCertificateRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); @@ -8781,18 +17008,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateReque { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ClientCertificateRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ClientCertificateRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ClientCertificateRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ClientCertificateRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ClientCertificateRequestedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -8835,6 +17066,645 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClientCertificateReque #endif /* __ICoreWebView2ClientCertificateRequestedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuItem */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuItem = {0x7aed49e3,0xa93f,0x497a,{0x81,0x1c,0x74,0x9c,0x6b,0x6b,0x6c,0x65}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7aed49e3-a93f-497a-811c-749c6b6b6c65") + ICoreWebView2ContextMenuItem : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Label( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_CommandId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ShortcutKeyDescription( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Icon( + /* [retval][out] */ IStream **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsEnabled( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IsChecked( + /* [in] */ BOOL value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsChecked( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Children( + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_CustomItemSelected( + /* [in] */ ICoreWebView2CustomItemSelectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_CustomItemSelected( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuItemVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuItem * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuItem * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Label) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Label )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_CommandId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CommandId )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_ShortcutKeyDescription) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShortcutKeyDescription )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Icon) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Icon )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ IStream **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, put_IsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsEnabled )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_IsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsEnabled )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, put_IsChecked) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsChecked )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_IsChecked) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsChecked )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, get_Children) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Children )( + ICoreWebView2ContextMenuItem * This, + /* [retval][out] */ ICoreWebView2ContextMenuItemCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, add_CustomItemSelected) + HRESULT ( STDMETHODCALLTYPE *add_CustomItemSelected )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ ICoreWebView2CustomItemSelectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItem, remove_CustomItemSelected) + HRESULT ( STDMETHODCALLTYPE *remove_CustomItemSelected )( + ICoreWebView2ContextMenuItem * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2ContextMenuItemVtbl; + + interface ICoreWebView2ContextMenuItem + { + CONST_VTBL struct ICoreWebView2ContextMenuItemVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuItem_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuItem_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuItem_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuItem_get_Name(This,value) \ + ( (This)->lpVtbl -> get_Name(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Label(This,value) \ + ( (This)->lpVtbl -> get_Label(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_CommandId(This,value) \ + ( (This)->lpVtbl -> get_CommandId(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_ShortcutKeyDescription(This,value) \ + ( (This)->lpVtbl -> get_ShortcutKeyDescription(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Icon(This,value) \ + ( (This)->lpVtbl -> get_Icon(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#define ICoreWebView2ContextMenuItem_put_IsEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsEnabled(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_IsEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsEnabled(This,value) ) + +#define ICoreWebView2ContextMenuItem_put_IsChecked(This,value) \ + ( (This)->lpVtbl -> put_IsChecked(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_IsChecked(This,value) \ + ( (This)->lpVtbl -> get_IsChecked(This,value) ) + +#define ICoreWebView2ContextMenuItem_get_Children(This,value) \ + ( (This)->lpVtbl -> get_Children(This,value) ) + +#define ICoreWebView2ContextMenuItem_add_CustomItemSelected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_CustomItemSelected(This,eventHandler,token) ) + +#define ICoreWebView2ContextMenuItem_remove_CustomItemSelected(This,token) \ + ( (This)->lpVtbl -> remove_CustomItemSelected(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuItem_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuItemCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuItemCollection = {0xf562a2f5,0xc415,0x45cf,{0xb9,0x09,0xd4,0xb7,0xc1,0xe2,0x76,0xd3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f562a2f5-c415-45cf-b909-d4b7c1e276d3") + ICoreWebView2ContextMenuItemCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT32 *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveValueAtIndex( + /* [in] */ UINT32 index) = 0; + + virtual HRESULT STDMETHODCALLTYPE InsertValueAtIndex( + /* [in] */ UINT32 index, + /* [in] */ ICoreWebView2ContextMenuItem *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuItemCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuItemCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuItemCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ContextMenuItemCollection * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ContextMenuItem **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, RemoveValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *RemoveValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuItemCollection, InsertValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *InsertValueAtIndex )( + ICoreWebView2ContextMenuItemCollection * This, + /* [in] */ UINT32 index, + /* [in] */ ICoreWebView2ContextMenuItem *value); + + END_INTERFACE + } ICoreWebView2ContextMenuItemCollectionVtbl; + + interface ICoreWebView2ContextMenuItemCollection + { + CONST_VTBL struct ICoreWebView2ContextMenuItemCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuItemCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuItemCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuItemCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuItemCollection_get_Count(This,value) \ + ( (This)->lpVtbl -> get_Count(This,value) ) + +#define ICoreWebView2ContextMenuItemCollection_GetValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,value) ) + +#define ICoreWebView2ContextMenuItemCollection_RemoveValueAtIndex(This,index) \ + ( (This)->lpVtbl -> RemoveValueAtIndex(This,index) ) + +#define ICoreWebView2ContextMenuItemCollection_InsertValueAtIndex(This,index,value) \ + ( (This)->lpVtbl -> InsertValueAtIndex(This,index,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuItemCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ +#define __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ContextMenuTarget */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContextMenuTarget = {0xb8611d99,0xeed6,0x4f3f,{0x90,0x2c,0xa1,0x98,0x50,0x2a,0xd4,0x72}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b8611d99-eed6-4f3f-902c-a198502ad472") + ICoreWebView2ContextMenuTarget : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsEditable( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsRequestedForMainFrame( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PageUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FrameUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasLinkUri( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LinkUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasLinkText( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LinkText( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasSourceUri( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SourceUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HasSelection( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SelectionText( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ContextMenuTargetVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ContextMenuTarget * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ContextMenuTarget * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ContextMenuTarget * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ COREWEBVIEW2_CONTEXT_MENU_TARGET_KIND *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_IsEditable) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsEditable )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_IsRequestedForMainFrame) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRequestedForMainFrame )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_PageUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_FrameUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasLinkUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasLinkUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_LinkUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LinkUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasLinkText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasLinkText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_LinkText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LinkText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasSourceUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSourceUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_SourceUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SourceUri )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_HasSelection) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSelection )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ContextMenuTarget, get_SelectionText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SelectionText )( + ICoreWebView2ContextMenuTarget * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2ContextMenuTargetVtbl; + + interface ICoreWebView2ContextMenuTarget + { + CONST_VTBL struct ICoreWebView2ContextMenuTargetVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ContextMenuTarget_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ContextMenuTarget_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ContextMenuTarget_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ContextMenuTarget_get_Kind(This,value) \ + ( (This)->lpVtbl -> get_Kind(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_IsEditable(This,value) \ + ( (This)->lpVtbl -> get_IsEditable(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_IsRequestedForMainFrame(This,value) \ + ( (This)->lpVtbl -> get_IsRequestedForMainFrame(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_PageUri(This,value) \ + ( (This)->lpVtbl -> get_PageUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_FrameUri(This,value) \ + ( (This)->lpVtbl -> get_FrameUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasLinkUri(This,value) \ + ( (This)->lpVtbl -> get_HasLinkUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_LinkUri(This,value) \ + ( (This)->lpVtbl -> get_LinkUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasLinkText(This,value) \ + ( (This)->lpVtbl -> get_HasLinkText(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_LinkText(This,value) \ + ( (This)->lpVtbl -> get_LinkText(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasSourceUri(This,value) \ + ( (This)->lpVtbl -> get_HasSourceUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_SourceUri(This,value) \ + ( (This)->lpVtbl -> get_SourceUri(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_HasSelection(This,value) \ + ( (This)->lpVtbl -> get_HasSelection(This,value) ) + +#define ICoreWebView2ContextMenuTarget_get_SelectionText(This,value) \ + ( (This)->lpVtbl -> get_SelectionText(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ContextMenuTarget_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler = {0x3B40AAC6,0xACFE,0x4FFD,{0x82,0x11,0xF6,0x07,0xB9,0x6E,0x2D,0x5B}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3B40AAC6-ACFE-4FFD-8211-F607B96E2D5B") + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler * This, + /* [in] */ HRESULT errorCode); + + END_INTERFACE + } ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl; + + interface ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler + { + CONST_VTBL struct ICoreWebView2ClearServerCertificateErrorActionsCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_Invoke(This,errorCode) \ + ( (This)->lpVtbl -> Invoke(This,errorCode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_INTERFACE_DEFINED__ #define __ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler_INTERFACE_DEFINED__ @@ -8863,18 +17733,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2Comp { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler * This, HRESULT errorCode, @@ -8945,18 +17819,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2Cont { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2ControllerCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CreateCoreWebView2ControllerCompletedHandler * This, HRESULT errorCode, @@ -9027,18 +17905,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CreateCoreWebView2Envi { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler * This, HRESULT errorCode, @@ -9109,18 +17991,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ContainsFullScreenElem { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ContainsFullScreenElementChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ContainsFullScreenElementChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ContainsFullScreenElementChangedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -9191,18 +18077,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CursorChangedEventHand { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2CursorChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2CursorChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2CursorChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2CursorChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2CursorChangedEventHandler * This, /* [in] */ ICoreWebView2CompositionController *sender, @@ -9245,6 +18135,92 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CursorChangedEventHand #endif /* __ICoreWebView2CursorChangedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2CustomItemSelectedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2CustomItemSelectedEventHandler = {0x49e1d0bc,0xfe9e,0x4481,{0xb7,0xc2,0x32,0x32,0x4a,0xa2,0x19,0x98}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("49e1d0bc-fe9e-4481-b7c2-32324aa21998") + ICoreWebView2CustomItemSelectedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2ContextMenuItem *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2CustomItemSelectedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2CustomItemSelectedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2CustomItemSelectedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2CustomItemSelectedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2CustomItemSelectedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2CustomItemSelectedEventHandler * This, + /* [in] */ ICoreWebView2ContextMenuItem *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2CustomItemSelectedEventHandlerVtbl; + + interface ICoreWebView2CustomItemSelectedEventHandler + { + CONST_VTBL struct ICoreWebView2CustomItemSelectedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2CustomItemSelectedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2CustomItemSelectedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2CustomItemSelectedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2CustomItemSelectedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2CustomItemSelectedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2DocumentTitleChangedEventHandler_INTERFACE_DEFINED__ @@ -9273,18 +18249,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DocumentTitleChangedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DocumentTitleChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DocumentTitleChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DocumentTitleChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2DocumentTitleChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2DocumentTitleChangedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -9354,18 +18334,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DOMContentLoadedEventA { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DOMContentLoadedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DOMContentLoadedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DOMContentLoadedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2DOMContentLoadedEventArgs, get_NavigationId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( ICoreWebView2DOMContentLoadedEventArgs * This, /* [retval][out] */ UINT64 *navigationId); @@ -9435,18 +18419,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DOMContentLoadedEventH { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DOMContentLoadedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DOMContentLoadedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DOMContentLoadedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2DOMContentLoadedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2DOMContentLoadedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -9515,18 +18503,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Deferral = {0xc10e7f7b { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Deferral * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Deferral * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Deferral * This); + DECLSPEC_XFGVIRT(ICoreWebView2Deferral, Complete) HRESULT ( STDMETHODCALLTYPE *Complete )( ICoreWebView2Deferral * This); @@ -9594,18 +18586,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventR { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs, get_ParameterObjectAsJson) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParameterObjectAsJson )( ICoreWebView2DevToolsProtocolEventReceivedEventArgs * This, /* [retval][out] */ LPWSTR *parameterObjectAsJson); @@ -9647,6 +18643,99 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventR #endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 = {0x2DC4959D,0x1494,0x4393,{0x95,0xBA,0xBE,0xA4,0xCB,0x9E,0xBD,0x1B}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2DC4959D-1494-4393-95BA-BEA4CB9EBD1B") + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 : public ICoreWebView2DevToolsProtocolEventReceivedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SessionId( + /* [retval][out] */ LPWSTR *sessionId) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs, get_ParameterObjectAsJson) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ParameterObjectAsJson )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *parameterObjectAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventArgs2, get_SessionId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SessionId )( + ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 * This, + /* [retval][out] */ LPWSTR *sessionId); + + END_INTERFACE + } ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl; + + interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs2 + { + CONST_VTBL struct ICoreWebView2DevToolsProtocolEventReceivedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_get_ParameterObjectAsJson(This,parameterObjectAsJson) \ + ( (This)->lpVtbl -> get_ParameterObjectAsJson(This,parameterObjectAsJson) ) + + +#define ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_get_SessionId(This,sessionId) \ + ( (This)->lpVtbl -> get_SessionId(This,sessionId) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2DevToolsProtocolEventReceivedEventArgs2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2DevToolsProtocolEventReceivedEventHandler_INTERFACE_DEFINED__ @@ -9675,18 +18764,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventR { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceivedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2DevToolsProtocolEventReceivedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -9760,23 +18853,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DevToolsProtocolEventR { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DevToolsProtocolEventReceiver * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DevToolsProtocolEventReceiver * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DevToolsProtocolEventReceiver * This); + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceiver, add_DevToolsProtocolEventReceived) HRESULT ( STDMETHODCALLTYPE *add_DevToolsProtocolEventReceived )( ICoreWebView2DevToolsProtocolEventReceiver * This, /* [in] */ ICoreWebView2DevToolsProtocolEventReceivedEventHandler *handler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2DevToolsProtocolEventReceiver, remove_DevToolsProtocolEventReceived) HRESULT ( STDMETHODCALLTYPE *remove_DevToolsProtocolEventReceived )( ICoreWebView2DevToolsProtocolEventReceiver * This, /* [in] */ EventRegistrationToken token); @@ -9902,90 +19000,112 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadOperation = {0 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DownloadOperation * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DownloadOperation * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DownloadOperation * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_BytesReceivedChanged) HRESULT ( STDMETHODCALLTYPE *add_BytesReceivedChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ ICoreWebView2BytesReceivedChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_BytesReceivedChanged) HRESULT ( STDMETHODCALLTYPE *remove_BytesReceivedChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_EstimatedEndTimeChanged) HRESULT ( STDMETHODCALLTYPE *add_EstimatedEndTimeChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ ICoreWebView2EstimatedEndTimeChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_EstimatedEndTimeChanged) HRESULT ( STDMETHODCALLTYPE *remove_EstimatedEndTimeChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, add_StateChanged) HRESULT ( STDMETHODCALLTYPE *add_StateChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ ICoreWebView2StateChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, remove_StateChanged) HRESULT ( STDMETHODCALLTYPE *remove_StateChanged )( ICoreWebView2DownloadOperation * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_ContentDisposition) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContentDisposition )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ LPWSTR *contentDisposition); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_MimeType) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MimeType )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ LPWSTR *mimeType); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_TotalBytesToReceive) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TotalBytesToReceive )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ INT64 *totalBytesToReceive); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_BytesReceived) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BytesReceived )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ INT64 *bytesReceived); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_EstimatedEndTime) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_EstimatedEndTime )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ LPWSTR *estimatedEndTime); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_ResultFilePath) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultFilePath )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ LPWSTR *resultFilePath); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_State) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_STATE *downloadState); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_InterruptReason) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_InterruptReason )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON *interruptReason); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Cancel) HRESULT ( STDMETHODCALLTYPE *Cancel )( ICoreWebView2DownloadOperation * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Pause) HRESULT ( STDMETHODCALLTYPE *Pause )( ICoreWebView2DownloadOperation * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, Resume) HRESULT ( STDMETHODCALLTYPE *Resume )( ICoreWebView2DownloadOperation * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadOperation, get_CanResume) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanResume )( ICoreWebView2DownloadOperation * This, /* [retval][out] */ BOOL *canResume); @@ -10129,46 +19249,57 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadStartingEventA { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DownloadStartingEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DownloadStartingEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DownloadStartingEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_DownloadOperation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DownloadOperation )( ICoreWebView2DownloadStartingEventArgs * This, /* [retval][out] */ ICoreWebView2DownloadOperation **downloadOperation); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_Cancel) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( ICoreWebView2DownloadStartingEventArgs * This, /* [retval][out] */ BOOL *cancel); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_Cancel) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( ICoreWebView2DownloadStartingEventArgs * This, /* [in] */ BOOL cancel); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_ResultFilePath) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultFilePath )( ICoreWebView2DownloadStartingEventArgs * This, /* [retval][out] */ LPWSTR *resultFilePath); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_ResultFilePath) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ResultFilePath )( ICoreWebView2DownloadStartingEventArgs * This, /* [in] */ LPCWSTR resultFilePath); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2DownloadStartingEventArgs * This, /* [retval][out] */ BOOL *handled); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2DownloadStartingEventArgs * This, /* [in] */ BOOL handled); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2DownloadStartingEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); @@ -10259,18 +19390,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2DownloadStartingEventH { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2DownloadStartingEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2DownloadStartingEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2DownloadStartingEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2DownloadStartingEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2DownloadStartingEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -10358,23 +19493,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment = {0xb96d7 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment * This, /* [in] */ IStream *content, @@ -10383,15 +19523,18 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment = {0xb96d7 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment * This, /* [in] */ EventRegistrationToken token); @@ -10476,23 +19619,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment2 = {0x41F3 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment2 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment2 * This, /* [in] */ IStream *content, @@ -10501,19 +19649,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment2 = {0x41F3 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment2 * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment2 * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment2 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( ICoreWebView2Environment2 * This, /* [in] */ LPCWSTR uri, @@ -10606,23 +19758,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment3 = {0x80a2 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment3 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment3 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment3 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment3 * This, /* [in] */ IStream *content, @@ -10631,19 +19788,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment3 = {0x80a2 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment3 * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment3 * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment3 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( ICoreWebView2Environment3 * This, /* [in] */ LPCWSTR uri, @@ -10652,11 +19813,13 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment3 = {0x80a2 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( ICoreWebView2Environment3 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( ICoreWebView2Environment3 * This, /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); @@ -10736,7 +19899,7 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x2094 ICoreWebView2Environment4 : public ICoreWebView2Environment3 { public: - virtual HRESULT STDMETHODCALLTYPE GetProviderForHwnd( + virtual HRESULT STDMETHODCALLTYPE GetAutomationProviderForWindow( /* [in] */ HWND hwnd, /* [retval][out] */ IUnknown **provider) = 0; @@ -10749,23 +19912,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x2094 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment4 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment4 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment4 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment4 * This, /* [in] */ IStream *content, @@ -10774,19 +19942,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x2094 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment4 * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment4 * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment4 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( ICoreWebView2Environment4 * This, /* [in] */ LPCWSTR uri, @@ -10795,16 +19967,19 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x2094 /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( ICoreWebView2Environment4 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( ICoreWebView2Environment4 * This, /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); - HRESULT ( STDMETHODCALLTYPE *GetProviderForHwnd )( + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( ICoreWebView2Environment4 * This, /* [in] */ HWND hwnd, /* [retval][out] */ IUnknown **provider); @@ -10859,8 +20034,8 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment4 = {0x2094 ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) -#define ICoreWebView2Environment4_GetProviderForHwnd(This,hwnd,provider) \ - ( (This)->lpVtbl -> GetProviderForHwnd(This,hwnd,provider) ) +#define ICoreWebView2Environment4_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) #endif /* COBJMACROS */ @@ -10904,23 +20079,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment5 = {0x319e { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment5 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment5 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment5 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment5 * This, /* [in] */ IStream *content, @@ -10929,19 +20109,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment5 = {0x319e /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment5 * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment5 * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment5 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( ICoreWebView2Environment5 * This, /* [in] */ LPCWSTR uri, @@ -10950,25 +20134,30 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment5 = {0x319e /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( ICoreWebView2Environment5 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( ICoreWebView2Environment5 * This, /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); - HRESULT ( STDMETHODCALLTYPE *GetProviderForHwnd )( + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( ICoreWebView2Environment5 * This, /* [in] */ HWND hwnd, /* [retval][out] */ IUnknown **provider); + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( ICoreWebView2Environment5 * This, /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( ICoreWebView2Environment5 * This, /* [in] */ EventRegistrationToken token); @@ -11023,8 +20212,8 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment5 = {0x319e ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) -#define ICoreWebView2Environment5_GetProviderForHwnd(This,hwnd,provider) \ - ( (This)->lpVtbl -> GetProviderForHwnd(This,hwnd,provider) ) +#define ICoreWebView2Environment5_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) #define ICoreWebView2Environment5_add_BrowserProcessExited(This,eventHandler,token) \ @@ -11071,23 +20260,28 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59e { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Environment6 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Environment6 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Environment6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( ICoreWebView2Environment6 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( ICoreWebView2Environment6 * This, /* [in] */ IStream *content, @@ -11096,19 +20290,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59e /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( ICoreWebView2Environment6 * This, /* [retval][out] */ LPWSTR *versionInfo); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( ICoreWebView2Environment6 * This, /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( ICoreWebView2Environment6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( ICoreWebView2Environment6 * This, /* [in] */ LPCWSTR uri, @@ -11117,29 +20315,35 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59e /* [in] */ LPCWSTR headers, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( ICoreWebView2Environment6 * This, HWND parentWindow, ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( ICoreWebView2Environment6 * This, /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); - HRESULT ( STDMETHODCALLTYPE *GetProviderForHwnd )( + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( ICoreWebView2Environment6 * This, /* [in] */ HWND hwnd, /* [retval][out] */ IUnknown **provider); + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( ICoreWebView2Environment6 * This, /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( ICoreWebView2Environment6 * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( ICoreWebView2Environment6 * This, /* [retval][out] */ ICoreWebView2PrintSettings **printSettings); @@ -11194,8 +20398,8 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59e ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) -#define ICoreWebView2Environment6_GetProviderForHwnd(This,hwnd,provider) \ - ( (This)->lpVtbl -> GetProviderForHwnd(This,hwnd,provider) ) +#define ICoreWebView2Environment6_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) #define ICoreWebView2Environment6_add_BrowserProcessExited(This,eventHandler,token) \ @@ -11219,6 +20423,953 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment6 = {0xe59e #endif /* __ICoreWebView2Environment6_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Environment7_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment7 = {0x43C22296,0x3BBD,0x43A4,{0x9C,0x00,0x5C,0x0D,0xF6,0xDD,0x29,0xA2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("43C22296-3BBD-43A4-9C00-5C0DF6DD29A2") + ICoreWebView2Environment7 : public ICoreWebView2Environment6 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_UserDataFolder( + /* [retval][out] */ LPWSTR *value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment7 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment7 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment7 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment7 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment7 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment7 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **provider); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment7 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment7 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **printSettings); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment7 * This, + /* [retval][out] */ LPWSTR *value); + + END_INTERFACE + } ICoreWebView2Environment7Vtbl; + + interface ICoreWebView2Environment7 + { + CONST_VTBL struct ICoreWebView2Environment7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment7_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment7_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment7_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment7_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment7_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment7_CreateWebResourceRequest(This,uri,method,postData,headers,request) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,method,postData,headers,request) ) + + +#define ICoreWebView2Environment7_CreateCoreWebView2CompositionController(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,parentWindow,handler) ) + +#define ICoreWebView2Environment7_CreateCoreWebView2PointerInfo(This,pointerInfo) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) + + +#define ICoreWebView2Environment7_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) + + +#define ICoreWebView2Environment7_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment7_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment7_CreatePrintSettings(This,printSettings) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,printSettings) ) + + +#define ICoreWebView2Environment7_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment7_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment8_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment8_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment8 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment8 = {0xD6EB91DD,0xC3D2,0x45E5,{0xBD,0x29,0x6D,0xC2,0xBC,0x4D,0xE9,0xCF}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("D6EB91DD-C3D2-45E5-BD29-6DC2BC4DE9CF") + ICoreWebView2Environment8 : public ICoreWebView2Environment7 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ProcessInfosChanged( + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ProcessInfosChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetProcessInfos( + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment8Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment8 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment8 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment8 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment8 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment8 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment8 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment8 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment8 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **provider); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **printSettings); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment8 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment8 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment8 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + END_INTERFACE + } ICoreWebView2Environment8Vtbl; + + interface ICoreWebView2Environment8 + { + CONST_VTBL struct ICoreWebView2Environment8Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment8_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment8_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment8_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment8_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment8_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment8_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment8_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment8_CreateWebResourceRequest(This,uri,method,postData,headers,request) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,method,postData,headers,request) ) + + +#define ICoreWebView2Environment8_CreateCoreWebView2CompositionController(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,parentWindow,handler) ) + +#define ICoreWebView2Environment8_CreateCoreWebView2PointerInfo(This,pointerInfo) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) + + +#define ICoreWebView2Environment8_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) + + +#define ICoreWebView2Environment8_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment8_CreatePrintSettings(This,printSettings) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,printSettings) ) + + +#define ICoreWebView2Environment8_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment8_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment8_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment8_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment8_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment9_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment9_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment9 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment9 = {0xf06f41bf,0x4b5a,0x49d8,{0xb9,0xf6,0xfa,0x16,0xcd,0x29,0xf2,0x74}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f06f41bf-4b5a-49d8-b9f6-fa16cd29f274") + ICoreWebView2Environment9 : public ICoreWebView2Environment8 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateContextMenuItem( + /* [in] */ LPCWSTR label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **item) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment9Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment9 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment9 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment9 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment9 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment9 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment9 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment9 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **provider); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **printSettings); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment9 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment9 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment9 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment9 * This, + /* [in] */ LPCWSTR label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **item); + + END_INTERFACE + } ICoreWebView2Environment9Vtbl; + + interface ICoreWebView2Environment9 + { + CONST_VTBL struct ICoreWebView2Environment9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment9_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment9_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment9_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment9_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment9_CreateWebResourceRequest(This,uri,method,postData,headers,request) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,method,postData,headers,request) ) + + +#define ICoreWebView2Environment9_CreateCoreWebView2CompositionController(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,parentWindow,handler) ) + +#define ICoreWebView2Environment9_CreateCoreWebView2PointerInfo(This,pointerInfo) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) + + +#define ICoreWebView2Environment9_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) + + +#define ICoreWebView2Environment9_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment9_CreatePrintSettings(This,printSettings) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,printSettings) ) + + +#define ICoreWebView2Environment9_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment9_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment9_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment9_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment9_CreateContextMenuItem(This,label,iconStream,kind,item) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,label,iconStream,kind,item) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment9_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Environment10_INTERFACE_DEFINED__ +#define __ICoreWebView2Environment10_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Environment10 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Environment10 = {0xee0eb9df,0x6f12,0x46ce,{0xb5,0x3f,0x3f,0x47,0xb9,0xc9,0x28,0xe0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ee0eb9df-6f12-46ce-b53f-3f47b9c928e0") + ICoreWebView2Environment10 : public ICoreWebView2Environment9 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2ControllerOptions( + /* [retval][out] */ ICoreWebView2ControllerOptions **options) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2ControllerWithOptions( + /* [in] */ HWND parentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCoreWebView2CompositionControllerWithOptions( + /* [in] */ HWND parentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Environment10Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Environment10 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Environment10 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Environment10 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateCoreWebView2Controller) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2Controller )( + ICoreWebView2Environment10 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, CreateWebResourceResponse) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceResponse )( + ICoreWebView2Environment10 * This, + /* [in] */ IStream *content, + /* [in] */ int statusCode, + /* [in] */ LPCWSTR reasonPhrase, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, get_BrowserVersionString) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserVersionString )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ LPWSTR *versionInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, add_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *add_NewBrowserVersionAvailable )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2NewBrowserVersionAvailableEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment, remove_NewBrowserVersionAvailable) + HRESULT ( STDMETHODCALLTYPE *remove_NewBrowserVersionAvailable )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment2, CreateWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *CreateWebResourceRequest )( + ICoreWebView2Environment10 * This, + /* [in] */ LPCWSTR uri, + /* [in] */ LPCWSTR method, + /* [in] */ IStream *postData, + /* [in] */ LPCWSTR headers, + /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2CompositionController) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionController )( + ICoreWebView2Environment10 * This, + HWND parentWindow, + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment3, CreateCoreWebView2PointerInfo) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2PointerInfo )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2PointerInfo **pointerInfo); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment4, GetAutomationProviderForWindow) + HRESULT ( STDMETHODCALLTYPE *GetAutomationProviderForWindow )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND hwnd, + /* [retval][out] */ IUnknown **provider); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, add_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *add_BrowserProcessExited )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2BrowserProcessExitedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment5, remove_BrowserProcessExited) + HRESULT ( STDMETHODCALLTYPE *remove_BrowserProcessExited )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment6, CreatePrintSettings) + HRESULT ( STDMETHODCALLTYPE *CreatePrintSettings )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2PrintSettings **printSettings); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment7, get_UserDataFolder) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserDataFolder )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, add_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *add_ProcessInfosChanged )( + ICoreWebView2Environment10 * This, + /* [in] */ ICoreWebView2ProcessInfosChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, remove_ProcessInfosChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessInfosChanged )( + ICoreWebView2Environment10 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment8, GetProcessInfos) + HRESULT ( STDMETHODCALLTYPE *GetProcessInfos )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2ProcessInfoCollection **value); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment9, CreateContextMenuItem) + HRESULT ( STDMETHODCALLTYPE *CreateContextMenuItem )( + ICoreWebView2Environment10 * This, + /* [in] */ LPCWSTR label, + /* [in] */ IStream *iconStream, + /* [in] */ COREWEBVIEW2_CONTEXT_MENU_ITEM_KIND kind, + /* [retval][out] */ ICoreWebView2ContextMenuItem **item); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerOptions )( + ICoreWebView2Environment10 * This, + /* [retval][out] */ ICoreWebView2ControllerOptions **options); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2ControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2ControllerWithOptions )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND parentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2ControllerCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Environment10, CreateCoreWebView2CompositionControllerWithOptions) + HRESULT ( STDMETHODCALLTYPE *CreateCoreWebView2CompositionControllerWithOptions )( + ICoreWebView2Environment10 * This, + /* [in] */ HWND parentWindow, + /* [in] */ ICoreWebView2ControllerOptions *options, + /* [in] */ ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Environment10Vtbl; + + interface ICoreWebView2Environment10 + { + CONST_VTBL struct ICoreWebView2Environment10Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Environment10_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Environment10_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Environment10_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2Controller(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2Controller(This,parentWindow,handler) ) + +#define ICoreWebView2Environment10_CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) \ + ( (This)->lpVtbl -> CreateWebResourceResponse(This,content,statusCode,reasonPhrase,headers,response) ) + +#define ICoreWebView2Environment10_get_BrowserVersionString(This,versionInfo) \ + ( (This)->lpVtbl -> get_BrowserVersionString(This,versionInfo) ) + +#define ICoreWebView2Environment10_add_NewBrowserVersionAvailable(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewBrowserVersionAvailable(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_NewBrowserVersionAvailable(This,token) \ + ( (This)->lpVtbl -> remove_NewBrowserVersionAvailable(This,token) ) + + +#define ICoreWebView2Environment10_CreateWebResourceRequest(This,uri,method,postData,headers,request) \ + ( (This)->lpVtbl -> CreateWebResourceRequest(This,uri,method,postData,headers,request) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2CompositionController(This,parentWindow,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionController(This,parentWindow,handler) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2PointerInfo(This,pointerInfo) \ + ( (This)->lpVtbl -> CreateCoreWebView2PointerInfo(This,pointerInfo) ) + + +#define ICoreWebView2Environment10_GetAutomationProviderForWindow(This,hwnd,provider) \ + ( (This)->lpVtbl -> GetAutomationProviderForWindow(This,hwnd,provider) ) + + +#define ICoreWebView2Environment10_add_BrowserProcessExited(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BrowserProcessExited(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_BrowserProcessExited(This,token) \ + ( (This)->lpVtbl -> remove_BrowserProcessExited(This,token) ) + + +#define ICoreWebView2Environment10_CreatePrintSettings(This,printSettings) \ + ( (This)->lpVtbl -> CreatePrintSettings(This,printSettings) ) + + +#define ICoreWebView2Environment10_get_UserDataFolder(This,value) \ + ( (This)->lpVtbl -> get_UserDataFolder(This,value) ) + + +#define ICoreWebView2Environment10_add_ProcessInfosChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessInfosChanged(This,eventHandler,token) ) + +#define ICoreWebView2Environment10_remove_ProcessInfosChanged(This,token) \ + ( (This)->lpVtbl -> remove_ProcessInfosChanged(This,token) ) + +#define ICoreWebView2Environment10_GetProcessInfos(This,value) \ + ( (This)->lpVtbl -> GetProcessInfos(This,value) ) + + +#define ICoreWebView2Environment10_CreateContextMenuItem(This,label,iconStream,kind,item) \ + ( (This)->lpVtbl -> CreateContextMenuItem(This,label,iconStream,kind,item) ) + + +#define ICoreWebView2Environment10_CreateCoreWebView2ControllerOptions(This,options) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerOptions(This,options) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2ControllerWithOptions(This,parentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2ControllerWithOptions(This,parentWindow,options,handler) ) + +#define ICoreWebView2Environment10_CreateCoreWebView2CompositionControllerWithOptions(This,parentWindow,options,handler) \ + ( (This)->lpVtbl -> CreateCoreWebView2CompositionControllerWithOptions(This,parentWindow,options,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Environment10_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ #define __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ @@ -11267,46 +21418,57 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions = { { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2EnvironmentOptions * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2EnvironmentOptions * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2EnvironmentOptions * This); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_AdditionalBrowserArguments) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalBrowserArguments )( ICoreWebView2EnvironmentOptions * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_AdditionalBrowserArguments) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalBrowserArguments )( ICoreWebView2EnvironmentOptions * This, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_Language) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Language )( ICoreWebView2EnvironmentOptions * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_Language) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Language )( ICoreWebView2EnvironmentOptions * This, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_TargetCompatibleBrowserVersion) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TargetCompatibleBrowserVersion )( ICoreWebView2EnvironmentOptions * This, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_TargetCompatibleBrowserVersion) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TargetCompatibleBrowserVersion )( ICoreWebView2EnvironmentOptions * This, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, get_AllowSingleSignOnUsingOSPrimaryAccount) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AllowSingleSignOnUsingOSPrimaryAccount )( ICoreWebView2EnvironmentOptions * This, /* [retval][out] */ BOOL *allow); + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions, put_AllowSingleSignOnUsingOSPrimaryAccount) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AllowSingleSignOnUsingOSPrimaryAccount )( ICoreWebView2EnvironmentOptions * This, /* [in] */ BOOL allow); @@ -11369,6 +21531,101 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions = { #endif /* __ICoreWebView2EnvironmentOptions_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ +#define __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2EnvironmentOptions2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EnvironmentOptions2 = {0xFF85C98A,0x1BA7,0x4A6B,{0x90,0xC8,0x2B,0x75,0x2C,0x89,0xE9,0xE2}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("FF85C98A-1BA7-4A6B-90C8-2B752C89E9E2") + ICoreWebView2EnvironmentOptions2 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ExclusiveUserDataFolderAccess( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ExclusiveUserDataFolderAccess( + /* [in] */ BOOL value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2EnvironmentOptions2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2EnvironmentOptions2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2EnvironmentOptions2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2EnvironmentOptions2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions2, get_ExclusiveUserDataFolderAccess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ExclusiveUserDataFolderAccess )( + ICoreWebView2EnvironmentOptions2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2EnvironmentOptions2, put_ExclusiveUserDataFolderAccess) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ExclusiveUserDataFolderAccess )( + ICoreWebView2EnvironmentOptions2 * This, + /* [in] */ BOOL value); + + END_INTERFACE + } ICoreWebView2EnvironmentOptions2Vtbl; + + interface ICoreWebView2EnvironmentOptions2 + { + CONST_VTBL struct ICoreWebView2EnvironmentOptions2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2EnvironmentOptions2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2EnvironmentOptions2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2EnvironmentOptions2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2EnvironmentOptions2_get_ExclusiveUserDataFolderAccess(This,value) \ + ( (This)->lpVtbl -> get_ExclusiveUserDataFolderAccess(This,value) ) + +#define ICoreWebView2EnvironmentOptions2_put_ExclusiveUserDataFolderAccess(This,value) \ + ( (This)->lpVtbl -> put_ExclusiveUserDataFolderAccess(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2EnvironmentOptions2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2EstimatedEndTimeChangedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2EstimatedEndTimeChangedEventHandler_INTERFACE_DEFINED__ @@ -11397,18 +21654,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2EstimatedEndTimeChange { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2EstimatedEndTimeChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2EstimatedEndTimeChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2EstimatedEndTimeChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2EstimatedEndTimeChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2EstimatedEndTimeChangedEventHandler * This, /* [in] */ ICoreWebView2DownloadOperation *sender, @@ -11479,18 +21740,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ExecuteScriptCompleted { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ExecuteScriptCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ExecuteScriptCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ExecuteScriptCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ExecuteScriptCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ExecuteScriptCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -11586,31 +21851,38 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame = {0xf1131a5e,0x { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Frame * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Frame * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Frame * This); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( ICoreWebView2Frame * This, /* [retval][out] */ LPWSTR *name); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( ICoreWebView2Frame * This, /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( ICoreWebView2Frame * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( ICoreWebView2Frame * This, /* [in] */ LPCWSTR name, @@ -11618,19 +21890,23 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame = {0xf1131a5e,0x /* [in] */ UINT32 originsCount, /* [size_is][in] */ LPCWSTR *origins); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( ICoreWebView2Frame * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( ICoreWebView2Frame * This, /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, /* [out] */ EventRegistrationToken *token); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( ICoreWebView2Frame * This, /* [in] */ EventRegistrationToken token); + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( ICoreWebView2Frame * This, /* [retval][out] */ BOOL *destroyed); @@ -11693,6 +21969,668 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame = {0xf1131a5e,0x #endif /* __ICoreWebView2Frame_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Frame2_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame2 = {0x7a6a5834,0xd185,0x4dbf,{0xb6,0x3f,0x4a,0x9b,0xc4,0x31,0x07,0xd4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7a6a5834-d185-4dbf-b63f-4a9bc43107d4") + ICoreWebView2Frame2 : public ICoreWebView2Frame + { + public: + virtual HRESULT STDMETHODCALLTYPE add_NavigationStarting( + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationStarting( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_ContentLoading( + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ContentLoading( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_NavigationCompleted( + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_NavigationCompleted( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_DOMContentLoaded( + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_DOMContentLoaded( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ExecuteScript( + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsJson( + /* [in] */ LPCWSTR webMessageAsJson) = 0; + + virtual HRESULT STDMETHODCALLTYPE PostWebMessageAsString( + /* [in] */ LPCWSTR webMessageAsString) = 0; + + virtual HRESULT STDMETHODCALLTYPE add_WebMessageReceived( + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_WebMessageReceived( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame2 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame2 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame2 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame2 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame2 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame2Vtbl; + + interface ICoreWebView2Frame2 + { + CONST_VTBL struct ICoreWebView2Frame2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame2_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame2_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame2_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame2_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame2_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame2_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame2_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame2_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame2_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame2_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame2_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame2_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame2_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame2_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame2_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame2_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame2_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Frame3_INTERFACE_DEFINED__ +#define __ICoreWebView2Frame3_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Frame3 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Frame3 = {0xb50d82cc,0xcc28,0x481d,{0x96,0x14,0xcb,0x04,0x88,0x95,0xe6,0xa0}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b50d82cc-cc28-481d-9614-cb048895e6a0") + ICoreWebView2Frame3 : public ICoreWebView2Frame2 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_PermissionRequested( + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *handler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_PermissionRequested( + /* [in] */ EventRegistrationToken token) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Frame3Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Frame3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Frame3 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Frame3 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, get_Name) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( + ICoreWebView2Frame3 * This, + /* [retval][out] */ LPWSTR *name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_NameChanged) + HRESULT ( STDMETHODCALLTYPE *add_NameChanged )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNameChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_NameChanged) + HRESULT ( STDMETHODCALLTYPE *remove_NameChanged )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, AddHostObjectToScriptWithOrigins) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScriptWithOrigins )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object, + /* [in] */ UINT32 originsCount, + /* [size_is][in] */ LPCWSTR *origins); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, add_Destroyed) + HRESULT ( STDMETHODCALLTYPE *add_Destroyed )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameDestroyedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, remove_Destroyed) + HRESULT ( STDMETHODCALLTYPE *remove_Destroyed )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame, IsDestroyed) + HRESULT ( STDMETHODCALLTYPE *IsDestroyed )( + ICoreWebView2Frame3 * This, + /* [retval][out] */ BOOL *destroyed); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameNavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameDOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2Frame3 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FrameWebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2Frame3 * This, + /* [in] */ ICoreWebView2FramePermissionRequestedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2Frame3, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2Frame3 * This, + /* [in] */ EventRegistrationToken token); + + END_INTERFACE + } ICoreWebView2Frame3Vtbl; + + interface ICoreWebView2Frame3 + { + CONST_VTBL struct ICoreWebView2Frame3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Frame3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Frame3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Frame3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Frame3_get_Name(This,name) \ + ( (This)->lpVtbl -> get_Name(This,name) ) + +#define ICoreWebView2Frame3_add_NameChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NameChanged(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NameChanged(This,token) \ + ( (This)->lpVtbl -> remove_NameChanged(This,token) ) + +#define ICoreWebView2Frame3_AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) \ + ( (This)->lpVtbl -> AddHostObjectToScriptWithOrigins(This,name,object,originsCount,origins) ) + +#define ICoreWebView2Frame3_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2Frame3_add_Destroyed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_Destroyed(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_Destroyed(This,token) \ + ( (This)->lpVtbl -> remove_Destroyed(This,token) ) + +#define ICoreWebView2Frame3_IsDestroyed(This,destroyed) \ + ( (This)->lpVtbl -> IsDestroyed(This,destroyed) ) + + +#define ICoreWebView2Frame3_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2Frame3_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2Frame3_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2Frame3_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2Frame3_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2Frame3_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2Frame3_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2Frame3_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2Frame3_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2Frame3_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + + +#define ICoreWebView2Frame3_add_PermissionRequested(This,handler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,handler,token) ) + +#define ICoreWebView2Frame3_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Frame3_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameContentLoadingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameContentLoadingEventHandler = {0x0d6156f2,0xd332,0x49a7,{0x9e,0x03,0x7d,0x8f,0x2f,0xee,0xee,0x54}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0d6156f2-d332-49a7-9e03-7d8f2feeee54") + ICoreWebView2FrameContentLoadingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameContentLoadingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameContentLoadingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameContentLoadingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameContentLoadingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameContentLoadingEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2ContentLoadingEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameContentLoadingEventHandlerVtbl; + + interface ICoreWebView2FrameContentLoadingEventHandler + { + CONST_VTBL struct ICoreWebView2FrameContentLoadingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameContentLoadingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameContentLoadingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameContentLoadingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameContentLoadingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameContentLoadingEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2FrameCreatedEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2FrameCreatedEventArgs_INTERFACE_DEFINED__ @@ -11720,18 +22658,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameCreatedEventArgs { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameCreatedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameCreatedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameCreatedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameCreatedEventArgs, get_Frame) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Frame )( ICoreWebView2FrameCreatedEventArgs * This, /* [retval][out] */ ICoreWebView2Frame **frame); @@ -11801,18 +22743,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameCreatedEventHandl { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameCreatedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameCreatedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameCreatedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameCreatedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2FrameCreatedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -11883,18 +22829,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDestroyedEventHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameDestroyedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameDestroyedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameDestroyedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameDestroyedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2FrameDestroyedEventHandler * This, /* [in] */ ICoreWebView2Frame *sender, @@ -11937,6 +22887,92 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDestroyedEventHan #endif /* __ICoreWebView2FrameDestroyedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameDOMContentLoadedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameDOMContentLoadedEventHandler = {0x38d9520d,0x340f,0x4d1e,{0xa7,0x75,0x43,0xfc,0xe9,0x75,0x36,0x83}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("38d9520d-340f-4d1e-a775-43fce9753683") + ICoreWebView2FrameDOMContentLoadedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameDOMContentLoadedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameDOMContentLoadedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2DOMContentLoadedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl; + + interface ICoreWebView2FrameDOMContentLoadedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameDOMContentLoadedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameDOMContentLoadedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameDOMContentLoadedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ @@ -11965,18 +23001,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNameChangedEventH { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameNameChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameNameChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameNameChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameNameChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2FrameNameChangedEventHandler * This, /* [in] */ ICoreWebView2Frame *sender, @@ -12019,6 +23059,350 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNameChangedEventH #endif /* __ICoreWebView2FrameNameChangedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameNavigationCompletedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNavigationCompletedEventHandler = {0x609302ad,0x0e36,0x4f9a,{0xa2,0x10,0x6a,0x45,0x27,0x28,0x42,0xa9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("609302ad-0e36-4f9a-a210-6a45272842a9") + ICoreWebView2FrameNavigationCompletedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameNavigationCompletedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameNavigationCompletedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameNavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameNavigationCompletedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameNavigationCompletedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameNavigationCompletedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationCompletedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameNavigationCompletedEventHandlerVtbl; + + interface ICoreWebView2FrameNavigationCompletedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameNavigationCompletedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameNavigationCompletedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameNavigationCompletedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameNavigationCompletedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameNavigationCompletedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameNavigationCompletedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameNavigationStartingEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameNavigationStartingEventHandler = {0xe79908bf,0x2d5d,0x4968,{0x83,0xdb,0x26,0x3f,0xea,0x2c,0x1d,0xa3}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e79908bf-2d5d-4968-83db-263fea2c1da3") + ICoreWebView2FrameNavigationStartingEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameNavigationStartingEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameNavigationStartingEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameNavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameNavigationStartingEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameNavigationStartingEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameNavigationStartingEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2NavigationStartingEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameNavigationStartingEventHandlerVtbl; + + interface ICoreWebView2FrameNavigationStartingEventHandler + { + CONST_VTBL struct ICoreWebView2FrameNavigationStartingEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameNavigationStartingEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameNavigationStartingEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameNavigationStartingEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameNavigationStartingEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameNavigationStartingEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FramePermissionRequestedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FramePermissionRequestedEventHandler = {0x845d0edd,0x8bd8,0x429b,{0x99,0x15,0x48,0x21,0x78,0x9f,0x23,0xe9}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("845d0edd-8bd8-429b-9915-4821789f23e9") + ICoreWebView2FramePermissionRequestedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs2 *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FramePermissionRequestedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FramePermissionRequestedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FramePermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FramePermissionRequestedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FramePermissionRequestedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FramePermissionRequestedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2PermissionRequestedEventArgs2 *args); + + END_INTERFACE + } ICoreWebView2FramePermissionRequestedEventHandlerVtbl; + + interface ICoreWebView2FramePermissionRequestedEventHandler + { + CONST_VTBL struct ICoreWebView2FramePermissionRequestedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FramePermissionRequestedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FramePermissionRequestedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FramePermissionRequestedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FramePermissionRequestedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FramePermissionRequestedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FrameWebMessageReceivedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameWebMessageReceivedEventHandler = {0xe371e005,0x6d1d,0x4517,{0x93,0x4b,0xa8,0xf1,0x62,0x9c,0x62,0xa5}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e371e005-6d1d-4517-934b-a8f1629c62a5") + ICoreWebView2FrameWebMessageReceivedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FrameWebMessageReceivedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FrameWebMessageReceivedEventHandler * This, + /* [in] */ ICoreWebView2Frame *sender, + /* [in] */ ICoreWebView2WebMessageReceivedEventArgs *args); + + END_INTERFACE + } ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl; + + interface ICoreWebView2FrameWebMessageReceivedEventHandler + { + CONST_VTBL struct ICoreWebView2FrameWebMessageReceivedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FrameWebMessageReceivedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FrameWebMessageReceivedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2FrameInfo_INTERFACE_DEFINED__ #define __ICoreWebView2FrameInfo_INTERFACE_DEFINED__ @@ -12049,22 +23433,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfo = {0xda86b8a { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameInfo * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameInfo * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameInfo * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Name) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( ICoreWebView2FrameInfo * This, /* [retval][out] */ LPWSTR *name); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfo, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2FrameInfo * This, /* [retval][out] */ LPWSTR *source); @@ -12136,18 +23525,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfoCollection = { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameInfoCollection * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameInfoCollection * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameInfoCollection * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollection, GetIterator) HRESULT ( STDMETHODCALLTYPE *GetIterator )( ICoreWebView2FrameInfoCollection * This, /* [retval][out] */ ICoreWebView2FrameInfoCollectionIterator **iterator); @@ -12222,26 +23615,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FrameInfoCollectionIte { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FrameInfoCollectionIterator * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FrameInfoCollectionIterator * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FrameInfoCollectionIterator * This); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, get_HasCurrent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasCurrent )( ICoreWebView2FrameInfoCollectionIterator * This, /* [retval][out] */ BOOL *hasCurrent); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, GetCurrent) HRESULT ( STDMETHODCALLTYPE *GetCurrent )( ICoreWebView2FrameInfoCollectionIterator * This, /* [retval][out] */ ICoreWebView2FrameInfo **frameInfo); + DECLSPEC_XFGVIRT(ICoreWebView2FrameInfoCollectionIterator, MoveNext) HRESULT ( STDMETHODCALLTYPE *MoveNext )( ICoreWebView2FrameInfoCollectionIterator * This, /* [retval][out] */ BOOL *hasNext); @@ -12317,18 +23716,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FocusChangedEventHandl { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2FocusChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2FocusChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2FocusChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2FocusChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2FocusChangedEventHandler * This, /* [in] */ ICoreWebView2Controller *sender, @@ -12399,18 +23802,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetCookiesCompletedHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2GetCookiesCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2GetCookiesCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2GetCookiesCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2GetCookiesCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2GetCookiesCompletedHandler * This, HRESULT result, @@ -12481,18 +23888,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HistoryChangedEventHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2HistoryChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2HistoryChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2HistoryChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2HistoryChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2HistoryChangedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -12569,27 +23980,33 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpHeadersCollectionI { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2HttpHeadersCollectionIterator * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2HttpHeadersCollectionIterator * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2HttpHeadersCollectionIterator * This); + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, GetCurrentHeader) HRESULT ( STDMETHODCALLTYPE *GetCurrentHeader )( ICoreWebView2HttpHeadersCollectionIterator * This, /* [out] */ LPWSTR *name, /* [out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, get_HasCurrentHeader) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasCurrentHeader )( ICoreWebView2HttpHeadersCollectionIterator * This, /* [retval][out] */ BOOL *hasCurrent); + DECLSPEC_XFGVIRT(ICoreWebView2HttpHeadersCollectionIterator, MoveNext) HRESULT ( STDMETHODCALLTYPE *MoveNext )( ICoreWebView2HttpHeadersCollectionIterator * This, /* [retval][out] */ BOOL *hasNext); @@ -12683,42 +24100,51 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpRequestHeaders = { { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2HttpRequestHeaders * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2HttpRequestHeaders * This); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetHeader) HRESULT ( STDMETHODCALLTYPE *GetHeader )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetHeaders) HRESULT ( STDMETHODCALLTYPE *GetHeaders )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, Contains) HRESULT ( STDMETHODCALLTYPE *Contains )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ BOOL *contains); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, SetHeader) HRESULT ( STDMETHODCALLTYPE *SetHeader )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ LPCWSTR name, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, RemoveHeader) HRESULT ( STDMETHODCALLTYPE *RemoveHeader )( ICoreWebView2HttpRequestHeaders * This, /* [in] */ LPCWSTR name); + DECLSPEC_XFGVIRT(ICoreWebView2HttpRequestHeaders, GetIterator) HRESULT ( STDMETHODCALLTYPE *GetIterator )( ICoreWebView2HttpRequestHeaders * This, /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); @@ -12818,38 +24244,46 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpResponseHeaders = { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2HttpResponseHeaders * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2HttpResponseHeaders * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2HttpResponseHeaders * This); + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, AppendHeader) HRESULT ( STDMETHODCALLTYPE *AppendHeader )( ICoreWebView2HttpResponseHeaders * This, /* [in] */ LPCWSTR name, /* [in] */ LPCWSTR value); + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, Contains) HRESULT ( STDMETHODCALLTYPE *Contains )( ICoreWebView2HttpResponseHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ BOOL *contains); + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetHeader) HRESULT ( STDMETHODCALLTYPE *GetHeader )( ICoreWebView2HttpResponseHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ LPWSTR *value); + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetHeaders) HRESULT ( STDMETHODCALLTYPE *GetHeaders )( ICoreWebView2HttpResponseHeaders * This, /* [in] */ LPCWSTR name, /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); + DECLSPEC_XFGVIRT(ICoreWebView2HttpResponseHeaders, GetIterator) HRESULT ( STDMETHODCALLTYPE *GetIterator )( ICoreWebView2HttpResponseHeaders * This, /* [retval][out] */ ICoreWebView2HttpHeadersCollectionIterator **iterator); @@ -12903,6 +24337,92 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2HttpResponseHeaders = #endif /* __ICoreWebView2HttpResponseHeaders_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler = {0x3117da26,0xae13,0x438d,{0xbd,0x46,0xed,0xbe,0xb2,0xc4,0xce,0x81}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3117da26-ae13-438d-bd46-edbeb2c4ce81") + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl; + + interface ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2MoveFocusRequestedEventArgs_INTERFACE_DEFINED__ @@ -12936,26 +24456,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2MoveFocusRequestedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2MoveFocusRequestedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2MoveFocusRequestedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2MoveFocusRequestedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, get_Reason) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( ICoreWebView2MoveFocusRequestedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_MOVE_FOCUS_REASON *reason); + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2MoveFocusRequestedEventArgs * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2MoveFocusRequestedEventArgs * This, /* [in] */ BOOL value); @@ -13031,18 +24557,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2MoveFocusRequestedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2MoveFocusRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2MoveFocusRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2MoveFocusRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2MoveFocusRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2MoveFocusRequestedEventHandler * This, /* [in] */ ICoreWebView2Controller *sender, @@ -13118,26 +24648,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NavigationCompletedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NavigationCompletedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NavigationCompletedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_IsSuccess) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuccess )( ICoreWebView2NavigationCompletedEventArgs * This, /* [retval][out] */ BOOL *isSuccess); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_WebErrorStatus) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebErrorStatus )( ICoreWebView2NavigationCompletedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *webErrorStatus); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_NavigationId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( ICoreWebView2NavigationCompletedEventArgs * This, /* [retval][out] */ UINT64 *navigationId); @@ -13185,6 +24721,115 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEve #endif /* __ICoreWebView2NavigationCompletedEventArgs_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationCompletedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEventArgs2 = {0xFDF8B738,0xEE1E,0x4DB2,{0xA3,0x29,0x8D,0x7D,0x7B,0x74,0xD7,0x92}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("FDF8B738-EE1E-4DB2-A329-8D7D7B74D792") + ICoreWebView2NavigationCompletedEventArgs2 : public ICoreWebView2NavigationCompletedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HttpStatusCode( + /* [retval][out] */ int *http_status_code) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationCompletedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationCompletedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationCompletedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_IsSuccess) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuccess )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ BOOL *isSuccess); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_WebErrorStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebErrorStatus )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *webErrorStatus); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ UINT64 *navigationId); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventArgs2, get_HttpStatusCode) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HttpStatusCode )( + ICoreWebView2NavigationCompletedEventArgs2 * This, + /* [retval][out] */ int *http_status_code); + + END_INTERFACE + } ICoreWebView2NavigationCompletedEventArgs2Vtbl; + + interface ICoreWebView2NavigationCompletedEventArgs2 + { + CONST_VTBL struct ICoreWebView2NavigationCompletedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationCompletedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationCompletedEventArgs2_get_IsSuccess(This,isSuccess) \ + ( (This)->lpVtbl -> get_IsSuccess(This,isSuccess) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_get_WebErrorStatus(This,webErrorStatus) \ + ( (This)->lpVtbl -> get_WebErrorStatus(This,webErrorStatus) ) + +#define ICoreWebView2NavigationCompletedEventArgs2_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + + +#define ICoreWebView2NavigationCompletedEventArgs2_get_HttpStatusCode(This,http_status_code) \ + ( (This)->lpVtbl -> get_HttpStatusCode(This,http_status_code) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationCompletedEventArgs2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2NavigationCompletedEventHandler_INTERFACE_DEFINED__ @@ -13213,18 +24858,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationCompletedEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NavigationCompletedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NavigationCompletedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NavigationCompletedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationCompletedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2NavigationCompletedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -13312,42 +24961,52 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NavigationStartingEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NavigationStartingEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NavigationStartingEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsUserInitiated) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ BOOL *isUserInitiated); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsRedirected) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ BOOL *isRedirected); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_RequestHeaders) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Cancel) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ BOOL *cancel); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, put_Cancel) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( ICoreWebView2NavigationStartingEventArgs * This, /* [in] */ BOOL cancel); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_NavigationId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( ICoreWebView2NavigationStartingEventArgs * This, /* [retval][out] */ UINT64 *navigationId); @@ -13407,6 +25066,158 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEven #endif /* __ICoreWebView2NavigationStartingEventArgs_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2NavigationStartingEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEventArgs2 = {0x9086BE93,0x91AA,0x472D,{0xA7,0xE0,0x57,0x9F,0x2B,0xA0,0x06,0xAD}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9086BE93-91AA-472D-A7E0-579F2BA006AD") + ICoreWebView2NavigationStartingEventArgs2 : public ICoreWebView2NavigationStartingEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AdditionalAllowedFrameAncestors( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_AdditionalAllowedFrameAncestors( + /* [in] */ LPCWSTR value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2NavigationStartingEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2NavigationStartingEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2NavigationStartingEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_IsRedirected) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsRedirected )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *isRedirected); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_RequestHeaders) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestHeaders )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ ICoreWebView2HttpRequestHeaders **requestHeaders); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_Cancel) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Cancel )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ BOOL *cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, put_Cancel) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Cancel )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ BOOL cancel); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs, get_NavigationId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NavigationId )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ UINT64 *navigationId); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, get_AdditionalAllowedFrameAncestors) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventArgs2, put_AdditionalAllowedFrameAncestors) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AdditionalAllowedFrameAncestors )( + ICoreWebView2NavigationStartingEventArgs2 * This, + /* [in] */ LPCWSTR value); + + END_INTERFACE + } ICoreWebView2NavigationStartingEventArgs2Vtbl; + + interface ICoreWebView2NavigationStartingEventArgs2 + { + CONST_VTBL struct ICoreWebView2NavigationStartingEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2NavigationStartingEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2NavigationStartingEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2NavigationStartingEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2NavigationStartingEventArgs2_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_IsRedirected(This,isRedirected) \ + ( (This)->lpVtbl -> get_IsRedirected(This,isRedirected) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_RequestHeaders(This,requestHeaders) \ + ( (This)->lpVtbl -> get_RequestHeaders(This,requestHeaders) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_Cancel(This,cancel) \ + ( (This)->lpVtbl -> get_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs2_put_Cancel(This,cancel) \ + ( (This)->lpVtbl -> put_Cancel(This,cancel) ) + +#define ICoreWebView2NavigationStartingEventArgs2_get_NavigationId(This,navigationId) \ + ( (This)->lpVtbl -> get_NavigationId(This,navigationId) ) + + +#define ICoreWebView2NavigationStartingEventArgs2_get_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> get_AdditionalAllowedFrameAncestors(This,value) ) + +#define ICoreWebView2NavigationStartingEventArgs2_put_AdditionalAllowedFrameAncestors(This,value) \ + ( (This)->lpVtbl -> put_AdditionalAllowedFrameAncestors(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2NavigationStartingEventArgs2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2NavigationStartingEventHandler_INTERFACE_DEFINED__ @@ -13435,18 +25246,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NavigationStartingEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NavigationStartingEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NavigationStartingEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NavigationStartingEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2NavigationStartingEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2NavigationStartingEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -13517,18 +25332,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewBrowserVersionAvail { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NewBrowserVersionAvailableEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NewBrowserVersionAvailableEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2NewBrowserVersionAvailableEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2NewBrowserVersionAvailableEventHandler * This, /* [in] */ ICoreWebView2Environment *sender, @@ -13619,46 +25438,57 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NewWindowRequestedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NewWindowRequestedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_NewWindow) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [in] */ ICoreWebView2 *newWindow); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_NewWindow) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2 **newWindow); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [in] */ BOOL handled); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ BOOL *handled); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_IsUserInitiated) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ BOOL *isUserInitiated); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_WindowFeatures) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WindowFeatures )( ICoreWebView2NewWindowRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2WindowFeatures **value); @@ -13748,50 +25578,62 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NewWindowRequestedEventArgs2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NewWindowRequestedEventArgs2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_NewWindow) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_NewWindow )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [in] */ ICoreWebView2 *newWindow); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_NewWindow) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NewWindow )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ ICoreWebView2 **newWindow); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, put_Handled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [in] */ BOOL handled); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_Handled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ BOOL *handled); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_IsUserInitiated) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ BOOL *isUserInitiated); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs, get_WindowFeatures) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WindowFeatures )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ ICoreWebView2WindowFeatures **value); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventArgs2, get_Name) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( ICoreWebView2NewWindowRequestedEventArgs2 * This, /* [retval][out] */ LPWSTR *value); @@ -13886,18 +25728,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2NewWindowRequestedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2NewWindowRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2NewWindowRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2NewWindowRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2NewWindowRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2NewWindowRequestedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -13982,38 +25828,47 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2PermissionRequestedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2PermissionRequestedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2PermissionRequestedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2PermissionRequestedEventArgs * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_PermissionKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( ICoreWebView2PermissionRequestedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_IsUserInitiated) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( ICoreWebView2PermissionRequestedEventArgs * This, /* [retval][out] */ BOOL *isUserInitiated); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_State) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( ICoreWebView2PermissionRequestedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, put_State) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( ICoreWebView2PermissionRequestedEventArgs * This, /* [in] */ COREWEBVIEW2_PERMISSION_STATE state); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2PermissionRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); @@ -14070,6 +25925,150 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEve #endif /* __ICoreWebView2PermissionRequestedEventArgs_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ +#define __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2PermissionRequestedEventArgs2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEventArgs2 = {0x74d7127f,0x9de6,0x4200,{0x87,0x34,0x42,0xd6,0xfb,0x4f,0xf7,0x41}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("74d7127f-9de6-4200-8734-42d6fb4ff741") + ICoreWebView2PermissionRequestedEventArgs2 : public ICoreWebView2PermissionRequestedEventArgs + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Handled( + /* [retval][out] */ BOOL *handled) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Handled( + /* [in] */ BOOL handled) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2PermissionRequestedEventArgs2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2PermissionRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2PermissionRequestedEventArgs2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_Uri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_PermissionKind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PermissionKind )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_KIND *permissionKind); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_IsUserInitiated) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsUserInitiated )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *isUserInitiated); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, get_State) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_State )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ COREWEBVIEW2_PERMISSION_STATE *state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, put_State) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_State )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ COREWEBVIEW2_PERMISSION_STATE state); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, get_Handled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Handled )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [retval][out] */ BOOL *handled); + + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventArgs2, put_Handled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Handled )( + ICoreWebView2PermissionRequestedEventArgs2 * This, + /* [in] */ BOOL handled); + + END_INTERFACE + } ICoreWebView2PermissionRequestedEventArgs2Vtbl; + + interface ICoreWebView2PermissionRequestedEventArgs2 + { + CONST_VTBL struct ICoreWebView2PermissionRequestedEventArgs2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2PermissionRequestedEventArgs2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2PermissionRequestedEventArgs2_get_Uri(This,uri) \ + ( (This)->lpVtbl -> get_Uri(This,uri) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_PermissionKind(This,permissionKind) \ + ( (This)->lpVtbl -> get_PermissionKind(This,permissionKind) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_IsUserInitiated(This,isUserInitiated) \ + ( (This)->lpVtbl -> get_IsUserInitiated(This,isUserInitiated) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_get_State(This,state) \ + ( (This)->lpVtbl -> get_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_put_State(This,state) \ + ( (This)->lpVtbl -> put_State(This,state) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + + +#define ICoreWebView2PermissionRequestedEventArgs2_get_Handled(This,handled) \ + ( (This)->lpVtbl -> get_Handled(This,handled) ) + +#define ICoreWebView2PermissionRequestedEventArgs2_put_Handled(This,handled) \ + ( (This)->lpVtbl -> put_Handled(This,handled) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2PermissionRequestedEventArgs2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2PermissionRequestedEventHandler_INTERFACE_DEFINED__ @@ -14098,18 +26097,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PermissionRequestedEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2PermissionRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2PermissionRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2PermissionRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2PermissionRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2PermissionRequestedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -14344,238 +26347,297 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PointerInfo = {0xe6995 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2PointerInfo * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2PointerInfo * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2PointerInfo * This); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerKind )( ICoreWebView2PointerInfo * This, /* [retval][out] */ DWORD *pointerKind); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerKind) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerKind )( ICoreWebView2PointerInfo * This, /* [in] */ DWORD pointerKind); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerId )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *pointerId); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerId) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerId )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 pointerId); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_FrameId) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameId )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *frameId); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_FrameId) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FrameId )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 frameId); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerFlags) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerFlags )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *pointerFlags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerFlags) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerFlags )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 pointerFlags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PointerDeviceRect) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PointerDeviceRect )( ICoreWebView2PointerInfo * This, /* [retval][out] */ RECT *pointerDeviceRect); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PointerDeviceRect) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PointerDeviceRect )( ICoreWebView2PointerInfo * This, /* [in] */ RECT pointerDeviceRect); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_DisplayRect) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DisplayRect )( ICoreWebView2PointerInfo * This, /* [retval][out] */ RECT *displayRect); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_DisplayRect) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DisplayRect )( ICoreWebView2PointerInfo * This, /* [in] */ RECT displayRect); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PixelLocation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PixelLocation )( ICoreWebView2PointerInfo * This, /* [retval][out] */ POINT *pixelLocation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PixelLocation) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PixelLocation )( ICoreWebView2PointerInfo * This, /* [in] */ POINT pixelLocation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HimetricLocation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HimetricLocation )( ICoreWebView2PointerInfo * This, /* [retval][out] */ POINT *himetricLocation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HimetricLocation) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HimetricLocation )( ICoreWebView2PointerInfo * This, /* [in] */ POINT himetricLocation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PixelLocationRaw) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PixelLocationRaw )( ICoreWebView2PointerInfo * This, /* [retval][out] */ POINT *pixelLocationRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PixelLocationRaw) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PixelLocationRaw )( ICoreWebView2PointerInfo * This, /* [in] */ POINT pixelLocationRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HimetricLocationRaw) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HimetricLocationRaw )( ICoreWebView2PointerInfo * This, /* [retval][out] */ POINT *himetricLocationRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HimetricLocationRaw) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HimetricLocationRaw )( ICoreWebView2PointerInfo * This, /* [in] */ POINT himetricLocationRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_Time) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Time )( ICoreWebView2PointerInfo * This, /* [retval][out] */ DWORD *time); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_Time) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Time )( ICoreWebView2PointerInfo * This, /* [in] */ DWORD time); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_HistoryCount) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HistoryCount )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *historyCount); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_HistoryCount) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HistoryCount )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 historyCount); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_InputData) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_InputData )( ICoreWebView2PointerInfo * This, /* [retval][out] */ INT32 *inputData); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_InputData) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_InputData )( ICoreWebView2PointerInfo * This, /* [in] */ INT32 inputData); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_KeyStates) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeyStates )( ICoreWebView2PointerInfo * This, /* [retval][out] */ DWORD *keyStates); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_KeyStates) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_KeyStates )( ICoreWebView2PointerInfo * This, /* [in] */ DWORD keyStates); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PerformanceCount) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PerformanceCount )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT64 *performanceCount); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PerformanceCount) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PerformanceCount )( ICoreWebView2PointerInfo * This, /* [in] */ UINT64 performanceCount); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_ButtonChangeKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ButtonChangeKind )( ICoreWebView2PointerInfo * This, /* [retval][out] */ INT32 *buttonChangeKind); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_ButtonChangeKind) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ButtonChangeKind )( ICoreWebView2PointerInfo * This, /* [in] */ INT32 buttonChangeKind); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenFlags) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenFlags )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *penFLags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenFlags) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenFlags )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 penFLags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenMask) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenMask )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *penMask); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenMask) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenMask )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 penMask); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenPressure) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenPressure )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *penPressure); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenPressure) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenPressure )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 penPressure); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenRotation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenRotation )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *penRotation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenRotation) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenRotation )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 penRotation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenTiltX) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenTiltX )( ICoreWebView2PointerInfo * This, /* [retval][out] */ INT32 *penTiltX); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenTiltX) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenTiltX )( ICoreWebView2PointerInfo * This, /* [in] */ INT32 penTiltX); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_PenTiltY) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PenTiltY )( ICoreWebView2PointerInfo * This, /* [retval][out] */ INT32 *penTiltY); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_PenTiltY) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PenTiltY )( ICoreWebView2PointerInfo * This, /* [in] */ INT32 penTiltY); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchFlags) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchFlags )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *touchFlags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchFlags) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchFlags )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 touchFlags); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchMask) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchMask )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *touchMask); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchMask) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchMask )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 touchMask); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchContact) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchContact )( ICoreWebView2PointerInfo * This, /* [retval][out] */ RECT *touchContact); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchContact) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchContact )( ICoreWebView2PointerInfo * This, /* [in] */ RECT touchContact); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchContactRaw) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchContactRaw )( ICoreWebView2PointerInfo * This, /* [retval][out] */ RECT *touchContactRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchContactRaw) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchContactRaw )( ICoreWebView2PointerInfo * This, /* [in] */ RECT touchContactRaw); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchOrientation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchOrientation )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *touchOrientation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchOrientation) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchOrientation )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 touchOrientation); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, get_TouchPressure) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_TouchPressure )( ICoreWebView2PointerInfo * This, /* [retval][out] */ UINT32 *touchPressure); + DECLSPEC_XFGVIRT(ICoreWebView2PointerInfo, put_TouchPressure) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_TouchPressure )( ICoreWebView2PointerInfo * This, /* [in] */ UINT32 touchPressure); @@ -14884,118 +26946,147 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintSettings = {0x377 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2PrintSettings * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2PrintSettings * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2PrintSettings * This); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_Orientation) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Orientation )( ICoreWebView2PrintSettings * This, /* [retval][out] */ COREWEBVIEW2_PRINT_ORIENTATION *orientation); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_Orientation) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Orientation )( ICoreWebView2PrintSettings * This, /* [in] */ COREWEBVIEW2_PRINT_ORIENTATION orientation); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ScaleFactor) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ScaleFactor )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *scaleFactor); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ScaleFactor) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ScaleFactor )( ICoreWebView2PrintSettings * This, /* [in] */ double scaleFactor); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageWidth) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageWidth )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *pageWidth); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageWidth) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageWidth )( ICoreWebView2PrintSettings * This, /* [in] */ double pageWidth); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_PageHeight) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PageHeight )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *pageHeight); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_PageHeight) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PageHeight )( ICoreWebView2PrintSettings * This, /* [in] */ double pageHeight); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginTop) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginTop )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *marginTop); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginTop) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginTop )( ICoreWebView2PrintSettings * This, /* [in] */ double marginTop); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginBottom) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginBottom )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *marginBottom); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginBottom) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginBottom )( ICoreWebView2PrintSettings * This, /* [in] */ double marginBottom); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginLeft) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginLeft )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *marginLeft); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginLeft) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginLeft )( ICoreWebView2PrintSettings * This, /* [in] */ double marginLeft); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_MarginRight) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MarginRight )( ICoreWebView2PrintSettings * This, /* [retval][out] */ double *marginRight); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_MarginRight) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_MarginRight )( ICoreWebView2PrintSettings * This, /* [in] */ double marginRight); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintBackgrounds) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintBackgrounds )( ICoreWebView2PrintSettings * This, /* [retval][out] */ BOOL *shouldPrintBackgrounds); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintBackgrounds) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintBackgrounds )( ICoreWebView2PrintSettings * This, /* [in] */ BOOL shouldPrintBackgrounds); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintSelectionOnly) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintSelectionOnly )( ICoreWebView2PrintSettings * This, /* [retval][out] */ BOOL *shouldPrintSelectionOnly); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintSelectionOnly) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintSelectionOnly )( ICoreWebView2PrintSettings * This, /* [in] */ BOOL shouldPrintSelectionOnly); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_ShouldPrintHeaderAndFooter) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldPrintHeaderAndFooter )( ICoreWebView2PrintSettings * This, /* [retval][out] */ BOOL *shouldPrintHeaderAndFooter); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_ShouldPrintHeaderAndFooter) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ShouldPrintHeaderAndFooter )( ICoreWebView2PrintSettings * This, /* [in] */ BOOL shouldPrintHeaderAndFooter); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_HeaderTitle) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HeaderTitle )( ICoreWebView2PrintSettings * This, /* [retval][out] */ LPWSTR *headerTitle); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_HeaderTitle) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HeaderTitle )( ICoreWebView2PrintSettings * This, /* [in] */ LPCWSTR headerTitle); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, get_FooterUri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FooterUri )( ICoreWebView2PrintSettings * This, /* [retval][out] */ LPWSTR *footerUri); + DECLSPEC_XFGVIRT(ICoreWebView2PrintSettings, put_FooterUri) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_FooterUri )( ICoreWebView2PrintSettings * This, /* [in] */ LPCWSTR footerUri); @@ -15140,18 +27231,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2PrintToPdfCompletedHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2PrintToPdfCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2PrintToPdfCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2PrintToPdfCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2PrintToPdfCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2PrintToPdfCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -15221,18 +27316,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventArgs { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ProcessFailedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ProcessFailedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ProcessFailedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs, get_ProcessFailedKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( ICoreWebView2ProcessFailedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *processFailedKind); @@ -15310,34 +27409,42 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventArgs { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ProcessFailedEventArgs2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ProcessFailedEventArgs2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs, get_ProcessFailedKind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessFailedKind )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_KIND *processFailedKind); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_Reason) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Reason )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [retval][out] */ COREWEBVIEW2_PROCESS_FAILED_REASON *reason); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ExitCode) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ExitCode )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [retval][out] */ int *exitCode); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_ProcessDescription) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessDescription )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [retval][out] */ LPWSTR *processDescription); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventArgs2, get_FrameInfosForFailedProcess) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FrameInfosForFailedProcess )( ICoreWebView2ProcessFailedEventArgs2 * This, /* [retval][out] */ ICoreWebView2FrameInfoCollection **frames); @@ -15420,18 +27527,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventHand { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ProcessFailedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ProcessFailedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ProcessFailedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ProcessFailedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ProcessFailedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -15474,6 +27585,327 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessFailedEventHand #endif /* __ICoreWebView2ProcessFailedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Profile_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile = {0x79110ad3,0xcd5d,0x4373,{0x8b,0xc3,0xc6,0x06,0x58,0xf1,0x7a,0x5f}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("79110ad3-cd5d-4373-8bc3-c60658f17a5f") + ICoreWebView2Profile : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfileName( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IsInPrivateModeEnabled( + /* [retval][out] */ BOOL *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProfilePath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_DefaultDownloadFolderPath( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_DefaultDownloadFolderPath( + /* [in] */ LPCWSTR value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_PreferredColorScheme( + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_PreferredColorScheme( + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProfileVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + END_INTERFACE + } ICoreWebView2ProfileVtbl; + + interface ICoreWebView2Profile + { + CONST_VTBL struct ICoreWebView2ProfileVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2Profile2_INTERFACE_DEFINED__ +#define __ICoreWebView2Profile2_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Profile2 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Profile2 = {0xfa740d4b,0x5eae,0x4344,{0xa8,0xad,0x74,0xbe,0x31,0x92,0x53,0x97}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fa740d4b-5eae-4344-a8ad-74be31925397") + ICoreWebView2Profile2 : public ICoreWebView2Profile + { + public: + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingData( + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingDataInTimeRange( + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearBrowsingDataAll( + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Profile2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Profile2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Profile2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Profile2 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfileName) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfileName )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_IsInPrivateModeEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsInPrivateModeEnabled )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_ProfilePath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_DefaultDownloadFolderPath) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadFolderPath )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_DefaultDownloadFolderPath) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadFolderPath )( + ICoreWebView2Profile2 * This, + /* [in] */ LPCWSTR value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, get_PreferredColorScheme) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreferredColorScheme )( + ICoreWebView2Profile2 * This, + /* [retval][out] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile, put_PreferredColorScheme) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreferredColorScheme )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_PREFERRED_COLOR_SCHEME value); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingData) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingData )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataInTimeRange) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataInTimeRange )( + ICoreWebView2Profile2 * This, + /* [in] */ COREWEBVIEW2_BROWSING_DATA_KINDS dataKinds, + /* [in] */ double startTime, + /* [in] */ double endTime, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2Profile2, ClearBrowsingDataAll) + HRESULT ( STDMETHODCALLTYPE *ClearBrowsingDataAll )( + ICoreWebView2Profile2 * This, + /* [in] */ ICoreWebView2ClearBrowsingDataCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2Profile2Vtbl; + + interface ICoreWebView2Profile2 + { + CONST_VTBL struct ICoreWebView2Profile2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Profile2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Profile2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Profile2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Profile2_get_ProfileName(This,value) \ + ( (This)->lpVtbl -> get_ProfileName(This,value) ) + +#define ICoreWebView2Profile2_get_IsInPrivateModeEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsInPrivateModeEnabled(This,value) ) + +#define ICoreWebView2Profile2_get_ProfilePath(This,value) \ + ( (This)->lpVtbl -> get_ProfilePath(This,value) ) + +#define ICoreWebView2Profile2_get_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile2_put_DefaultDownloadFolderPath(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadFolderPath(This,value) ) + +#define ICoreWebView2Profile2_get_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> get_PreferredColorScheme(This,value) ) + +#define ICoreWebView2Profile2_put_PreferredColorScheme(This,value) \ + ( (This)->lpVtbl -> put_PreferredColorScheme(This,value) ) + + +#define ICoreWebView2Profile2_ClearBrowsingData(This,dataKinds,handler) \ + ( (This)->lpVtbl -> ClearBrowsingData(This,dataKinds,handler) ) + +#define ICoreWebView2Profile2_ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataInTimeRange(This,dataKinds,startTime,endTime,handler) ) + +#define ICoreWebView2Profile2_ClearBrowsingDataAll(This,handler) \ + ( (This)->lpVtbl -> ClearBrowsingDataAll(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Profile2_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ #define __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ @@ -15502,18 +27934,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2RasterizationScaleChan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2RasterizationScaleChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2RasterizationScaleChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2RasterizationScaleChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2RasterizationScaleChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2RasterizationScaleChangedEventHandler * This, /* [in] */ ICoreWebView2Controller *sender, @@ -15556,6 +27992,231 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2RasterizationScaleChan #endif /* __ICoreWebView2RasterizationScaleChangedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServerCertificateErrorDetectedEventArgs */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServerCertificateErrorDetectedEventArgs = {0x012193ED,0x7C13,0x48FF,{0x96,0x9D,0xA8,0x4C,0x1F,0x43,0x2A,0x14}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("012193ED-7C13-48FF-969D-A84C1F432A14") + ICoreWebView2ServerCertificateErrorDetectedEventArgs : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ErrorStatus( + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_RequestUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ServerCertificate( + /* [retval][out] */ ICoreWebView2Certificate **value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Action( + /* [retval][out] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION *value) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_Action( + /* [in] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeferral( + /* [retval][out] */ ICoreWebView2Deferral **deferral) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_ErrorStatus) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ErrorStatus )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_WEB_ERROR_STATUS *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_RequestUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_RequestUri )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_ServerCertificate) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ServerCertificate )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ ICoreWebView2Certificate **value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, get_Action) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Action )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, put_Action) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Action )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [in] */ COREWEBVIEW2_SERVER_CERTIFICATE_ERROR_ACTION value); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventArgs, GetDeferral) + HRESULT ( STDMETHODCALLTYPE *GetDeferral )( + ICoreWebView2ServerCertificateErrorDetectedEventArgs * This, + /* [retval][out] */ ICoreWebView2Deferral **deferral); + + END_INTERFACE + } ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl; + + interface ICoreWebView2ServerCertificateErrorDetectedEventArgs + { + CONST_VTBL struct ICoreWebView2ServerCertificateErrorDetectedEventArgsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_ErrorStatus(This,value) \ + ( (This)->lpVtbl -> get_ErrorStatus(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_RequestUri(This,value) \ + ( (This)->lpVtbl -> get_RequestUri(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_ServerCertificate(This,value) \ + ( (This)->lpVtbl -> get_ServerCertificate(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_get_Action(This,value) \ + ( (This)->lpVtbl -> get_Action(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_put_Action(This,value) \ + ( (This)->lpVtbl -> put_Action(This,value) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventArgs_GetDeferral(This,deferral) \ + ( (This)->lpVtbl -> GetDeferral(This,deferral) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventArgs_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ServerCertificateErrorDetectedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ServerCertificateErrorDetectedEventHandler = {0x969B3A26,0xD85E,0x4795,{0x81,0x99,0xFE,0xF5,0x73,0x44,0xDA,0x22}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("969B3A26-D85E-4795-8199-FEF57344DA22") + ICoreWebView2ServerCertificateErrorDetectedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventArgs *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ServerCertificateErrorDetectedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ServerCertificateErrorDetectedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventArgs *args); + + END_INTERFACE + } ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl; + + interface ICoreWebView2ServerCertificateErrorDetectedEventHandler + { + CONST_VTBL struct ICoreWebView2ServerCertificateErrorDetectedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ServerCertificateErrorDetectedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ServerCertificateErrorDetectedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2ScriptDialogOpeningEventArgs_INTERFACE_DEFINED__ @@ -15603,45 +28264,56 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScriptDialogOpeningEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ScriptDialogOpeningEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ScriptDialogOpeningEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Kind) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ COREWEBVIEW2_SCRIPT_DIALOG_KIND *kind); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_Message) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Message )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ LPWSTR *message); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, Accept) HRESULT ( STDMETHODCALLTYPE *Accept )( ICoreWebView2ScriptDialogOpeningEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_DefaultText) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultText )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ LPWSTR *defaultText); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, get_ResultText) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResultText )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ LPWSTR *resultText); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, put_ResultText) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ResultText )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [in] */ LPCWSTR resultText); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2ScriptDialogOpeningEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); @@ -15732,18 +28404,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ScriptDialogOpeningEve { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ScriptDialogOpeningEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ScriptDialogOpeningEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ScriptDialogOpeningEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ScriptDialogOpeningEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ScriptDialogOpeningEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -15864,86 +28540,107 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings = {0xe562e4f0 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings * This, /* [in] */ BOOL enabled); @@ -16066,94 +28763,117 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings2 = {0xee9a0f6 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings2 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings2 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings2 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings2 * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings2 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings2 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( ICoreWebView2Settings2 * This, /* [retval][out] */ LPWSTR *userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( ICoreWebView2Settings2 * This, /* [in] */ LPCWSTR userAgent); @@ -16283,102 +29003,127 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings3 = {0xfdb5ab7 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings3 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings3 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings3 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings3 * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( ICoreWebView2Settings3 * This, /* [retval][out] */ LPWSTR *userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( ICoreWebView2Settings3 * This, /* [in] */ LPCWSTR userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings3 * This, /* [retval][out] */ BOOL *areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings3 * This, /* [in] */ BOOL areBrowserAcceleratorKeysEnabled); @@ -16521,118 +29266,147 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings4 = {0xcb56846 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings4 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings4 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings4 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings4 * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( ICoreWebView2Settings4 * This, /* [retval][out] */ LPWSTR *userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( ICoreWebView2Settings4 * This, /* [in] */ LPCWSTR userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( ICoreWebView2Settings4 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( ICoreWebView2Settings4 * This, /* [in] */ BOOL value); @@ -16782,126 +29556,157 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings5 = {0x183e705 { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings5 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings5 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings5 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings5 * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( ICoreWebView2Settings5 * This, /* [retval][out] */ LPWSTR *userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( ICoreWebView2Settings5 * This, /* [in] */ LPCWSTR userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( ICoreWebView2Settings5 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( ICoreWebView2Settings5 * This, /* [in] */ BOOL enabled); @@ -17058,134 +29863,167 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings6 = {0x11cb3ac { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2Settings6 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2Settings6 * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2Settings6 * This); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL isScriptEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL isWebMessageEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL areDefaultScriptDialogsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL isStatusBarEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL areDevToolsEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( ICoreWebView2Settings6 * This, /* [in] */ BOOL allowed); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( ICoreWebView2Settings6 * This, /* [retval][out] */ LPWSTR *userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( ICoreWebView2Settings6 * This, /* [in] */ LPCWSTR userAgent); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL areBrowserAcceleratorKeysEnabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL value); + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( ICoreWebView2Settings6 * This, /* [retval][out] */ BOOL *enabled); + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( ICoreWebView2Settings6 * This, /* [in] */ BOOL enabled); @@ -17319,6 +30157,347 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings6 = {0x11cb3ac #endif /* __ICoreWebView2Settings6_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2Settings7_INTERFACE_DEFINED__ +#define __ICoreWebView2Settings7_INTERFACE_DEFINED__ + +/* interface ICoreWebView2Settings7 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2Settings7 = {0x488dc902,0x35ef,0x42d2,{0xbc,0x7d,0x94,0xb6,0x5c,0x4b,0xc4,0x9c}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("488dc902-35ef-42d2-bc7d-94b65c4bc49c") + ICoreWebView2Settings7 : public ICoreWebView2Settings6 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_HiddenPdfToolbarItems( + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *hidden_pdf_toolbar_items) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_HiddenPdfToolbarItems( + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS hidden_pdf_toolbar_items) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2Settings7Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2Settings7 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2Settings7 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2Settings7 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsScriptEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsScriptEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsScriptEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsScriptEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isScriptEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsWebMessageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsWebMessageEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsWebMessageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsWebMessageEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isWebMessageEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultScriptDialogsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultScriptDialogsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultScriptDialogsEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL areDefaultScriptDialogsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsStatusBarEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsStatusBarEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsStatusBarEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsStatusBarEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL isStatusBarEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDevToolsEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDevToolsEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDevToolsEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDevToolsEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL areDevToolsEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreDefaultContextMenusEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreDefaultContextMenusEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreDefaultContextMenusEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_AreHostObjectsAllowed) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreHostObjectsAllowed )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_AreHostObjectsAllowed) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreHostObjectsAllowed )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL allowed); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsZoomControlEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsZoomControlEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsZoomControlEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsZoomControlEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, get_IsBuiltInErrorPageEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings, put_IsBuiltInErrorPageEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsBuiltInErrorPageEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, get_UserAgent) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_UserAgent )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ LPWSTR *userAgent); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings2, put_UserAgent) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_UserAgent )( + ICoreWebView2Settings7 * This, + /* [in] */ LPCWSTR userAgent); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, get_AreBrowserAcceleratorKeysEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *areBrowserAcceleratorKeysEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings3, put_AreBrowserAcceleratorKeysEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_AreBrowserAcceleratorKeysEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL areBrowserAcceleratorKeysEnabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsPasswordAutosaveEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsPasswordAutosaveEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPasswordAutosaveEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, get_IsGeneralAutofillEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsGeneralAutofillEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings4, put_IsGeneralAutofillEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsGeneralAutofillEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, get_IsPinchZoomEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPinchZoomEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings5, put_IsPinchZoomEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsPinchZoomEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, get_IsSwipeNavigationEnabled) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSwipeNavigationEnabled )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ BOOL *enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings6, put_IsSwipeNavigationEnabled) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsSwipeNavigationEnabled )( + ICoreWebView2Settings7 * This, + /* [in] */ BOOL enabled); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, get_HiddenPdfToolbarItems) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HiddenPdfToolbarItems )( + ICoreWebView2Settings7 * This, + /* [retval][out] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS *hidden_pdf_toolbar_items); + + DECLSPEC_XFGVIRT(ICoreWebView2Settings7, put_HiddenPdfToolbarItems) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_HiddenPdfToolbarItems )( + ICoreWebView2Settings7 * This, + /* [in] */ COREWEBVIEW2_PDF_TOOLBAR_ITEMS hidden_pdf_toolbar_items); + + END_INTERFACE + } ICoreWebView2Settings7Vtbl; + + interface ICoreWebView2Settings7 + { + CONST_VTBL struct ICoreWebView2Settings7Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2Settings7_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2Settings7_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2Settings7_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2Settings7_get_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> get_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings7_put_IsScriptEnabled(This,isScriptEnabled) \ + ( (This)->lpVtbl -> put_IsScriptEnabled(This,isScriptEnabled) ) + +#define ICoreWebView2Settings7_get_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> get_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings7_put_IsWebMessageEnabled(This,isWebMessageEnabled) \ + ( (This)->lpVtbl -> put_IsWebMessageEnabled(This,isWebMessageEnabled) ) + +#define ICoreWebView2Settings7_get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> get_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings7_put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) \ + ( (This)->lpVtbl -> put_AreDefaultScriptDialogsEnabled(This,areDefaultScriptDialogsEnabled) ) + +#define ICoreWebView2Settings7_get_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> get_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings7_put_IsStatusBarEnabled(This,isStatusBarEnabled) \ + ( (This)->lpVtbl -> put_IsStatusBarEnabled(This,isStatusBarEnabled) ) + +#define ICoreWebView2Settings7_get_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> get_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings7_put_AreDevToolsEnabled(This,areDevToolsEnabled) \ + ( (This)->lpVtbl -> put_AreDevToolsEnabled(This,areDevToolsEnabled) ) + +#define ICoreWebView2Settings7_get_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_AreDefaultContextMenusEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_AreDefaultContextMenusEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_get_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> get_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings7_put_AreHostObjectsAllowed(This,allowed) \ + ( (This)->lpVtbl -> put_AreHostObjectsAllowed(This,allowed) ) + +#define ICoreWebView2Settings7_get_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsZoomControlEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsZoomControlEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_get_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsBuiltInErrorPageEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsBuiltInErrorPageEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsBuiltInErrorPageEnabled(This,enabled) ) + + +#define ICoreWebView2Settings7_get_UserAgent(This,userAgent) \ + ( (This)->lpVtbl -> get_UserAgent(This,userAgent) ) + +#define ICoreWebView2Settings7_put_UserAgent(This,userAgent) \ + ( (This)->lpVtbl -> put_UserAgent(This,userAgent) ) + + +#define ICoreWebView2Settings7_get_AreBrowserAcceleratorKeysEnabled(This,areBrowserAcceleratorKeysEnabled) \ + ( (This)->lpVtbl -> get_AreBrowserAcceleratorKeysEnabled(This,areBrowserAcceleratorKeysEnabled) ) + +#define ICoreWebView2Settings7_put_AreBrowserAcceleratorKeysEnabled(This,areBrowserAcceleratorKeysEnabled) \ + ( (This)->lpVtbl -> put_AreBrowserAcceleratorKeysEnabled(This,areBrowserAcceleratorKeysEnabled) ) + + +#define ICoreWebView2Settings7_get_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsPasswordAutosaveEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsPasswordAutosaveEnabled(This,value) ) + +#define ICoreWebView2Settings7_get_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> get_IsGeneralAutofillEnabled(This,value) ) + +#define ICoreWebView2Settings7_put_IsGeneralAutofillEnabled(This,value) \ + ( (This)->lpVtbl -> put_IsGeneralAutofillEnabled(This,value) ) + + +#define ICoreWebView2Settings7_get_IsPinchZoomEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsPinchZoomEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsPinchZoomEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsPinchZoomEnabled(This,enabled) ) + + +#define ICoreWebView2Settings7_get_IsSwipeNavigationEnabled(This,enabled) \ + ( (This)->lpVtbl -> get_IsSwipeNavigationEnabled(This,enabled) ) + +#define ICoreWebView2Settings7_put_IsSwipeNavigationEnabled(This,enabled) \ + ( (This)->lpVtbl -> put_IsSwipeNavigationEnabled(This,enabled) ) + + +#define ICoreWebView2Settings7_get_HiddenPdfToolbarItems(This,hidden_pdf_toolbar_items) \ + ( (This)->lpVtbl -> get_HiddenPdfToolbarItems(This,hidden_pdf_toolbar_items) ) + +#define ICoreWebView2Settings7_put_HiddenPdfToolbarItems(This,hidden_pdf_toolbar_items) \ + ( (This)->lpVtbl -> put_HiddenPdfToolbarItems(This,hidden_pdf_toolbar_items) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2Settings7_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ #define __ICoreWebView2SourceChangedEventArgs_INTERFACE_DEFINED__ @@ -17346,18 +30525,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SourceChangedEventArgs { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2SourceChangedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2SourceChangedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2SourceChangedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2SourceChangedEventArgs, get_IsNewDocument) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsNewDocument )( ICoreWebView2SourceChangedEventArgs * This, /* [retval][out] */ BOOL *isNewDocument); @@ -17427,18 +30610,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2SourceChangedEventHand { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2SourceChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2SourceChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2SourceChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2SourceChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2SourceChangedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -17509,18 +30696,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StateChangedEventHandl { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2StateChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2StateChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2StateChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2StateChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2StateChangedEventHandler * This, /* [in] */ ICoreWebView2DownloadOperation *sender, @@ -17563,6 +30754,92 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StateChangedEventHandl #endif /* __ICoreWebView2StateChangedEventHandler_INTERFACE_DEFINED__ */ +#ifndef __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2StatusBarTextChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2StatusBarTextChangedEventHandler = {0xA5E3B0D0,0x10DF,0x4156,{0xBF,0xAD,0x3B,0x43,0x86,0x7A,0xCA,0xC6}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A5E3B0D0-10DF-4156-BFAD-3B43867ACAC6") + ICoreWebView2StatusBarTextChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2StatusBarTextChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2StatusBarTextChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2StatusBarTextChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2StatusBarTextChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2StatusBarTextChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2StatusBarTextChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2StatusBarTextChangedEventHandlerVtbl; + + interface ICoreWebView2StatusBarTextChangedEventHandler + { + CONST_VTBL struct ICoreWebView2StatusBarTextChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2StatusBarTextChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2StatusBarTextChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2StatusBarTextChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2StatusBarTextChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2StatusBarTextChangedEventHandler_INTERFACE_DEFINED__ */ + + #ifndef __ICoreWebView2TrySuspendCompletedHandler_INTERFACE_DEFINED__ #define __ICoreWebView2TrySuspendCompletedHandler_INTERFACE_DEFINED__ @@ -17591,18 +30868,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2TrySuspendCompletedHan { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2TrySuspendCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2TrySuspendCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2TrySuspendCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2TrySuspendCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2TrySuspendCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -17678,26 +30959,32 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebMessageReceivedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebMessageReceivedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebMessageReceivedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebMessageReceivedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_Source) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( ICoreWebView2WebMessageReceivedEventArgs * This, /* [retval][out] */ LPWSTR *source); + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, get_WebMessageAsJson) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_WebMessageAsJson )( ICoreWebView2WebMessageReceivedEventArgs * This, /* [retval][out] */ LPWSTR *webMessageAsJson); + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventArgs, TryGetWebMessageAsString) HRESULT ( STDMETHODCALLTYPE *TryGetWebMessageAsString )( ICoreWebView2WebMessageReceivedEventArgs * This, /* [retval][out] */ LPWSTR *webMessageAsString); @@ -17773,18 +31060,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebMessageReceivedEven { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebMessageReceivedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebMessageReceivedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebMessageReceivedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebMessageReceivedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2WebMessageReceivedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -17872,42 +31163,52 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequest = { { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceRequest * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceRequest * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceRequest * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Uri) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Uri )( ICoreWebView2WebResourceRequest * This, /* [retval][out] */ LPWSTR *uri); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Uri) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Uri )( ICoreWebView2WebResourceRequest * This, /* [in] */ LPCWSTR uri); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Method) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Method )( ICoreWebView2WebResourceRequest * This, /* [retval][out] */ LPWSTR *method); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Method) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Method )( ICoreWebView2WebResourceRequest * This, /* [in] */ LPCWSTR method); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Content) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( ICoreWebView2WebResourceRequest * This, /* [retval][out] */ IStream **content); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, put_Content) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( ICoreWebView2WebResourceRequest * This, /* [in] */ IStream *content); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequest, get_Headers) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( ICoreWebView2WebResourceRequest * This, /* [retval][out] */ ICoreWebView2HttpRequestHeaders **headers); @@ -18006,34 +31307,42 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequestedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceRequestedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceRequestedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Request) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_Response) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2WebResourceResponse **response); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, put_Response) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Response )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [in] */ ICoreWebView2WebResourceResponse *response); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, GetDeferral) HRESULT ( STDMETHODCALLTYPE *GetDeferral )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [retval][out] */ ICoreWebView2Deferral **deferral); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventArgs, get_ResourceContext) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ResourceContext )( ICoreWebView2WebResourceRequestedEventArgs * This, /* [retval][out] */ COREWEBVIEW2_WEB_RESOURCE_CONTEXT *context); @@ -18115,18 +31424,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceRequestedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2WebResourceRequestedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -18214,42 +31527,52 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponse = { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceResponse * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceResponse * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceResponse * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_Content) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Content )( ICoreWebView2WebResourceResponse * This, /* [retval][out] */ IStream **content); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_Content) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_Content )( ICoreWebView2WebResourceResponse * This, /* [in] */ IStream *content); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_Headers) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( ICoreWebView2WebResourceResponse * This, /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_StatusCode) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusCode )( ICoreWebView2WebResourceResponse * This, /* [retval][out] */ int *statusCode); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_StatusCode) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_StatusCode )( ICoreWebView2WebResourceResponse * This, /* [in] */ int statusCode); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, get_ReasonPhrase) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReasonPhrase )( ICoreWebView2WebResourceResponse * This, /* [retval][out] */ LPWSTR *reasonPhrase); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponse, put_ReasonPhrase) /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ReasonPhrase )( ICoreWebView2WebResourceResponse * This, /* [in] */ LPCWSTR reasonPhrase); @@ -18337,18 +31660,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseRec { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceResponseReceivedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceResponseReceivedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceResponseReceivedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2WebResourceResponseReceivedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -18421,22 +31748,27 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseRec { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceResponseReceivedEventArgs * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceResponseReceivedEventArgs * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceResponseReceivedEventArgs * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventArgs, get_Request) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Request )( ICoreWebView2WebResourceResponseReceivedEventArgs * This, /* [retval][out] */ ICoreWebView2WebResourceRequest **request); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseReceivedEventArgs, get_Response) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Response )( ICoreWebView2WebResourceResponseReceivedEventArgs * This, /* [retval][out] */ ICoreWebView2WebResourceResponseView **response); @@ -18517,30 +31849,37 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseVie { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceResponseView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceResponseView * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceResponseView * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_Headers) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Headers )( ICoreWebView2WebResourceResponseView * This, /* [retval][out] */ ICoreWebView2HttpResponseHeaders **headers); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_StatusCode) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusCode )( ICoreWebView2WebResourceResponseView * This, /* [retval][out] */ int *statusCode); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, get_ReasonPhrase) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ReasonPhrase )( ICoreWebView2WebResourceResponseView * This, /* [retval][out] */ LPWSTR *reasonPhrase); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseView, GetContent) HRESULT ( STDMETHODCALLTYPE *GetContent )( ICoreWebView2WebResourceResponseView * This, /* [in] */ ICoreWebView2WebResourceResponseViewGetContentCompletedHandler *handler); @@ -18619,18 +31958,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WebResourceResponseVie { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2WebResourceResponseViewGetContentCompletedHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2WebResourceResponseViewGetContentCompletedHandler * This, /* [in] */ HRESULT errorCode, @@ -18701,18 +32044,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WindowCloseRequestedEv { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WindowCloseRequestedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WindowCloseRequestedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WindowCloseRequestedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2WindowCloseRequestedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2WindowCloseRequestedEventHandler * This, /* [in] */ ICoreWebView2 *sender, @@ -18809,54 +32156,67 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2WindowFeatures = {0x5e { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2WindowFeatures * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2WindowFeatures * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2WindowFeatures * This); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_HasPosition) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasPosition )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_HasSize) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_HasSize )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Left) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Left )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Top) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Top )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Height) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Height )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_Width) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Width )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ UINT32 *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayMenuBar) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayMenuBar )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayStatus) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayStatus )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayToolbar) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayToolbar )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); + DECLSPEC_XFGVIRT(ICoreWebView2WindowFeatures, get_ShouldDisplayScrollBars) /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ShouldDisplayScrollBars )( ICoreWebView2WindowFeatures * This, /* [retval][out] */ BOOL *value); @@ -18953,18 +32313,22 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ZoomFactorChangedEvent { BEGIN_INTERFACE + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ICoreWebView2ZoomFactorChangedEventHandler * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ _COM_Outptr_ void **ppvObject); + DECLSPEC_XFGVIRT(IUnknown, AddRef) ULONG ( STDMETHODCALLTYPE *AddRef )( ICoreWebView2ZoomFactorChangedEventHandler * This); + DECLSPEC_XFGVIRT(IUnknown, Release) ULONG ( STDMETHODCALLTYPE *Release )( ICoreWebView2ZoomFactorChangedEventHandler * This); + DECLSPEC_XFGVIRT(ICoreWebView2ZoomFactorChangedEventHandler, Invoke) HRESULT ( STDMETHODCALLTYPE *Invoke )( ICoreWebView2ZoomFactorChangedEventHandler * This, /* [in] */ ICoreWebView2Controller *sender, @@ -19006,6 +32370,2627 @@ EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ZoomFactorChangedEvent #endif /* __ICoreWebView2ZoomFactorChangedEventHandler_INTERFACE_DEFINED__ */ + +#ifndef __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsMutedChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsMutedChangedEventHandler = {0x57D90347,0xCD0E,0x4952,{0xA4,0xA2,0x74,0x83,0xA2,0x75,0x6F,0x08}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("57D90347-CD0E-4952-A4A2-7483A2756F08") + ICoreWebView2IsMutedChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsMutedChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsMutedChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsMutedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsMutedChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsMutedChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsMutedChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsMutedChangedEventHandlerVtbl; + + interface ICoreWebView2IsMutedChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsMutedChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsMutedChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsMutedChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsMutedChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsMutedChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsMutedChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2IsDocumentPlayingAudioChangedEventHandler = {0x5DEF109A,0x2F4B,0x49FA,{0xB7,0xF6,0x11,0xC3,0x9E,0x51,0x33,0x28}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5DEF109A-2F4B-49FA-B7F6-11C39E513328") + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2IsDocumentPlayingAudioChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2IsDocumentPlayingAudioChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl; + + interface ICoreWebView2IsDocumentPlayingAudioChangedEventHandler + { + CONST_VTBL struct ICoreWebView2IsDocumentPlayingAudioChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2IsDocumentPlayingAudioChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfo = {0x84FA7612,0x3F3D,0x4FBF,{0x88,0x9D,0xFA,0xD0,0x00,0x49,0x2D,0x72}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("84FA7612-3F3D-4FBF-889D-FAD000492D72") + ICoreWebView2ProcessInfo : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ProcessId( + /* [retval][out] */ INT32 *value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Kind( + /* [retval][out] */ COREWEBVIEW2_PROCESS_KIND *kind) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfoVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfo * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfo * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfo * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfo, get_ProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProcessId )( + ICoreWebView2ProcessInfo * This, + /* [retval][out] */ INT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfo, get_Kind) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Kind )( + ICoreWebView2ProcessInfo * This, + /* [retval][out] */ COREWEBVIEW2_PROCESS_KIND *kind); + + END_INTERFACE + } ICoreWebView2ProcessInfoVtbl; + + interface ICoreWebView2ProcessInfo + { + CONST_VTBL struct ICoreWebView2ProcessInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfo_get_ProcessId(This,value) \ + ( (This)->lpVtbl -> get_ProcessId(This,value) ) + +#define ICoreWebView2ProcessInfo_get_Kind(This,kind) \ + ( (This)->lpVtbl -> get_Kind(This,kind) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfo_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfoCollection */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfoCollection = {0x402B99CD,0xA0CC,0x4FA5,{0xB7,0xA5,0x51,0xD8,0x6A,0x1D,0x23,0x39}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("402B99CD-A0CC-4FA5-B7A5-51D86A1D2339") + ICoreWebView2ProcessInfoCollection : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ UINT *count) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAtIndex( + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessInfo **processInfo) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfoCollectionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfoCollection * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfoCollection * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfoCollection * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfoCollection, get_Count) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + ICoreWebView2ProcessInfoCollection * This, + /* [retval][out] */ UINT *count); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfoCollection, GetValueAtIndex) + HRESULT ( STDMETHODCALLTYPE *GetValueAtIndex )( + ICoreWebView2ProcessInfoCollection * This, + /* [in] */ UINT32 index, + /* [retval][out] */ ICoreWebView2ProcessInfo **processInfo); + + END_INTERFACE + } ICoreWebView2ProcessInfoCollectionVtbl; + + interface ICoreWebView2ProcessInfoCollection + { + CONST_VTBL struct ICoreWebView2ProcessInfoCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfoCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfoCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfoCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfoCollection_get_Count(This,count) \ + ( (This)->lpVtbl -> get_Count(This,count) ) + +#define ICoreWebView2ProcessInfoCollection_GetValueAtIndex(This,index,processInfo) \ + ( (This)->lpVtbl -> GetValueAtIndex(This,index,processInfo) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfoCollection_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2ProcessInfosChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2ProcessInfosChangedEventHandler = {0xF4AF0C39,0x44B9,0x40E9,{0x8B,0x11,0x04,0x84,0xCF,0xB9,0xE0,0xA1}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F4AF0C39-44B9-40E9-8B11-0484CFB9E0A1") + ICoreWebView2ProcessInfosChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2ProcessInfosChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2ProcessInfosChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2ProcessInfosChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2ProcessInfosChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2ProcessInfosChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2ProcessInfosChangedEventHandler * This, + /* [in] */ ICoreWebView2Environment *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2ProcessInfosChangedEventHandlerVtbl; + + interface ICoreWebView2ProcessInfosChangedEventHandler + { + CONST_VTBL struct ICoreWebView2ProcessInfosChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2ProcessInfosChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2ProcessInfosChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2ProcessInfosChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2ProcessInfosChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2ProcessInfosChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2FaviconChangedEventHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2FaviconChangedEventHandler = {0x2913DA94,0x833D,0x4DE0,{0x8D,0xCA,0x90,0x0F,0xC5,0x24,0xA1,0xA4}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2913DA94-833D-4DE0-8DCA-900FC524A1A4") + ICoreWebView2FaviconChangedEventHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2FaviconChangedEventHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2FaviconChangedEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2FaviconChangedEventHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2FaviconChangedEventHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2FaviconChangedEventHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2FaviconChangedEventHandler * This, + /* [in] */ ICoreWebView2 *sender, + /* [in] */ IUnknown *args); + + END_INTERFACE + } ICoreWebView2FaviconChangedEventHandlerVtbl; + + interface ICoreWebView2FaviconChangedEventHandler + { + CONST_VTBL struct ICoreWebView2FaviconChangedEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2FaviconChangedEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2FaviconChangedEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2FaviconChangedEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2FaviconChangedEventHandler_Invoke(This,sender,args) \ + ( (This)->lpVtbl -> Invoke(This,sender,args) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2FaviconChangedEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ +#define __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ + +/* interface ICoreWebView2GetFaviconCompletedHandler */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2GetFaviconCompletedHandler = {0xA2508329,0x7DA8,0x49D7,{0x8C,0x05,0xFA,0x12,0x5E,0x4A,0xEE,0x8D}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A2508329-7DA8-49D7-8C05-FA125E4AEE8D") + ICoreWebView2GetFaviconCompletedHandler : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Invoke( + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *faviconStream) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2GetFaviconCompletedHandlerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2GetFaviconCompletedHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2GetFaviconCompletedHandler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2GetFaviconCompletedHandler * This); + + DECLSPEC_XFGVIRT(ICoreWebView2GetFaviconCompletedHandler, Invoke) + HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoreWebView2GetFaviconCompletedHandler * This, + /* [in] */ HRESULT errorCode, + /* [in] */ IStream *faviconStream); + + END_INTERFACE + } ICoreWebView2GetFaviconCompletedHandlerVtbl; + + interface ICoreWebView2GetFaviconCompletedHandler + { + CONST_VTBL struct ICoreWebView2GetFaviconCompletedHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2GetFaviconCompletedHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2GetFaviconCompletedHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2GetFaviconCompletedHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2GetFaviconCompletedHandler_Invoke(This,errorCode,faviconStream) \ + ( (This)->lpVtbl -> Invoke(This,errorCode,faviconStream) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2GetFaviconCompletedHandler_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_14_INTERFACE_DEFINED__ +#define __ICoreWebView2_14_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_14 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_14 = {0x6DAA4F10,0x4A90,0x4753,{0x88,0x98,0x77,0xC5,0xDF,0x53,0x41,0x65}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6DAA4F10-4A90-4753-8898-77C5DF534165") + ICoreWebView2_14 : public ICoreWebView2_13 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_ServerCertificateErrorDetected( + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_ServerCertificateErrorDetected( + /* [in] */ EventRegistrationToken token) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearServerCertificateErrorActions( + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_14Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_14 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_14 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_14 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_14 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_14 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_14 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_14 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_14 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_14 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_14 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_14 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_14 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_14 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_14 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_14 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_14 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_14 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + END_INTERFACE + } ICoreWebView2_14Vtbl; + + interface ICoreWebView2_14 + { + CONST_VTBL struct ICoreWebView2_14Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_14_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_14_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_14_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_14_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_14_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_14_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_14_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_14_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_14_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_14_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_14_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_14_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_14_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_14_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_14_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_14_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_14_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_14_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_14_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_14_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_14_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_14_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_14_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_14_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_14_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_14_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_14_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_14_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_14_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_14_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_14_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_14_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_14_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_14_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_14_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_14_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_14_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_14_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_14_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_14_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_14_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_14_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_14_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_14_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_14_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_14_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_14_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_14_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_14_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_14_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_14_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_14_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_14_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_14_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_14_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_14_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_14_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_14_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_14_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_14_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_14_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_14_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_14_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_14_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_14_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_14_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_14_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_14_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_14_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_14_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_14_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_14_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_14_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_14_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_14_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_14_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_14_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_14_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_14_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_14_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_14_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_14_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_14_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_14_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_14_INTERFACE_DEFINED__ */ + + +#ifndef __ICoreWebView2_15_INTERFACE_DEFINED__ +#define __ICoreWebView2_15_INTERFACE_DEFINED__ + +/* interface ICoreWebView2_15 */ +/* [unique][object][uuid] */ + + +EXTERN_C __declspec(selectany) const IID IID_ICoreWebView2_15 = {0x517B2D1D,0x7DAE,0x4A66,{0xA4,0xF4,0x10,0x35,0x2F,0xFB,0x95,0x18}}; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("517B2D1D-7DAE-4A66-A4F4-10352FFB9518") + ICoreWebView2_15 : public ICoreWebView2_14 + { + public: + virtual HRESULT STDMETHODCALLTYPE add_FaviconChanged( + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token) = 0; + + virtual HRESULT STDMETHODCALLTYPE remove_FaviconChanged( + /* [in] */ EventRegistrationToken token) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_FaviconUri( + /* [retval][out] */ LPWSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFavicon( + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoreWebView2_15Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoreWebView2_15 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Settings) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Settings **settings); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_Source) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Source )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, Navigate) + HRESULT ( STDMETHODCALLTYPE *Navigate )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR uri); + + DECLSPEC_XFGVIRT(ICoreWebView2, NavigateToString) + HRESULT ( STDMETHODCALLTYPE *NavigateToString )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR htmlContent); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_NavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *add_ContentLoading )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContentLoadingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContentLoading) + HRESULT ( STDMETHODCALLTYPE *remove_ContentLoading )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *add_SourceChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2SourceChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_SourceChanged) + HRESULT ( STDMETHODCALLTYPE *remove_SourceChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *add_HistoryChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2HistoryChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_HistoryChanged) + HRESULT ( STDMETHODCALLTYPE *remove_HistoryChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_NavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_NavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationStarting) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *add_FrameNavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NavigationCompletedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_FrameNavigationCompleted) + HRESULT ( STDMETHODCALLTYPE *remove_FrameNavigationCompleted )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *add_ScriptDialogOpening )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ScriptDialogOpeningEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ScriptDialogOpening) + HRESULT ( STDMETHODCALLTYPE *remove_ScriptDialogOpening )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *add_PermissionRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2PermissionRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_PermissionRequested) + HRESULT ( STDMETHODCALLTYPE *remove_PermissionRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *add_ProcessFailed )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ProcessFailedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ProcessFailed) + HRESULT ( STDMETHODCALLTYPE *remove_ProcessFailed )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *AddScriptToExecuteOnDocumentCreated )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveScriptToExecuteOnDocumentCreated) + HRESULT ( STDMETHODCALLTYPE *RemoveScriptToExecuteOnDocumentCreated )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR id); + + DECLSPEC_XFGVIRT(ICoreWebView2, ExecuteScript) + HRESULT ( STDMETHODCALLTYPE *ExecuteScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR javaScript, + /* [in] */ ICoreWebView2ExecuteScriptCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, CapturePreview) + HRESULT ( STDMETHODCALLTYPE *CapturePreview )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + /* [in] */ IStream *imageStream, + /* [in] */ ICoreWebView2CapturePreviewCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, Reload) + HRESULT ( STDMETHODCALLTYPE *Reload )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsJson) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsJson )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR webMessageAsJson); + + DECLSPEC_XFGVIRT(ICoreWebView2, PostWebMessageAsString) + HRESULT ( STDMETHODCALLTYPE *PostWebMessageAsString )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR webMessageAsString); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebMessageReceived )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebMessageReceivedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebMessageReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebMessageReceived )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, CallDevToolsProtocolMethod) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethod )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_BrowserProcessId) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_BrowserProcessId )( + ICoreWebView2_15 * This, + /* [retval][out] */ UINT32 *value); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoBack) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoBack )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *canGoBack); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_CanGoForward) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanGoForward )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *canGoForward); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoBack) + HRESULT ( STDMETHODCALLTYPE *GoBack )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GoForward) + HRESULT ( STDMETHODCALLTYPE *GoForward )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, GetDevToolsProtocolEventReceiver) + HRESULT ( STDMETHODCALLTYPE *GetDevToolsProtocolEventReceiver )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR eventName, + /* [retval][out] */ ICoreWebView2DevToolsProtocolEventReceiver **receiver); + + DECLSPEC_XFGVIRT(ICoreWebView2, Stop) + HRESULT ( STDMETHODCALLTYPE *Stop )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *add_NewWindowRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2NewWindowRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_NewWindowRequested) + HRESULT ( STDMETHODCALLTYPE *remove_NewWindowRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *add_DocumentTitleChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DocumentTitleChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_DocumentTitleChanged) + HRESULT ( STDMETHODCALLTYPE *remove_DocumentTitleChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_DocumentTitle) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DocumentTitle )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *title); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddHostObjectToScript) + HRESULT ( STDMETHODCALLTYPE *AddHostObjectToScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR name, + /* [in] */ VARIANT *object); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveHostObjectFromScript) + HRESULT ( STDMETHODCALLTYPE *RemoveHostObjectFromScript )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR name); + + DECLSPEC_XFGVIRT(ICoreWebView2, OpenDevToolsWindow) + HRESULT ( STDMETHODCALLTYPE *OpenDevToolsWindow )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *add_ContainsFullScreenElementChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContainsFullScreenElementChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_ContainsFullScreenElementChanged) + HRESULT ( STDMETHODCALLTYPE *remove_ContainsFullScreenElementChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, get_ContainsFullScreenElement) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ContainsFullScreenElement )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *containsFullScreenElement); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WebResourceRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2, AddWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *AddWebResourceRequestedFilter )( + ICoreWebView2_15 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, RemoveWebResourceRequestedFilter) + HRESULT ( STDMETHODCALLTYPE *RemoveWebResourceRequestedFilter )( + ICoreWebView2_15 * This, + /* [in] */ const LPCWSTR uri, + /* [in] */ const COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext); + + DECLSPEC_XFGVIRT(ICoreWebView2, add_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *add_WindowCloseRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WindowCloseRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2, remove_WindowCloseRequested) + HRESULT ( STDMETHODCALLTYPE *remove_WindowCloseRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *add_WebResourceResponseReceived )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceResponseReceivedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_WebResourceResponseReceived) + HRESULT ( STDMETHODCALLTYPE *remove_WebResourceResponseReceived )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, NavigateWithWebResourceRequest) + HRESULT ( STDMETHODCALLTYPE *NavigateWithWebResourceRequest )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2WebResourceRequest *request); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, add_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *add_DOMContentLoaded )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DOMContentLoadedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, remove_DOMContentLoaded) + HRESULT ( STDMETHODCALLTYPE *remove_DOMContentLoaded )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_CookieManager) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_CookieManager )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2CookieManager **cookieManager); + + DECLSPEC_XFGVIRT(ICoreWebView2_2, get_Environment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Environment )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Environment **environment); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, TrySuspend) + HRESULT ( STDMETHODCALLTYPE *TrySuspend )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2TrySuspendCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, Resume) + HRESULT ( STDMETHODCALLTYPE *Resume )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, get_IsSuspended) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsSuspended )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *isSuspended); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, SetVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *SetVirtualHostNameToFolderMapping )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR hostName, + /* [in] */ LPCWSTR folderPath, + /* [in] */ COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + + DECLSPEC_XFGVIRT(ICoreWebView2_3, ClearVirtualHostNameToFolderMapping) + HRESULT ( STDMETHODCALLTYPE *ClearVirtualHostNameToFolderMapping )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR hostName); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *add_FrameCreated )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2FrameCreatedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_FrameCreated) + HRESULT ( STDMETHODCALLTYPE *remove_FrameCreated )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, add_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *add_DownloadStarting )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2DownloadStartingEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_4, remove_DownloadStarting) + HRESULT ( STDMETHODCALLTYPE *remove_DownloadStarting )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, add_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *add_ClientCertificateRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ClientCertificateRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_5, remove_ClientCertificateRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ClientCertificateRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_6, OpenTaskManagerWindow) + HRESULT ( STDMETHODCALLTYPE *OpenTaskManagerWindow )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_7, PrintToPdf) + HRESULT ( STDMETHODCALLTYPE *PrintToPdf )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR resultFilePath, + /* [in] */ ICoreWebView2PrintSettings *printSettings, + /* [in] */ ICoreWebView2PrintToPdfCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsMutedChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsMutedChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsMutedChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsMutedChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsMuted) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsMuted )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, put_IsMuted) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IsMuted )( + ICoreWebView2_15 * This, + /* [in] */ BOOL value); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, add_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDocumentPlayingAudioChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsDocumentPlayingAudioChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, remove_IsDocumentPlayingAudioChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDocumentPlayingAudioChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_8, get_IsDocumentPlayingAudio) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDocumentPlayingAudio )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, add_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *add_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler *handler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, remove_IsDefaultDownloadDialogOpenChanged) + HRESULT ( STDMETHODCALLTYPE *remove_IsDefaultDownloadDialogOpenChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_IsDefaultDownloadDialogOpen) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsDefaultDownloadDialogOpen )( + ICoreWebView2_15 * This, + /* [retval][out] */ BOOL *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, OpenDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *OpenDefaultDownloadDialog )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, CloseDefaultDownloadDialog) + HRESULT ( STDMETHODCALLTYPE *CloseDefaultDownloadDialog )( + ICoreWebView2_15 * This); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogCornerAlignment) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_15 * This, + /* [retval][out] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogCornerAlignment) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogCornerAlignment )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_DEFAULT_DOWNLOAD_DIALOG_CORNER_ALIGNMENT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, get_DefaultDownloadDialogMargin) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_DefaultDownloadDialogMargin )( + ICoreWebView2_15 * This, + /* [retval][out] */ POINT *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_9, put_DefaultDownloadDialogMargin) + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_DefaultDownloadDialogMargin )( + ICoreWebView2_15 * This, + /* [in] */ POINT value); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, add_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *add_BasicAuthenticationRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2BasicAuthenticationRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_10, remove_BasicAuthenticationRequested) + HRESULT ( STDMETHODCALLTYPE *remove_BasicAuthenticationRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, CallDevToolsProtocolMethodForSession) + HRESULT ( STDMETHODCALLTYPE *CallDevToolsProtocolMethodForSession )( + ICoreWebView2_15 * This, + /* [in] */ LPCWSTR sessionId, + /* [in] */ LPCWSTR methodName, + /* [in] */ LPCWSTR parametersAsJson, + /* [in] */ ICoreWebView2CallDevToolsProtocolMethodCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, add_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *add_ContextMenuRequested )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ContextMenuRequestedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_11, remove_ContextMenuRequested) + HRESULT ( STDMETHODCALLTYPE *remove_ContextMenuRequested )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, add_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *add_StatusBarTextChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2StatusBarTextChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, remove_StatusBarTextChanged) + HRESULT ( STDMETHODCALLTYPE *remove_StatusBarTextChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_12, get_StatusBarText) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_StatusBarText )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_13, get_Profile) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Profile )( + ICoreWebView2_15 * This, + /* [retval][out] */ ICoreWebView2Profile **value); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, add_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *add_ServerCertificateErrorDetected )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ServerCertificateErrorDetectedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, remove_ServerCertificateErrorDetected) + HRESULT ( STDMETHODCALLTYPE *remove_ServerCertificateErrorDetected )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_14, ClearServerCertificateErrorActions) + HRESULT ( STDMETHODCALLTYPE *ClearServerCertificateErrorActions )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler *handler); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, add_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *add_FaviconChanged )( + ICoreWebView2_15 * This, + /* [in] */ ICoreWebView2FaviconChangedEventHandler *eventHandler, + /* [out] */ EventRegistrationToken *token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, remove_FaviconChanged) + HRESULT ( STDMETHODCALLTYPE *remove_FaviconChanged )( + ICoreWebView2_15 * This, + /* [in] */ EventRegistrationToken token); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, get_FaviconUri) + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_FaviconUri )( + ICoreWebView2_15 * This, + /* [retval][out] */ LPWSTR *value); + + DECLSPEC_XFGVIRT(ICoreWebView2_15, GetFavicon) + HRESULT ( STDMETHODCALLTYPE *GetFavicon )( + ICoreWebView2_15 * This, + /* [in] */ COREWEBVIEW2_FAVICON_IMAGE_FORMAT format, + /* [in] */ ICoreWebView2GetFaviconCompletedHandler *completedHandler); + + END_INTERFACE + } ICoreWebView2_15Vtbl; + + interface ICoreWebView2_15 + { + CONST_VTBL struct ICoreWebView2_15Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoreWebView2_15_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoreWebView2_15_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoreWebView2_15_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoreWebView2_15_get_Settings(This,settings) \ + ( (This)->lpVtbl -> get_Settings(This,settings) ) + +#define ICoreWebView2_15_get_Source(This,uri) \ + ( (This)->lpVtbl -> get_Source(This,uri) ) + +#define ICoreWebView2_15_Navigate(This,uri) \ + ( (This)->lpVtbl -> Navigate(This,uri) ) + +#define ICoreWebView2_15_NavigateToString(This,htmlContent) \ + ( (This)->lpVtbl -> NavigateToString(This,htmlContent) ) + +#define ICoreWebView2_15_add_NavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_NavigationStarting(This,token) ) + +#define ICoreWebView2_15_add_ContentLoading(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContentLoading(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContentLoading(This,token) \ + ( (This)->lpVtbl -> remove_ContentLoading(This,token) ) + +#define ICoreWebView2_15_add_SourceChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_SourceChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_SourceChanged(This,token) \ + ( (This)->lpVtbl -> remove_SourceChanged(This,token) ) + +#define ICoreWebView2_15_add_HistoryChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_HistoryChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_HistoryChanged(This,token) \ + ( (This)->lpVtbl -> remove_HistoryChanged(This,token) ) + +#define ICoreWebView2_15_add_NavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_NavigationCompleted(This,token) ) + +#define ICoreWebView2_15_add_FrameNavigationStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameNavigationStarting(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationStarting(This,token) ) + +#define ICoreWebView2_15_add_FrameNavigationCompleted(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameNavigationCompleted(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameNavigationCompleted(This,token) \ + ( (This)->lpVtbl -> remove_FrameNavigationCompleted(This,token) ) + +#define ICoreWebView2_15_add_ScriptDialogOpening(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ScriptDialogOpening(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ScriptDialogOpening(This,token) \ + ( (This)->lpVtbl -> remove_ScriptDialogOpening(This,token) ) + +#define ICoreWebView2_15_add_PermissionRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_PermissionRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_PermissionRequested(This,token) \ + ( (This)->lpVtbl -> remove_PermissionRequested(This,token) ) + +#define ICoreWebView2_15_add_ProcessFailed(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ProcessFailed(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ProcessFailed(This,token) \ + ( (This)->lpVtbl -> remove_ProcessFailed(This,token) ) + +#define ICoreWebView2_15_AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) \ + ( (This)->lpVtbl -> AddScriptToExecuteOnDocumentCreated(This,javaScript,handler) ) + +#define ICoreWebView2_15_RemoveScriptToExecuteOnDocumentCreated(This,id) \ + ( (This)->lpVtbl -> RemoveScriptToExecuteOnDocumentCreated(This,id) ) + +#define ICoreWebView2_15_ExecuteScript(This,javaScript,handler) \ + ( (This)->lpVtbl -> ExecuteScript(This,javaScript,handler) ) + +#define ICoreWebView2_15_CapturePreview(This,imageFormat,imageStream,handler) \ + ( (This)->lpVtbl -> CapturePreview(This,imageFormat,imageStream,handler) ) + +#define ICoreWebView2_15_Reload(This) \ + ( (This)->lpVtbl -> Reload(This) ) + +#define ICoreWebView2_15_PostWebMessageAsJson(This,webMessageAsJson) \ + ( (This)->lpVtbl -> PostWebMessageAsJson(This,webMessageAsJson) ) + +#define ICoreWebView2_15_PostWebMessageAsString(This,webMessageAsString) \ + ( (This)->lpVtbl -> PostWebMessageAsString(This,webMessageAsString) ) + +#define ICoreWebView2_15_add_WebMessageReceived(This,handler,token) \ + ( (This)->lpVtbl -> add_WebMessageReceived(This,handler,token) ) + +#define ICoreWebView2_15_remove_WebMessageReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebMessageReceived(This,token) ) + +#define ICoreWebView2_15_CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethod(This,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_15_get_BrowserProcessId(This,value) \ + ( (This)->lpVtbl -> get_BrowserProcessId(This,value) ) + +#define ICoreWebView2_15_get_CanGoBack(This,canGoBack) \ + ( (This)->lpVtbl -> get_CanGoBack(This,canGoBack) ) + +#define ICoreWebView2_15_get_CanGoForward(This,canGoForward) \ + ( (This)->lpVtbl -> get_CanGoForward(This,canGoForward) ) + +#define ICoreWebView2_15_GoBack(This) \ + ( (This)->lpVtbl -> GoBack(This) ) + +#define ICoreWebView2_15_GoForward(This) \ + ( (This)->lpVtbl -> GoForward(This) ) + +#define ICoreWebView2_15_GetDevToolsProtocolEventReceiver(This,eventName,receiver) \ + ( (This)->lpVtbl -> GetDevToolsProtocolEventReceiver(This,eventName,receiver) ) + +#define ICoreWebView2_15_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define ICoreWebView2_15_add_NewWindowRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_NewWindowRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_NewWindowRequested(This,token) \ + ( (This)->lpVtbl -> remove_NewWindowRequested(This,token) ) + +#define ICoreWebView2_15_add_DocumentTitleChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DocumentTitleChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DocumentTitleChanged(This,token) \ + ( (This)->lpVtbl -> remove_DocumentTitleChanged(This,token) ) + +#define ICoreWebView2_15_get_DocumentTitle(This,title) \ + ( (This)->lpVtbl -> get_DocumentTitle(This,title) ) + +#define ICoreWebView2_15_AddHostObjectToScript(This,name,object) \ + ( (This)->lpVtbl -> AddHostObjectToScript(This,name,object) ) + +#define ICoreWebView2_15_RemoveHostObjectFromScript(This,name) \ + ( (This)->lpVtbl -> RemoveHostObjectFromScript(This,name) ) + +#define ICoreWebView2_15_OpenDevToolsWindow(This) \ + ( (This)->lpVtbl -> OpenDevToolsWindow(This) ) + +#define ICoreWebView2_15_add_ContainsFullScreenElementChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContainsFullScreenElementChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContainsFullScreenElementChanged(This,token) \ + ( (This)->lpVtbl -> remove_ContainsFullScreenElementChanged(This,token) ) + +#define ICoreWebView2_15_get_ContainsFullScreenElement(This,containsFullScreenElement) \ + ( (This)->lpVtbl -> get_ContainsFullScreenElement(This,containsFullScreenElement) ) + +#define ICoreWebView2_15_add_WebResourceRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WebResourceRequested(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceRequested(This,token) ) + +#define ICoreWebView2_15_AddWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> AddWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_15_RemoveWebResourceRequestedFilter(This,uri,resourceContext) \ + ( (This)->lpVtbl -> RemoveWebResourceRequestedFilter(This,uri,resourceContext) ) + +#define ICoreWebView2_15_add_WindowCloseRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WindowCloseRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WindowCloseRequested(This,token) \ + ( (This)->lpVtbl -> remove_WindowCloseRequested(This,token) ) + + +#define ICoreWebView2_15_add_WebResourceResponseReceived(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_WebResourceResponseReceived(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_WebResourceResponseReceived(This,token) \ + ( (This)->lpVtbl -> remove_WebResourceResponseReceived(This,token) ) + +#define ICoreWebView2_15_NavigateWithWebResourceRequest(This,request) \ + ( (This)->lpVtbl -> NavigateWithWebResourceRequest(This,request) ) + +#define ICoreWebView2_15_add_DOMContentLoaded(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DOMContentLoaded(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DOMContentLoaded(This,token) \ + ( (This)->lpVtbl -> remove_DOMContentLoaded(This,token) ) + +#define ICoreWebView2_15_get_CookieManager(This,cookieManager) \ + ( (This)->lpVtbl -> get_CookieManager(This,cookieManager) ) + +#define ICoreWebView2_15_get_Environment(This,environment) \ + ( (This)->lpVtbl -> get_Environment(This,environment) ) + + +#define ICoreWebView2_15_TrySuspend(This,handler) \ + ( (This)->lpVtbl -> TrySuspend(This,handler) ) + +#define ICoreWebView2_15_Resume(This) \ + ( (This)->lpVtbl -> Resume(This) ) + +#define ICoreWebView2_15_get_IsSuspended(This,isSuspended) \ + ( (This)->lpVtbl -> get_IsSuspended(This,isSuspended) ) + +#define ICoreWebView2_15_SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) \ + ( (This)->lpVtbl -> SetVirtualHostNameToFolderMapping(This,hostName,folderPath,accessKind) ) + +#define ICoreWebView2_15_ClearVirtualHostNameToFolderMapping(This,hostName) \ + ( (This)->lpVtbl -> ClearVirtualHostNameToFolderMapping(This,hostName) ) + + +#define ICoreWebView2_15_add_FrameCreated(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FrameCreated(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FrameCreated(This,token) \ + ( (This)->lpVtbl -> remove_FrameCreated(This,token) ) + +#define ICoreWebView2_15_add_DownloadStarting(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_DownloadStarting(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_DownloadStarting(This,token) \ + ( (This)->lpVtbl -> remove_DownloadStarting(This,token) ) + + +#define ICoreWebView2_15_add_ClientCertificateRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ClientCertificateRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ClientCertificateRequested(This,token) \ + ( (This)->lpVtbl -> remove_ClientCertificateRequested(This,token) ) + + +#define ICoreWebView2_15_OpenTaskManagerWindow(This) \ + ( (This)->lpVtbl -> OpenTaskManagerWindow(This) ) + + +#define ICoreWebView2_15_PrintToPdf(This,resultFilePath,printSettings,handler) \ + ( (This)->lpVtbl -> PrintToPdf(This,resultFilePath,printSettings,handler) ) + + +#define ICoreWebView2_15_add_IsMutedChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsMutedChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_IsMutedChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsMutedChanged(This,token) ) + +#define ICoreWebView2_15_get_IsMuted(This,value) \ + ( (This)->lpVtbl -> get_IsMuted(This,value) ) + +#define ICoreWebView2_15_put_IsMuted(This,value) \ + ( (This)->lpVtbl -> put_IsMuted(This,value) ) + +#define ICoreWebView2_15_add_IsDocumentPlayingAudioChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_IsDocumentPlayingAudioChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_IsDocumentPlayingAudioChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDocumentPlayingAudioChanged(This,token) ) + +#define ICoreWebView2_15_get_IsDocumentPlayingAudio(This,value) \ + ( (This)->lpVtbl -> get_IsDocumentPlayingAudio(This,value) ) + + +#define ICoreWebView2_15_add_IsDefaultDownloadDialogOpenChanged(This,handler,token) \ + ( (This)->lpVtbl -> add_IsDefaultDownloadDialogOpenChanged(This,handler,token) ) + +#define ICoreWebView2_15_remove_IsDefaultDownloadDialogOpenChanged(This,token) \ + ( (This)->lpVtbl -> remove_IsDefaultDownloadDialogOpenChanged(This,token) ) + +#define ICoreWebView2_15_get_IsDefaultDownloadDialogOpen(This,value) \ + ( (This)->lpVtbl -> get_IsDefaultDownloadDialogOpen(This,value) ) + +#define ICoreWebView2_15_OpenDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> OpenDefaultDownloadDialog(This) ) + +#define ICoreWebView2_15_CloseDefaultDownloadDialog(This) \ + ( (This)->lpVtbl -> CloseDefaultDownloadDialog(This) ) + +#define ICoreWebView2_15_get_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_15_put_DefaultDownloadDialogCornerAlignment(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogCornerAlignment(This,value) ) + +#define ICoreWebView2_15_get_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> get_DefaultDownloadDialogMargin(This,value) ) + +#define ICoreWebView2_15_put_DefaultDownloadDialogMargin(This,value) \ + ( (This)->lpVtbl -> put_DefaultDownloadDialogMargin(This,value) ) + + +#define ICoreWebView2_15_add_BasicAuthenticationRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_BasicAuthenticationRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_BasicAuthenticationRequested(This,token) \ + ( (This)->lpVtbl -> remove_BasicAuthenticationRequested(This,token) ) + + +#define ICoreWebView2_15_CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) \ + ( (This)->lpVtbl -> CallDevToolsProtocolMethodForSession(This,sessionId,methodName,parametersAsJson,handler) ) + +#define ICoreWebView2_15_add_ContextMenuRequested(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ContextMenuRequested(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ContextMenuRequested(This,token) \ + ( (This)->lpVtbl -> remove_ContextMenuRequested(This,token) ) + + +#define ICoreWebView2_15_add_StatusBarTextChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_StatusBarTextChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_StatusBarTextChanged(This,token) \ + ( (This)->lpVtbl -> remove_StatusBarTextChanged(This,token) ) + +#define ICoreWebView2_15_get_StatusBarText(This,value) \ + ( (This)->lpVtbl -> get_StatusBarText(This,value) ) + + +#define ICoreWebView2_15_get_Profile(This,value) \ + ( (This)->lpVtbl -> get_Profile(This,value) ) + + +#define ICoreWebView2_15_add_ServerCertificateErrorDetected(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_ServerCertificateErrorDetected(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_ServerCertificateErrorDetected(This,token) \ + ( (This)->lpVtbl -> remove_ServerCertificateErrorDetected(This,token) ) + +#define ICoreWebView2_15_ClearServerCertificateErrorActions(This,handler) \ + ( (This)->lpVtbl -> ClearServerCertificateErrorActions(This,handler) ) + + +#define ICoreWebView2_15_add_FaviconChanged(This,eventHandler,token) \ + ( (This)->lpVtbl -> add_FaviconChanged(This,eventHandler,token) ) + +#define ICoreWebView2_15_remove_FaviconChanged(This,token) \ + ( (This)->lpVtbl -> remove_FaviconChanged(This,token) ) + +#define ICoreWebView2_15_get_FaviconUri(This,value) \ + ( (This)->lpVtbl -> get_FaviconUri(This,value) ) + +#define ICoreWebView2_15_GetFavicon(This,format,completedHandler) \ + ( (This)->lpVtbl -> GetFavicon(This,format,completedHandler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoreWebView2_15_INTERFACE_DEFINED__ */ + #endif /* __WebView2_LIBRARY_DEFINED__ */ /* Additional Prototypes for ALL interfaces */ diff --git a/deps/WebView2/include/WebView2EnvironmentOptions.h b/deps/WebView2/include/WebView2EnvironmentOptions.h new file mode 100644 index 0000000000..d1d4d2232e --- /dev/null +++ b/deps/WebView2/include/WebView2EnvironmentOptions.h @@ -0,0 +1,149 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef __core_webview2_environment_options_h__ +#define __core_webview2_environment_options_h__ + +#include +#include + +#include "webview2.h" +#define CORE_WEBVIEW_TARGET_PRODUCT_VERSION L"107.0.1418.22" + +#define COREWEBVIEW2ENVIRONMENTOPTIONS_STRING_PROPERTY(p) \ + public: \ + HRESULT STDMETHODCALLTYPE get_##p(LPWSTR* value) override { \ + if (!value) \ + return E_POINTER; \ + *value = m_##p.Copy(); \ + if ((*value == nullptr) && (m_##p.Get() != nullptr)) \ + return HRESULT_FROM_WIN32(GetLastError()); \ + return S_OK; \ + } \ + HRESULT STDMETHODCALLTYPE put_##p(LPCWSTR value) override { \ + LPCWSTR result = m_##p.Set(value); \ + if ((result == nullptr) && (value != nullptr)) \ + return HRESULT_FROM_WIN32(GetLastError()); \ + return S_OK; \ + } \ + \ + protected: \ + AutoCoMemString m_##p; + +#define COREWEBVIEW2ENVIRONMENTOPTIONS_BOOL_PROPERTY(p) \ + public: \ + HRESULT STDMETHODCALLTYPE get_##p(BOOL* value) override { \ + if (!value) \ + return E_POINTER; \ + *value = m_##p; \ + return S_OK; \ + } \ + HRESULT STDMETHODCALLTYPE put_##p(BOOL value) override { \ + m_##p = value; \ + return S_OK; \ + } \ + \ + protected: \ + BOOL m_##p = FALSE; + +// This is a base COM class that implements ICoreWebView2EnvironmentOptions. +template +class CoreWebView2EnvironmentOptionsBase + : public Microsoft::WRL::Implements< + Microsoft::WRL::RuntimeClassFlags, + ICoreWebView2EnvironmentOptions, + ICoreWebView2EnvironmentOptions2> { + public: + CoreWebView2EnvironmentOptionsBase() { + // Initialize the target compatible browser version value to the version of + // the browser binaries corresponding to this version of the SDK. + m_TargetCompatibleBrowserVersion.Set(CORE_WEBVIEW_TARGET_PRODUCT_VERSION); + } + + protected: + ~CoreWebView2EnvironmentOptionsBase() {} + + class AutoCoMemString { + public: + AutoCoMemString() {} + ~AutoCoMemString() { Release(); } + void Release() { + if (m_string) { + deallocate_fn(m_string); + m_string = nullptr; + } + } + + LPCWSTR Set(LPCWSTR str) { + Release(); + if (str) { + m_string = MakeCoMemString(str); + } + return m_string; + } + LPCWSTR Get() { return m_string; } + LPWSTR Copy() { + if (m_string) + return MakeCoMemString(m_string); + return nullptr; + } + + protected: + LPWSTR MakeCoMemString(LPCWSTR source) { + const size_t length = wcslen(source); + const size_t bytes = (length + 1) * sizeof(*source); + // Ensure we didn't overflow during our size calculation. + if (bytes <= length) { + return nullptr; + } + + wchar_t* result = reinterpret_cast(allocate_fn(bytes)); + if (result) + memcpy(result, source, bytes); + + return result; + } + + LPWSTR m_string = nullptr; + }; + + // ICoreWebView2EnvironmentOptions + COREWEBVIEW2ENVIRONMENTOPTIONS_STRING_PROPERTY(AdditionalBrowserArguments) + COREWEBVIEW2ENVIRONMENTOPTIONS_STRING_PROPERTY(Language) + COREWEBVIEW2ENVIRONMENTOPTIONS_STRING_PROPERTY(TargetCompatibleBrowserVersion) + COREWEBVIEW2ENVIRONMENTOPTIONS_BOOL_PROPERTY( + AllowSingleSignOnUsingOSPrimaryAccount) + + // ICoreWebView2EnvironmentOptions2 + COREWEBVIEW2ENVIRONMENTOPTIONS_BOOL_PROPERTY(ExclusiveUserDataFolderAccess) +}; + +template +class CoreWebView2EnvironmentOptionsBaseClass + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags, + CoreWebView2EnvironmentOptionsBase> { + public: + CoreWebView2EnvironmentOptionsBaseClass() {} + + protected: + ~CoreWebView2EnvironmentOptionsBaseClass() override {} +}; + +typedef CoreWebView2EnvironmentOptionsBaseClass + CoreWebView2EnvironmentOptions; + +#endif // __core_webview2_environment_options_h__ diff --git a/deps/WebView2/lib/win32/WebView2Loader.dll b/deps/WebView2/lib/win32/WebView2Loader.dll index 23329248e8..eaaee59604 100644 Binary files a/deps/WebView2/lib/win32/WebView2Loader.dll and b/deps/WebView2/lib/win32/WebView2Loader.dll differ diff --git a/deps/WebView2/lib/win32/WebView2LoaderStatic.lib b/deps/WebView2/lib/win32/WebView2LoaderStatic.lib index dcb01c6b17..5835862ff1 100644 Binary files a/deps/WebView2/lib/win32/WebView2LoaderStatic.lib and b/deps/WebView2/lib/win32/WebView2LoaderStatic.lib differ diff --git a/deps/WebView2/lib/win64/WebView2Loader.dll b/deps/WebView2/lib/win64/WebView2Loader.dll index 4681c3b59b..b317c794d5 100644 Binary files a/deps/WebView2/lib/win64/WebView2Loader.dll and b/deps/WebView2/lib/win64/WebView2Loader.dll differ diff --git a/deps/WebView2/lib/win64/WebView2LoaderStatic.lib b/deps/WebView2/lib/win64/WebView2LoaderStatic.lib index 6824936374..2b56738538 100644 Binary files a/deps/WebView2/lib/win64/WebView2LoaderStatic.lib and b/deps/WebView2/lib/win64/WebView2LoaderStatic.lib differ diff --git a/deps/wxWidgets/0001-wxWidget-fix.patch b/deps/wxWidgets/0001-wxWidget-fix.patch index 8541c58caa..e60f46402d 100644 --- a/deps/wxWidgets/0001-wxWidget-fix.patch +++ b/deps/wxWidgets/0001-wxWidget-fix.patch @@ -14,6 +14,19 @@ index 0bc4f934b9..479431a69c 100644 find_package(WAYLANDEGL) if(WAYLANDEGL_FOUND AND wxHAVE_GDK_WAYLAND) list(APPEND OPENGL_LIBRARIES ${WAYLANDEGL_LIBRARIES}) +diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt +index cc3298ff33..8adbeaea4f 100644 +--- a/build/cmake/lib/webview/CMakeLists.txt ++++ b/build/cmake/lib/webview/CMakeLists.txt +@@ -56,7 +56,7 @@ if(APPLE) + elseif(WXMSW) + if(wxUSE_WEBVIEW_EDGE) + # Update the following variables if updating WebView2 SDK +- set(WEBVIEW2_VERSION "1.0.705.50") ++ set(WEBVIEW2_VERSION "1.0.1418.22") + set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") + set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") + diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h index 09ad8c8ef3..3c0c2d8f7e 100644 --- a/include/wx/fontutil.h diff --git a/localazy.json b/localazy.json index 42403bb53f..b88f11cb9b 100644 --- a/localazy.json +++ b/localazy.json @@ -38,6 +38,11 @@ "type": "po", "pattern": "bbl/i18n/hu/BambuStudio_hu.po", "lang": "hu" + }, + { + "type": "po", + "pattern": "bbl/i18n/ja/BambuStudio_ja.po", + "lang": "ja" } ] }, diff --git a/resources/config.json b/resources/config.json index f8dafe4148..c979710858 100644 --- a/resources/config.json +++ b/resources/config.json @@ -9,22 +9,21 @@ "FUNC_BUILDPLATE_MARKER_DETECT": false, "FUNC_FLOW_CALIBRATION": false, "FUNC_MONITORING": false, - "FUNC_TIMELAPSE": false, "FUNC_MEDIA_FILE": false, "FUNC_REMOTE_TUNNEL": false, "FUNC_LOCAL_TUNNEL": true, "FUNC_VIRTUAL_CAMERA" : false, "FUNC_PRINT_WITHOUT_SD": false, "FUNC_ALTER_RESOLUTION": false, - "FUNC_AUTO_SWITCH_FILAMENT": false, + "FUNC_CHAMBER_FAN" : false, "FUNC_EXTRUSION_CALI": true, - "FUNC_PRINT_ALL" : false, - "FUNC_CHAMBER_FAN" : false + "FUNC_PRINT_ALL" : false }, "camera_resolution":["720p"], "bed_temperature_limit": 120, "model_id": "C11", "printer_type": "C11", + "ftp_folder" : "sdcard/", "printer_thumbnail_image": "printer_thumbnail_p1p" }, { diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo new file mode 100644 index 0000000000..5eefc0ed9f Binary files /dev/null and b/resources/i18n/ja/BambuStudio.mo differ diff --git a/resources/images/ams_mapping_container.svg b/resources/images/ams_mapping_container.svg new file mode 100644 index 0000000000..e33702e103 --- /dev/null +++ b/resources/images/ams_mapping_container.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/im_all_plates_stats.svg b/resources/images/im_all_plates_stats.svg new file mode 100644 index 0000000000..f2a781004d --- /dev/null +++ b/resources/images/im_all_plates_stats.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/im_all_plates_stats_transparent.svg b/resources/images/im_all_plates_stats_transparent.svg new file mode 100644 index 0000000000..c52a4cb079 --- /dev/null +++ b/resources/images/im_all_plates_stats_transparent.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/im_text_search.svg b/resources/images/im_text_search.svg new file mode 100644 index 0000000000..64abb3d222 --- /dev/null +++ b/resources/images/im_text_search.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/im_text_search_close.svg b/resources/images/im_text_search_close.svg new file mode 100644 index 0000000000..86133d1566 --- /dev/null +++ b/resources/images/im_text_search_close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/monitor_recording_off.svg b/resources/images/monitor_recording_off.svg index 0ec26d4691..fa08204bd5 100644 --- a/resources/images/monitor_recording_off.svg +++ b/resources/images/monitor_recording_off.svg @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/resources/images/monitor_recording_on.svg b/resources/images/monitor_recording_on.svg index ed153d1265..33c348eb25 100644 --- a/resources/images/monitor_recording_on.svg +++ b/resources/images/monitor_recording_on.svg @@ -1,7 +1,7 @@ - - - - - - + + + + + + diff --git a/resources/images/monitor_timelapse_off.svg b/resources/images/monitor_timelapse_off.svg index bfe6407f0f..21d9fd69e6 100644 --- a/resources/images/monitor_timelapse_off.svg +++ b/resources/images/monitor_timelapse_off.svg @@ -1,8 +1,15 @@ - - - - - - - + + + + + + + + + + + + + + diff --git a/resources/images/monitor_timelapse_on.svg b/resources/images/monitor_timelapse_on.svg index 5e1a44a7c7..c82e3ca0a5 100644 --- a/resources/images/monitor_timelapse_on.svg +++ b/resources/images/monitor_timelapse_on.svg @@ -1,9 +1,16 @@ - - - - - - - - + + + + + + + + + + + + + + + diff --git a/resources/images/monitor_upgrade_ams.svg b/resources/images/monitor_upgrade_ams.svg index 272cc75d18..92db05dfdc 100644 --- a/resources/images/monitor_upgrade_ams.svg +++ b/resources/images/monitor_upgrade_ams.svg @@ -1,828 +1,828 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -983,12 +983,12 @@ - - - - - - - - + + + + + + + + diff --git a/resources/images/monitor_vcamera_off.svg b/resources/images/monitor_vcamera_off.svg index 1119224ef6..51609adc4a 100644 --- a/resources/images/monitor_vcamera_off.svg +++ b/resources/images/monitor_vcamera_off.svg @@ -1,8 +1,7 @@ - - - - - - - + + + + + + diff --git a/resources/images/monitor_vcamera_on.svg b/resources/images/monitor_vcamera_on.svg index be03d52393..5e741389eb 100644 --- a/resources/images/monitor_vcamera_on.svg +++ b/resources/images/monitor_vcamera_on.svg @@ -1,8 +1,8 @@ - - - - - - - + + + + + + + diff --git a/resources/images/plate_set_bedtype.svg b/resources/images/plate_set_bedtype.svg deleted file mode 100644 index f4735d007a..0000000000 --- a/resources/images/plate_set_bedtype.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_changed.svg b/resources/images/plate_set_bedtype_changed.svg deleted file mode 100644 index c4aed904b2..0000000000 --- a/resources/images/plate_set_bedtype_changed.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_changed_dark.svg b/resources/images/plate_set_bedtype_changed_dark.svg deleted file mode 100644 index 0496fd615f..0000000000 --- a/resources/images/plate_set_bedtype_changed_dark.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_changed_hover.svg b/resources/images/plate_set_bedtype_changed_hover.svg deleted file mode 100644 index 303b4fbbe6..0000000000 --- a/resources/images/plate_set_bedtype_changed_hover.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_changed_hover_dark.svg b/resources/images/plate_set_bedtype_changed_hover_dark.svg deleted file mode 100644 index fcea2f7c94..0000000000 --- a/resources/images/plate_set_bedtype_changed_hover_dark.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_dark.svg b/resources/images/plate_set_bedtype_dark.svg deleted file mode 100644 index 74c19f4dd5..0000000000 --- a/resources/images/plate_set_bedtype_dark.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_hover.svg b/resources/images/plate_set_bedtype_hover.svg deleted file mode 100644 index db07509cd0..0000000000 --- a/resources/images/plate_set_bedtype_hover.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/resources/images/plate_set_bedtype_hover_dark.svg b/resources/images/plate_set_bedtype_hover_dark.svg deleted file mode 100644 index f90a67e4c2..0000000000 --- a/resources/images/plate_set_bedtype_hover_dark.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/plate_settings.svg b/resources/images/plate_settings.svg new file mode 100644 index 0000000000..c87756cf1a --- /dev/null +++ b/resources/images/plate_settings.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_changed.svg b/resources/images/plate_settings_changed.svg new file mode 100644 index 0000000000..fe2f4797d7 --- /dev/null +++ b/resources/images/plate_settings_changed.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_changed_dark.svg b/resources/images/plate_settings_changed_dark.svg new file mode 100644 index 0000000000..46c17a8058 --- /dev/null +++ b/resources/images/plate_settings_changed_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_changed_hover.svg b/resources/images/plate_settings_changed_hover.svg new file mode 100644 index 0000000000..41f8d3df1e --- /dev/null +++ b/resources/images/plate_settings_changed_hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_changed_hover_dark.svg b/resources/images/plate_settings_changed_hover_dark.svg new file mode 100644 index 0000000000..adebb4e21f --- /dev/null +++ b/resources/images/plate_settings_changed_hover_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_dark.svg b/resources/images/plate_settings_dark.svg new file mode 100644 index 0000000000..94b11e77a5 --- /dev/null +++ b/resources/images/plate_settings_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_hover.svg b/resources/images/plate_settings_hover.svg new file mode 100644 index 0000000000..c56fe47706 --- /dev/null +++ b/resources/images/plate_settings_hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/plate_settings_hover_dark.svg b/resources/images/plate_settings_hover_dark.svg new file mode 100644 index 0000000000..276b609a79 --- /dev/null +++ b/resources/images/plate_settings_hover_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/sdcard_state_abnormal.svg b/resources/images/sdcard_state_abnormal.svg index 5798a26343..b2ac57f52a 100644 --- a/resources/images/sdcard_state_abnormal.svg +++ b/resources/images/sdcard_state_abnormal.svg @@ -1,9 +1,9 @@ - - - - - - - - + + + + + + + + diff --git a/resources/images/sdcard_state_normal.svg b/resources/images/sdcard_state_normal.svg index 5bcaec8bb0..e0ae5db617 100644 --- a/resources/images/sdcard_state_normal.svg +++ b/resources/images/sdcard_state_normal.svg @@ -1,7 +1,9 @@ - - - - - - + + + + + + + + diff --git a/resources/images/tips_arrow.svg b/resources/images/tips_arrow.svg index 571ca3e215..ba8c9ccd10 100644 --- a/resources/images/tips_arrow.svg +++ b/resources/images/tips_arrow.svg @@ -1,4 +1,3 @@ - - + diff --git a/resources/printers/ams_load.gcode b/resources/printers/ams_load.gcode new file mode 100644 index 0000000000..5f2cc89574 --- /dev/null +++ b/resources/printers/ams_load.gcode @@ -0,0 +1,51 @@ +M620 S[next_extruder] +M106 S255 +M104 S250 +M17 S +M17 X0.5 Y0.5 +G91 +G1 Y-5 F1200 +G1 Z3 +G90 +G28 X +M17 R +G1 X70 F21000 +G1 Y245 +G1 Y265 F3000 +G4 +M106 S0 +M109 S250 +G1 X90 +G1 Y255 +G1 X120 +G1 X20 Y50 F21000 +G1 Y-3 +T[next_extruder] +G1 X54 +G1 Y265 +G92 E0 +G1 E40 F180 +G4 +M104 S[new_filament_temp] +G1 X70 F15000 +G1 X76 +G1 X65 +G1 X76 +G1 X65 +G1 X90 F3000 +G1 Y255 +G1 X100 +G1 Y265 +G1 X70 F10000 +G1 X100 F5000 +G1 X70 F10000 +G1 X100 F5000 +G1 X165 F12000 +G1 Y245 +G1 X70 +G1 Y265 F3000 +G91 +G1 Z-3 F1200 +G90 +M621 S[next_extruder] + diff --git a/resources/printers/ams_unload.gcode b/resources/printers/ams_unload.gcode new file mode 100644 index 0000000000..9bfd37417d --- /dev/null +++ b/resources/printers/ams_unload.gcode @@ -0,0 +1,33 @@ +M620 S255 +M106 P1 S255 +M104 S250 +M17 S +M17 X0.5 Y0.5 +G91 +G1 Y-5 F3000 +G1 Z3 F1200 +G90 +G28 X +M17 R +G1 X70 F21000 +G1 Y245 +G1 Y265 F3000 +G4 +M106 P1 S0 +M109 S250 +G1 X90 F3000 +G1 Y255 F4000 +G1 X100 F5000 +G1 X120 F21000 +G1 X20 Y50 +G1 Y-3 +T255 +G4 +M104 S0 +G1 X70 F3000 + +G91 +G1 Z-3 F1200 +G90 +M621 S255 + diff --git a/resources/printers/filaments_blacklist.json b/resources/printers/filaments_blacklist.json new file mode 100644 index 0000000000..e5edcf9eb1 --- /dev/null +++ b/resources/printers/filaments_blacklist.json @@ -0,0 +1,30 @@ +{ + "whitelist": [ + ], + "blacklist": [ + { + "vendor": "Third Party", + "type": "TPU", + "action": "prohibition", + "description": "TPU is not supported by AMS." + }, + { + "vendor": "Third Party", + "type": "PVA", + "action": "warning", + "description": "Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use." + }, + { + "vendor": "Third Party", + "type": "PA-CF", + "action": "warning", + "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + }, + { + "vendor": "Third Party", + "type": "PLA-CF", + "action": "warning", + "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + } + ] +} diff --git a/resources/profiles/Anycubic/filament/fdm_filament_common.json b/resources/profiles/Anycubic/filament/fdm_filament_common.json index 5212d445a5..f1e09f49dc 100644 --- a/resources/profiles/Anycubic/filament/fdm_filament_common.json +++ b/resources/profiles/Anycubic/filament/fdm_filament_common.json @@ -78,6 +78,9 @@ "filament_z_hop": [ "nil" ], + "filament_z_hop_types": [ + "nil" + ], "filament_retract_restart_extra": [ "nil" ], diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 81de7c86b6..ee6ae98e48 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.04.01.04", + "version": "01.05.00.17", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -150,6 +150,106 @@ { "name":"0.40mm Standard @BBL P1P 0.8 nozzle", "sub_path":"process/0.40mm Standard @BBL P1P 0.8 nozzle.json" + }, + { + "name": "fdm_process_bbl_0.06_nozzle_0.2", + "sub_path": "process/fdm_process_bbl_0.06_nozzle_0.2.json" + }, + { + "name": "fdm_process_bbl_0.08_nozzle_0.2", + "sub_path": "process/fdm_process_bbl_0.08_nozzle_0.2.json" + }, + { + "name": "fdm_process_bbl_0.12_nozzle_0.2", + "sub_path": "process/fdm_process_bbl_0.12_nozzle_0.2.json" + }, + { + "name": "fdm_process_bbl_0.14_nozzle_0.2", + "sub_path": "process/fdm_process_bbl_0.14_nozzle_0.2.json" + }, + { + "name": "0.06mm Standard @BBL X1C 0.2 nozzle", + "sub_path": "process/0.06mm Standard @BBL X1C 0.2 nozzle.json" + }, + { + "name": "0.08mm Standard @BBL X1C 0.2 nozzle", + "sub_path": "process/0.08mm Standard @BBL X1C 0.2 nozzle.json" + }, + { + "name": "0.12mm Standard @BBL X1C 0.2 nozzle", + "sub_path": "process/0.12mm Standard @BBL X1C 0.2 nozzle.json" + }, + { + "name": "0.14mm Standard @BBL X1C 0.2 nozzle", + "sub_path": "process/0.14mm Standard @BBL X1C 0.2 nozzle.json" + }, + { + "name": "fdm_process_bbl_0.18_nozzle_0.6", + "sub_path": "process/fdm_process_bbl_0.18_nozzle_0.6.json" + }, + { + "name": "fdm_process_bbl_0.24_nozzle_0.6", + "sub_path": "process/fdm_process_bbl_0.24_nozzle_0.6.json" + }, + { + "name": "fdm_process_bbl_0.36_nozzle_0.6", + "sub_path": "process/fdm_process_bbl_0.36_nozzle_0.6.json" + }, + { + "name": "fdm_process_bbl_0.42_nozzle_0.6", + "sub_path": "process/fdm_process_bbl_0.42_nozzle_0.6.json" + }, + { + "name": "0.18mm Standard @BBL X1C 0.6 nozzle", + "sub_path": "process/0.18mm Standard @BBL X1C 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @BBL X1C 0.6 nozzle", + "sub_path": "process/0.24mm Standard @BBL X1C 0.6 nozzle.json" + }, + { + "name": "0.36mm Standard @BBL X1C 0.6 nozzle", + "sub_path": "process/0.36mm Standard @BBL X1C 0.6 nozzle.json" + }, + { + "name": "0.42mm Standard @BBL X1C 0.6 nozzle", + "sub_path": "process/0.42mm Standard @BBL X1C 0.6 nozzle.json" + }, + { + "name": "fdm_process_bbl_0.24_nozzle_0.8", + "sub_path": "process/fdm_process_bbl_0.24_nozzle_0.8.json" + }, + { + "name": "fdm_process_bbl_0.32_nozzle_0.8", + "sub_path": "process/fdm_process_bbl_0.32_nozzle_0.8.json" + }, + { + "name": "fdm_process_bbl_0.48_nozzle_0.8", + "sub_path": "process/fdm_process_bbl_0.48_nozzle_0.8.json" + }, + { + "name": "fdm_process_bbl_0.56_nozzle_0.8", + "sub_path": "process/fdm_process_bbl_0.56_nozzle_0.8.json" + }, + { + "name": "0.24mm Standard @BBL X1C 0.8 nozzle", + "sub_path": "process/0.24mm Standard @BBL X1C 0.8 nozzle.json" + }, + { + "name": "0.32mm Standard @BBL X1C 0.8 nozzle", + "sub_path": "process/0.32mm Standard @BBL X1C 0.8 nozzle.json" + }, + { + "name": "0.48mm Standard @BBL X1C 0.8 nozzle", + "sub_path": "process/0.48mm Standard @BBL X1C 0.8 nozzle.json" + }, + { + "name": "0.56mm Standard @BBL X1C 0.8 nozzle", + "sub_path": "process/0.56mm Standard @BBL X1C 0.8 nozzle.json" + }, + { + "name":"0.30mm Strength @BBL X1C 0.6 nozzle", + "sub_path":"process/0.30mm Strength @BBL X1C 0.6 nozzle.json" } ], "filament_list": [ @@ -329,6 +429,18 @@ "name": "Generic PVA @base", "sub_path": "filament/Generic PVA @base.json" }, + { + "name": "Generic PETG-CF @base", + "sub_path": "filament/Generic PETG-CF @base.json" + }, + { + "name": "Generic PETG-CF @BBL X1C", + "sub_path": "filament/Generic PETG-CF @BBL X1C.json" + }, + { + "name": "Generic PETG-CF @BBL P1P", + "sub_path": "filament/P1P/Generic PETG-CF @BBL P1P.json" + }, { "name": "Generic PVA @0.2 nozzle", "sub_path": "filament/Generic PVA @0.2 nozzle.json" @@ -557,6 +669,10 @@ "name":"Generic PLA @BBL P1P", "sub_path":"filament/P1P/Generic PLA @BBL P1P.json" }, + { + "name":"Generic PLA Silk @BBL P1P", + "sub_path":"filament/P1P/Generic PLA Silk @BBL P1P.json" + }, { "name": "Generic ABS @BBL P1P 0.2 nozzle", "sub_path": "filament/P1P/Generic ABS @BBL P1P 0.2 nozzle.json" diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @base.json b/resources/profiles/BBL/filament/Bambu PET-CF @base.json index 459e2acbe9..1b8dc18c4b 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @base.json @@ -15,7 +15,7 @@ "PET-CF" ], "nozzle_temperature_range_low": [ - "270" + "260" ], "nozzle_temperature_range_high": [ "300" diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A @BBL X1.json b/resources/profiles/BBL/filament/Bambu TPU 95A @BBL X1.json index db5b1d0580..b1a567d263 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A @BBL X1.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A @BBL X1.json @@ -6,7 +6,7 @@ "instantiation": "true", "inherits": "Bambu TPU 95A @base", "filament_max_volumetric_speed": [ - "6.4" + "3.6" ], "compatible_printers": [ "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Generic PETG @0.2 nozzle.json b/resources/profiles/BBL/filament/Generic PETG @0.2 nozzle.json index 0965504e40..609ae6b932 100644 --- a/resources/profiles/BBL/filament/Generic PETG @0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Generic PETG @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "setting_id": "GFSG99_01", - "name": "Generic PETG @0.2 nozzle.json", + "name": "Generic PETG @0.2 nozzle", "from": "system", "instantiation": "true", "inherits": "Generic PETG @base", diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @BBL X1C.json b/resources/profiles/BBL/filament/Generic PETG-CF @BBL X1C.json new file mode 100644 index 0000000000..af5dece0dc --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PETG-CF @BBL X1C.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSG50", + "name": "Generic PETG-CF @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG-CF @base", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json new file mode 100644 index 0000000000..c52b122a90 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "filament_id": "GFG50", + "name": "Generic PETG-CF @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pet", + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.04" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "6" + ], + "fan_cooling_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu TPU 95A @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu TPU 95A @BBL P1P.json index bf58213831..85747f1d2e 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu TPU 95A @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu TPU 95A @BBL P1P.json @@ -6,7 +6,7 @@ "instantiation": "true", "inherits": "Bambu TPU 95A @base", "filament_max_volumetric_speed": [ - "6.4" + "3.6" ], "hot_plate_temp" : [ "45" diff --git a/resources/profiles/BBL/filament/P1P/Generic PETG-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Generic PETG-CF @BBL P1P.json new file mode 100644 index 0000000000..46ccf78a18 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Generic PETG-CF @BBL P1P.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "setting_id": "GFSG50_10", + "name": "Generic PETG-CF @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG-CF @base", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json new file mode 100644 index 0000000000..a6498fb75c --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "setting_id": "GFSL99_12", + "name": "Generic PLA Silk @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA @BBL P1P", + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @base.json b/resources/profiles/BBL/filament/PolyTerra PLA @base.json index ccaa910c00..306401f647 100644 --- a/resources/profiles/BBL/filament/PolyTerra PLA @base.json +++ b/resources/profiles/BBL/filament/PolyTerra PLA @base.json @@ -12,7 +12,7 @@ "25.4" ], "filament_density": [ - "1.24" + "1.31" ], "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/fdm_filament_common.json b/resources/profiles/BBL/filament/fdm_filament_common.json index 17813e6170..361fd9a9a9 100644 --- a/resources/profiles/BBL/filament/fdm_filament_common.json +++ b/resources/profiles/BBL/filament/fdm_filament_common.json @@ -87,6 +87,9 @@ "filament_z_hop": [ "nil" ], + "filament_z_hop_types": [ + "nil" + ], "filament_retract_restart_extra": [ "nil" ], diff --git a/resources/profiles/BBL/filament/fdm_filament_pa.json b/resources/profiles/BBL/filament/fdm_filament_pa.json index 0e8ceff002..4abbc279a2 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pa.json +++ b/resources/profiles/BBL/filament/fdm_filament_pa.json @@ -74,7 +74,7 @@ "108" ], "nozzle_temperature_range_low": [ - "270" + "260" ], "nozzle_temperature_range_high": [ "300" diff --git a/resources/profiles/BBL/filament/fdm_filament_pc.json b/resources/profiles/BBL/filament/fdm_filament_pc.json index 375b776812..8342bf1168 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pc.json +++ b/resources/profiles/BBL/filament/fdm_filament_pc.json @@ -77,7 +77,7 @@ "260" ], "nozzle_temperature_range_high": [ - "280" + "290" ], "slow_down_min_speed": [ "20" diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json index 19d8789abd..9f74e57285 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202201114 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "upward_compatible_machine":[ "Bambu Lab X1 0.2 nozzle", "Bambu Lab X1 Carbon 0.2 nozzle" diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index f2ecf8a727..575ed0d922 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -24,10 +24,10 @@ ], "extruder_clearance_max_radius": "56", "machine_pause_gcode": "M400 U1\n", - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202201114 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", + "machine_load_filament_time": "29", + "machine_unload_filament_time": "28", "nozzle_type": "stainless_steel", "nozzle_hrc": "20", "auxiliary_fan": "0", diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json index 8353ad8507..1e6bc5d45d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202201114 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json index a02b10aaeb..551de284b2 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json @@ -29,7 +29,7 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202201114 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P.json b/resources/profiles/BBL/machine/Bambu Lab P1P.json index c08537f872..c48372c5d4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P.json @@ -9,5 +9,5 @@ "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "hotend_model": "bbl-3dp-hotend.stl", - "default_materials": "Generic PLA @BBL P1P;Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu ABS @BBL P1P;Bambu PC @BBL P1P;Bambu Support W @BBL P1P;Bambu TPU 95A @BBL P1P;PolyTerra PLA @BBL P1P;PolyLite PLA @BBL P1P;" + "default_materials": "Generic PLA @BBL P1P;Generic PLA Silk @BBL P1P;Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu ABS @BBL P1P;Bambu PC @BBL P1P;Bambu Support W @BBL P1P;Bambu TPU 95A @BBL P1P;PolyTerra PLA @BBL P1P;PolyLite PLA @BBL P1P;" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json index ddeeb62070..0d83b274d4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json @@ -26,9 +26,10 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel", "upward_compatible_machine":[ + "Bambu Lab P1P 0.2 nozzle", "Bambu Lab X1 Carbon 0.2 nozzle" ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json index 36a85ed9e3..ea47c288c0 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json @@ -26,15 +26,15 @@ "20", "20" ], - "machine_pause_gcode": "M400 U1\n", - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "scan_first_layer": "1", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", + "machine_load_filament_time": "29", + "machine_unload_filament_time": "28", "nozzle_type": "stainless_steel", "nozzle_hrc": "20", "auxiliary_fan": "0", "upward_compatible_machine":[ - "Bambu Lab X1 Carbon 0.4 nozzle" + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle" ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json index 3f2c151b0d..fd45149256 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json @@ -26,10 +26,11 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ + "Bambu Lab P1P 0.6 nozzle", "Bambu Lab X1 Carbon 0.6 nozzle" ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json index 2aaa837ca7..44f28edecb 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json @@ -29,10 +29,11 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", - "nozzle_type": "hardened_steel", - "nozzle_hrc": "55", - "upward_compatible_machine":[ - "Bambu Lab X1 Carbon 0.8 nozzle" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "nozzle_type": "hardened_steel", + "nozzle_hrc": "55", + "upward_compatible_machine":[ + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle" ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index 9ec0c7b82b..fba24a6a05 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -26,7 +26,11 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel", - "nozzle_hrc": "20" + "nozzle_hrc": "20", + "upward_compatible_machine":[ + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index f83c11e178..9e786ff24f 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -27,11 +27,15 @@ "20" ], "machine_pause_gcode": "M400 U1\n", - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "scan_first_layer": "1", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", + "machine_load_filament_time": "29", + "machine_unload_filament_time": "28", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", - "auxiliary_fan": "1" + "auxiliary_fan": "1", + "upward_compatible_machine":[ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle" + ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index 6a43952b76..8600d18f28 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -26,5 +26,9 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "upward_compatible_machine":[ + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index 44b7ea7002..062e5b5522 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -29,5 +29,9 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230110 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0.0 ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;===== check scanner clarity ===========================\nM972 S5 P0\n;===== check scanner clarity end =======================\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "upward_compatible_machine":[ + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] } diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index 0298c41f0c..f6c9af1ae6 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -125,7 +125,7 @@ "1" ], "retract_before_wipe": [ - "70%" + "0%" ], "retract_when_changing_layer": [ "1" @@ -151,12 +151,15 @@ "deretraction_speed": [ "30" ], + "z_hop_types": [ + "Spiral Lift" + ], "nozzle_type": "hardened_steel", "silent_mode": "0", "single_extruder_multi_material": "1", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}M104 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\nM620.1 X F21000\nT[next_extruder]\nM620.1 E F{new_filament_e_feedrate}\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z[z_after_toolchange] F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", - "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little\nG1 X65 Y245 F12000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F10000\nG1 Y265 F3000\nM400 P100\nM971 S11 C10 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "machine_end_gcode": ";===== date: 20230110 =====================\n{if timelapse_type == 0}\nM991 S0 P-1 ;end traditional timelapse immediately\n{endif}\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n{if timelapse_type == 1}\nM991 S0 P-1 ;end smooth timelapse at safe pos\nM400 S2 ;wait for last picture to be taken\n{endif}\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}M104 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nT[next_extruder]\nM620.1 E F{new_filament_e_feedrate}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", + "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C10 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", + "machine_end_gcode": ";===== date: 20230118 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\nM991 S0 P-1 ;end smooth timelapse at safe pos\nM400 S2 ;wait for last picture to be taken\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n\n", "machine_pause_gcode": "M400 U1\n", "wipe": [ "1" diff --git a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..a33581c4c0 --- /dev/null +++ b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP024", + "name": "0.06mm Standard @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.06_nozzle_0.2", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..1bf42666e2 --- /dev/null +++ b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP025", + "name": "0.08mm Standard @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.08_nozzle_0.2", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..a8d7221cf7 --- /dev/null +++ b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP026", + "name": "0.12mm Standard @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.12_nozzle_0.2", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..09c0e97496 --- /dev/null +++ b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP027", + "name": "0.14mm Standard @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.14_nozzle_0.2", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json new file mode 100644 index 0000000000..071264d00b --- /dev/null +++ b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP028", + "name": "0.18mm Standard @BBL X1C 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.18_nozzle_0.6", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json new file mode 100644 index 0000000000..725940ed75 --- /dev/null +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP029", + "name": "0.24mm Standard @BBL X1C 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.24_nozzle_0.6", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..a90e2abcf7 --- /dev/null +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP032", + "name": "0.24mm Standard @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.24_nozzle_0.8", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json new file mode 100644 index 0000000000..9969845848 --- /dev/null +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "setting_id": "GP036", + "name": "0.30mm Strength @BBL X1C 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.30_nozzle_0.6", + "wall_loops": "4", + "sparse_infill_density":"25%", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..e9b61a2b6c --- /dev/null +++ b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP033", + "name": "0.32mm Standard @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.32_nozzle_0.8", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json new file mode 100644 index 0000000000..e31c2f08ed --- /dev/null +++ b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP030", + "name": "0.36mm Standard @BBL X1C 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.36_nozzle_0.6", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json new file mode 100644 index 0000000000..0e753d2256 --- /dev/null +++ b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP031", + "name": "0.42mm Standard @BBL X1C 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.42_nozzle_0.6", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..aabbbc9f93 --- /dev/null +++ b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP034", + "name": "0.48mm Standard @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.48_nozzle_0.8", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..9a56b41a54 --- /dev/null +++ b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP035", + "name": "0.56mm Standard @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_bbl_0.56_nozzle_0.8", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json new file mode 100644 index 0000000000..35257823ae --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.06_nozzle_0.2", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.06", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.08.json b/resources/profiles/BBL/process/fdm_process_bbl_0.08.json index 146295708c..0348c33427 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.08.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.08.json @@ -18,9 +18,9 @@ "internal_solid_infill_speed": "350", "top_surface_speed": "200", "gap_infill_speed": "350", - "travel_speed": "480", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10" + "overhang_4_4_speed": "10", + "support_threshold_angle": "15" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json new file mode 100644 index 0000000000..90fae21397 --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.08_nozzle_0.2", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.08", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.12.json b/resources/profiles/BBL/process/fdm_process_bbl_0.12.json index 453f58276c..dcbb2f9a4b 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.12.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.12.json @@ -18,9 +18,9 @@ "internal_solid_infill_speed": "350", "top_surface_speed": "200", "gap_infill_speed": "350", - "travel_speed": "480", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10" + "overhang_4_4_speed": "10", + "support_threshold_angle": "20" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json new file mode 100644 index 0000000000..8a76d4c7cb --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.12_nozzle_0.2", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.12", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json new file mode 100644 index 0000000000..81bd28b30c --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.14_nozzle_0.2", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.14", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.16.json b/resources/profiles/BBL/process/fdm_process_bbl_0.16.json index 08513bb82a..14186f7170 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.16.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.16.json @@ -18,9 +18,9 @@ "internal_solid_infill_speed": "300", "top_surface_speed": "200", "gap_infill_speed": "300", - "travel_speed": "480", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10" + "overhang_4_4_speed": "10", + "support_threshold_angle": "25" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json new file mode 100644 index 0000000000..1a9120fdb9 --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.18_nozzle_0.6", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.18", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.20.json b/resources/profiles/BBL/process/fdm_process_bbl_0.20.json index 66d7dc51af..12fe82dd12 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.20.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.20.json @@ -17,6 +17,5 @@ "sparse_infill_speed": "270", "internal_solid_infill_speed": "250", "top_surface_speed": "200", - "gap_infill_speed": "250", - "travel_speed": "480" + "gap_infill_speed": "250" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.24.json b/resources/profiles/BBL/process/fdm_process_bbl_0.24.json index 159410e756..3b83ea159c 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.24.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.24.json @@ -19,5 +19,5 @@ "internal_solid_infill_speed": "230", "top_surface_speed": "200", "gap_infill_speed": "230", - "travel_speed": "480" + "support_threshold_angle": "35" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.6.json new file mode 100644 index 0000000000..aec643962c --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.6.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.24_nozzle_0.6", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.24", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.8.json new file mode 100644 index 0000000000..9c1cbf2028 --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.24_nozzle_0.8.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.24_nozzle_0.8", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.24", + "initial_layer_print_height": "0.4", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.28.json b/resources/profiles/BBL/process/fdm_process_bbl_0.28.json index 22438e7098..08f80a2ef0 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.28.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.28.json @@ -19,5 +19,5 @@ "internal_solid_infill_speed": "200", "top_surface_speed": "200", "gap_infill_speed": "200", - "travel_speed": "480" + "support_threshold_angle": "40" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json index dcf321d33b..37decfe4da 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.30_nozzle_0.6.json @@ -27,7 +27,6 @@ "top_surface_speed": "150", "gap_infill_speed": "50", "bridge_speed": "30", - "travel_speed": "480", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "15", diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.32_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.32_nozzle_0.8.json new file mode 100644 index 0000000000..d64d4b6f24 --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.32_nozzle_0.8.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.32_nozzle_0.8", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.32", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.36_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.36_nozzle_0.6.json new file mode 100644 index 0000000000..a8a8a1387a --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.36_nozzle_0.6.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.36_nozzle_0.6", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.36", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json index b9340c152e..ce35f532e5 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.40_nozzle_0.8.json @@ -28,7 +28,6 @@ "top_surface_speed": "150", "gap_infill_speed": "50", "bridge_speed": "30", - "travel_speed": "480", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "25", diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.42_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.42_nozzle_0.6.json new file mode 100644 index 0000000000..7d9309c1b1 --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.42_nozzle_0.6.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.42_nozzle_0.6", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.42", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.48_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.48_nozzle_0.8.json new file mode 100644 index 0000000000..87c7d6b04c --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.48_nozzle_0.8.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.48_nozzle_0.8", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.48", + "initial_layer_print_height": "0.4", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.56_nozzle_0.8.json b/resources/profiles/BBL/process/fdm_process_bbl_0.56_nozzle_0.8.json new file mode 100644 index 0000000000..311925326a --- /dev/null +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.56_nozzle_0.8.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "name": "fdm_process_bbl_0.56_nozzle_0.8", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_bbl_common", + "layer_height": "0.56", + "initial_layer_print_height": "0.4", + "wall_loops": "2", + "bottom_shell_layers": "3", + "top_shell_layers": "3", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "outer_wall_speed": "120", + "inner_wall_speed": "150", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "gap_infill_speed": "50", + "bridge_speed": "30", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/BBL/process/fdm_process_bbl_common.json b/resources/profiles/BBL/process/fdm_process_bbl_common.json index 1341fa4f56..77ba0173e5 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_common.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_common.json @@ -101,7 +101,7 @@ "top_surface_speed": "200", "top_shell_layers": "3", "top_shell_thickness": "0.8", - "travel_speed": "480", + "travel_speed": "500", "enable_prime_tower": "1", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "35", diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 8531c050c1..298c0dec4a 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "01.04.01.00", + "version": "01.05.00.02", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality/filament/fdm_filament_common.json b/resources/profiles/Creality/filament/fdm_filament_common.json index 22c32f8ca6..9f77975119 100644 --- a/resources/profiles/Creality/filament/fdm_filament_common.json +++ b/resources/profiles/Creality/filament/fdm_filament_common.json @@ -84,6 +84,9 @@ "filament_z_hop": [ "nil" ], + "filament_z_hop_types": [ + "nil" + ], "filament_retract_restart_extra": [ "nil" ], diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 1b8cfc0337..7e4e4975d1 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "01.04.04.00", + "version": "01.05.00.02", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron/filament/fdm_filament_common.json b/resources/profiles/Voron/filament/fdm_filament_common.json index 22c32f8ca6..9f77975119 100644 --- a/resources/profiles/Voron/filament/fdm_filament_common.json +++ b/resources/profiles/Voron/filament/fdm_filament_common.json @@ -84,6 +84,9 @@ "filament_z_hop": [ "nil" ], + "filament_z_hop_types": [ + "nil" + ], "filament_retract_restart_extra": [ "nil" ], diff --git a/resources/tooltip/privacyupdate.html b/resources/tooltip/privacyupdate.html new file mode 100644 index 0000000000..3e7c22c174 --- /dev/null +++ b/resources/tooltip/privacyupdate.html @@ -0,0 +1,24 @@ + + + + + + + + + +
+ + + diff --git a/resources/web/guide/5/5.css b/resources/web/guide/5/5.css index 2ed6be4169..52d3248faa 100644 --- a/resources/web/guide/5/5.css +++ b/resources/web/guide/5/5.css @@ -25,4 +25,9 @@ #RestartText { padding-left:30px; +} + +.TextPoint +{ + font-size:14px; } \ No newline at end of file diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index d2db081a43..da4dc9df67 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -96,6 +96,7 @@ body line-height: 36px; display: flex; justify-content: center; + user-select: none; } #LoginBtn diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index a3e2d4101c..0c19e78a12 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -74,44 +74,7 @@ -
- -
-
-
Christmas Cabin
-
-
- -
-
- +
recent open
diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index c96006fc0b..bfb27fe72c 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -12,9 +12,6 @@ function OnInit() SendMsg_GetLoginInfo(); SendMsg_GetRecentFile(); - - //-----Christmas----- - ShowCabin(); } //------最佳打开文件的右键菜单功能---------- @@ -405,60 +402,3 @@ function OpenWikiUrl( strUrl ) //---------------Global----------------- window.postMessage = HandleStudio; - -//---------------Christma cabin -var CCabin={ - "model":[ - { - "name":"Bambu Christmas Cabin", - "icon":"christmas_cabin.png", - "file":"Bambu Christmas Cabin.3mf" - } - ] -}; - -function ShowCabin() -{ - let nCabin=CCabin.model.length; - - if(nCabin==0) - { - $('#CabinList').html(''); - - $('#ChristmasArea').hide(); - return; - } - - let strHtml=''; - for(let m=0;m'+ - '
'+ - '
'+OneCabin.name+'
'+ - '
'; - - strHtml+=OneHtml; - } - - $('#CabinList').html(strHtml); - - $('#ChristmasArea').show(); - $('#ChristmasArea').css('display','flex'); -} - -function OnOpenCabin( cabinfile ) -{ - //alert(cabinfile); - - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_open_ccabin"; - tSend['data']={}; - tSend['data']['file']=cabinfile; - - SendWXMessage( JSON.stringify(tSend) ); -} - - diff --git a/resources/web/homepage/model/Bambu Christmas Cabin.3mf b/resources/web/homepage/model/Bambu Christmas Cabin.3mf deleted file mode 100644 index 5851553d3c..0000000000 Binary files a/resources/web/homepage/model/Bambu Christmas Cabin.3mf and /dev/null differ diff --git a/resources/web/homepage/model/christmas_cabin.png b/resources/web/homepage/model/christmas_cabin.png deleted file mode 100644 index a95a462cd9..0000000000 Binary files a/resources/web/homepage/model/christmas_cabin.png and /dev/null differ diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index b711567687..9e624e2bdd 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -324,6 +324,11 @@ static void glfw_callback(int error_code, const char* description) BOOST_LOG_TRIVIAL(error) << "error_code " <setup(debug_argc, debug_argv))*/ if (!this->setup(argc, argv)) @@ -398,6 +403,8 @@ int CLI::run(int argc, char **argv) boost::algorithm::iends_with(boost::filesystem::path(argv[0]).filename().string(), "gcodeviewer"); #endif // _WIN32*/ + bool translate_old = false; + int current_width, current_depth, current_height; const std::vector &load_configs = m_config.option("load_settings", true)->values; //BBS: always use ForwardCompatibilitySubstitutionRule::Enable //const ForwardCompatibilitySubstitutionRule config_substitution_rule = m_config.option>("config_compatibility", true)->value; @@ -457,6 +464,15 @@ int CLI::run(int argc, char **argv) return (argc == 0) ? 0 : 1; #endif // SLIC3R_GUI } + else { + const ConfigOptionInt *opt_loglevel = m_config.opt("debug"); + if (opt_loglevel) { + set_logging_level(opt_loglevel->value); + } + else { + set_logging_level(2); + } + } BOOST_LOG_TRIVIAL(info) << "start_gui="<< start_gui << std::endl; @@ -531,6 +547,12 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "object "<name <<", id :" << o->id().id << ", from bbl 3mf\n"; } + Semver old_version(1, 5, 9); + if ((file_version < old_version) && !config.empty()) { + translate_old = true; + BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf version %1%, need to translate")%file_version.to_string(); + } + /*for (ModelObject *model_object : model.objects) for (ModelInstance *model_instance : model_object->instances) { @@ -991,6 +1013,7 @@ int CLI::run(int argc, char **argv) for (const t_config_option_key &opt_key : config.keys()) { if (!diff_key_sets.empty() && (diff_key_sets.find(opt_key) != diff_key_sets.end())) { //uptodate, diff keys, continue + BOOST_LOG_TRIVIAL(info) << boost::format("keep key %1%")%opt_key; continue; } const ConfigOption *source_opt = config.option(opt_key); @@ -1035,6 +1058,7 @@ int CLI::run(int argc, char **argv) } std::set different_keys_set(different_keys.begin(), different_keys.end()); + BOOST_LOG_TRIVIAL(info) << boost::format("update printer config to newest, different size %1%")%different_keys_set.size(); int ret = update_full_config(m_print_config, load_machine_config, different_keys_set); if (ret) flush_and_exit(ret); @@ -1072,6 +1096,7 @@ int CLI::run(int argc, char **argv) } std::set different_keys_set(different_keys.begin(), different_keys.end()); + BOOST_LOG_TRIVIAL(info) << boost::format("update process config to newest, different size %1%")%different_keys_set.size(); int ret = update_full_config(m_print_config, load_machine_config, different_keys_set); if (ret) flush_and_exit(ret); @@ -1137,9 +1162,11 @@ int CLI::run(int argc, char **argv) //parse the filament value to index th //loop through options and apply them std::set different_keys_set(different_keys.begin(), different_keys.end()); + BOOST_LOG_TRIVIAL(info) << boost::format("update filament %1%'s config to newest, different size %2%")%filament_index%different_keys_set.size(); for (const t_config_option_key &opt_key : config.keys()) { if (!different_keys_set.empty() && (different_keys_set.find(opt_key) != different_keys_set.end())) { //uptodate, diff keys, continue + BOOST_LOG_TRIVIAL(info) << boost::format("keep key %1%")%opt_key; continue; } // Create a new option with default value for the key. @@ -1149,7 +1176,7 @@ int CLI::run(int argc, char **argv) const ConfigOption *source_opt = config.option(opt_key); if (source_opt == nullptr) { // The key was not found in the source config, therefore it will not be initialized! - boost::nowide::cerr << "can not found option " <is_scalar()) { @@ -1169,7 +1196,7 @@ int CLI::run(int argc, char **argv) } else { //skip the scalar values - BOOST_LOG_TRIVIAL(warning) << "skip scalar option " <def(). // This is only possible if other is of DynamicConfig type. - boost::nowide::cerr << "can not create option " <(opt); @@ -1250,10 +1277,12 @@ int CLI::run(int argc, char **argv) m_print_config.apply(sla_print_config, true);*/ } - std::string validity = m_print_config.validate(); + std::map validity = m_print_config.validate(true); if (!validity.empty()) { - boost::nowide::cerr <<"Error: The composite configation is not valid: " << validity << std::endl; - flush_and_exit(CLI_INVALID_PRINTER_TECH); + boost::nowide::cerr << "Param values in 3mf/config error: "<< std::endl; + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) + boost::nowide::cerr << it->first <<": "<< it->second << std::endl; + flush_and_exit(CLI_INVALID_VALUES_IN_3MF); } //BBS: partplate list @@ -1266,10 +1295,19 @@ int CLI::run(int argc, char **argv) double height_to_lid = m_print_config.opt_float("extruder_clearance_height_to_lid"); double height_to_rod = m_print_config.opt_float("extruder_clearance_height_to_rod"); double plate_stride; + std::string bed_texture; if (m_models.size() > 0) { - std::string bed_texture; - partplate_list.reset_size(bedfs[2].x() - bedfs[0].x(), bedfs[2].y() - bedfs[0].y(), print_height); + if (translate_old) { + current_width = bedfs[2].x() - bedfs[0].x(); + current_depth = bedfs[2].y() - bedfs[0].y(); + current_height = print_height; + BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch to old bed size,{%1%, %2%, %3%}")%(current_width + bed3d_ax3s_default_tip_radius)%(current_depth+bed3d_ax3s_default_tip_radius) %current_height; + partplate_list.reset_size(current_width + bed3d_ax3s_default_tip_radius, current_depth + bed3d_ax3s_default_tip_radius, current_height, false); + } + else { + partplate_list.reset_size(bedfs[2].x() - bedfs[0].x(), bedfs[2].y() - bedfs[0].y(), print_height, false); + } partplate_list.set_shapes(bedfs, excluse_areas, bed_texture, height_to_lid, height_to_rod); plate_stride = partplate_list.plate_stride_x(); BOOST_LOG_TRIVIAL(info) << "bed size, x="< 0) { partplate_list.load_from_3mf_structure(plate_data_src); + //BBS: translate old 3mf to correct positions + if (translate_old) { + //translate the objects + int plate_count = partplate_list.get_plate_count(); + for (int index = 1; index < plate_count; index ++) { + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); + + Vec3d cur_origin = cur_plate->get_origin(); + Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, current_width, current_depth); + + cur_plate->translate_all_instance(new_origin - cur_origin); + } + BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch back to current bed size,{%1%, %2%, %3%}")%current_width %current_depth %current_height; + partplate_list.reset_size(current_width, current_depth, current_height, true, true); + } } /*for (ModelObject *model_object : m_models[0].objects) for (ModelInstance *model_instance : model_object->instances) @@ -1840,6 +1893,7 @@ int CLI::run(int argc, char **argv) }*/ DynamicPrintConfig new_print_config = m_print_config; new_print_config.apply(*part_plate->config()); + new_print_config.apply(m_extra_config, true); print->apply(model, new_print_config); StringObjectException warning; auto err = print->validate(&warning); @@ -2326,17 +2380,6 @@ int CLI::run(int argc, char **argv) bool CLI::setup(int argc, char **argv) { - { - Slic3r::set_logging_level(1); - const char *loglevel = boost::nowide::getenv("BBL_LOGLEVEL"); - if (loglevel != nullptr) { - if (loglevel[0] >= '0' && loglevel[0] <= '9' && loglevel[1] == 0) - set_logging_level(loglevel[0] - '0'); - else - boost::nowide::cerr << "Invalid BBL_LOGLEVEL environment variable: " << loglevel << std::endl; - } - } - // Detect the operating system flavor after SLIC3R_LOGLEVEL is set. detect_platform(); @@ -2365,7 +2408,7 @@ bool CLI::setup(int argc, char **argv) #ifdef __APPLE__ // The application is packed in the .dmg archive as 'Slic3r.app/Contents/MacOS/Slic3r' // The resources are packed to 'Slic3r.app/Contents/Resources' - boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../Resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path() / "Resources"; #elif defined _WIN32 // The application is packed in the .zip archive in the root, // The resources are packed to 'resources' @@ -2379,7 +2422,7 @@ bool CLI::setup(int argc, char **argv) // The application is packed in the .tar.bz archive (or in AppImage) as 'bin/slic3r', // The resources are packed to 'resources' // Path from Slic3r binary to resources: - boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path() / "resources"; #endif set_resources_dir(path_resources.string()); @@ -2404,17 +2447,8 @@ bool CLI::setup(int argc, char **argv) m_transforms.emplace_back(opt_key); } -#if !BBL_RELEASE_TO_PUBLIC - { - const ConfigOptionInt *opt_loglevel = m_config.opt("debug"); - if (opt_loglevel != 0) { - set_logging_level(opt_loglevel->value); - } - } -#endif - //FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet. - std::string validity = m_config.validate(); + std::map validity = m_config.validate(true); // Initialize with defaults. for (const t_optiondef_map *options : { &cli_actions_config_def.options, &cli_transform_config_def.options, &cli_misc_config_def.options }) @@ -2425,7 +2459,9 @@ bool CLI::setup(int argc, char **argv) //FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet. if (!validity.empty()) { - boost::nowide::cerr << "error: " << validity << std::endl; + boost::nowide::cerr << "Params in command line error: "<< std::endl; + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) + boost::nowide::cerr << it->first <<": "<< it->second << std::endl; return false; } @@ -2608,7 +2644,7 @@ extern "C" { argv_ptrs[i] = argv_narrow[i].data(); //BBS: register default exception handler -#if 1 +#if BBL_RELEASE_TO_PUBLIC SET_DEFULTER_HANDLER(); #else AddVectoredExceptionHandler(1, CBaseException::UnhandledExceptionFilter); diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index 4c32a701a1..51aa772cdb 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -186,6 +186,9 @@ namespace ImGui const wchar_t SphereButtonDarkIcon = 0x0826; const wchar_t GapFillDarkIcon = 0x0827; + const wchar_t TextSearchIcon = 0x0828; + const wchar_t TextSearchCloseIcon = 0x0829; + // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/imgui/imgui_internal.h b/src/imgui/imgui_internal.h index 018654d8a0..a10b0ac0f0 100644 --- a/src/imgui/imgui_internal.h +++ b/src/imgui/imgui_internal.h @@ -391,7 +391,7 @@ IM_MSVC_RUNTIME_CHECKS_OFF static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision static inline double ImPow(double x, double y) { return pow(x, y); } static inline float ImLog(float x) { return logf(x); } // DragBehaviorT/SliderBehaviorT uses ImLog with either float/double and need the precision -static inline double ImLog(double x) { return log(x); } +static inline double ImLog(double x) { return logf(x); } static inline int ImAbs(int x) { return x < 0 ? -x : x; } static inline float ImAbs(float x) { return fabsf(x); } static inline double ImAbs(double x) { return fabs(x); } diff --git a/src/imgui/imgui_widgets.cpp b/src/imgui/imgui_widgets.cpp index 46d4f800d3..21e7a9142c 100644 --- a/src/imgui/imgui_widgets.cpp +++ b/src/imgui/imgui_widgets.cpp @@ -2126,7 +2126,7 @@ bool ImGui::BBLBeginCombo(const char *label, const char *preview_value, ImGuiCom const ImVec2 label_size = CalcTextSize(label, NULL, true); const float expected_w = CalcItemWidth(); const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; - const ImRect frame_bb(window->DC.CursorPos - ImVec2(0.0, style.FramePadding.y), window->DC.CursorPos + ImVec2(w - arrow_size * 2, label_size.y + style.FramePadding.y)); + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w - arrow_size * 2, label_size.y + style.FramePadding.y * 2)); const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); ItemSize(total_bb, style.FramePadding.y); if (!ItemAdd(total_bb, id, &frame_bb)) return false; @@ -4175,7 +4175,7 @@ bool ImGui::BBLInputScalar(const char *label, ImGuiDataType data_type, void *p_d if (format == NULL) format = DataTypeGetInfo(data_type)->PrintFmt; - char buf[8]; + char buf[64]; DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format); bool value_changed = false; @@ -7185,7 +7185,9 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a // Render if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld)) hovered = true; if (hovered || selected) { - const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); + ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); + if (hovered && selected) + col = GetColorU32(ImGuiCol_Header); if (arrow_size == 0) { RenderFrame(bb.Min, ImVec2(bb.Max.x - style.WindowPadding.x, bb.Max.y), col, false, 0.0f); } @@ -7204,9 +7206,9 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a // Render const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - ImVec2 p_min = bb.Min + ImVec2(2 * style.ItemSpacing.x, (bb.Max.y - bb.Min.y - font_size.y) / 2); + ImVec2 p_min = bb.Min + ImVec2(style.ItemInnerSpacing.x, (bb.Max.y - bb.Min.y - font_size.y) / 2); ImVec2 p_max = p_min + font_size; - window->DrawList->AddImage(user_texture_id, p_min, p_max, uv0, uv1, GetColorU32(tint_col)); + window->DrawList->AddImage(user_texture_id, p_min, p_max, uv0, uv1, selected || (held && hovered) ? GetColorU32(ImVec4(1.f, 1.f, 1.f, 1.f)) : GetColorU32(tint_col)); if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor(); diff --git a/src/libnest2d/include/libnest2d/nester.hpp b/src/libnest2d/include/libnest2d/nester.hpp index db6cc050af..2ac0392d71 100644 --- a/src/libnest2d/include/libnest2d/nester.hpp +++ b/src/libnest2d/include/libnest2d/nester.hpp @@ -75,7 +75,7 @@ class _Item { public: int itemid_{ 0 }; - int extrude_id{ 1 }; + std::vector extrude_ids; double height{ 0 }; double print_temp{ 0 }; double bed_temp{ 0 }; diff --git a/src/libnest2d/include/libnest2d/selections/firstfit.hpp b/src/libnest2d/include/libnest2d/selections/firstfit.hpp index bc2b5a96bb..e739a88701 100644 --- a/src/libnest2d/include/libnest2d/selections/firstfit.hpp +++ b/src/libnest2d/include/libnest2d/selections/firstfit.hpp @@ -114,13 +114,14 @@ public: double score = LARGE_COST_TO_REJECT+1, best_score = LARGE_COST_TO_REJECT+1; double score_all_plates = 0, score_all_plates_best = std::numeric_limits::max(); typename Placer::PackResult result, result_best, result_firstfit; - size_t j = 0; + int j = 0; while(!was_packed && !cancelled()) { for(; j < placers.size() && !was_packed && !cancelled(); j++) { result = placers[j].pack(*it, rem(it, store_)); score = result.score(); score_all_plates = std::accumulate(placers.begin(), placers.begin() + j, score, [](double sum, const Placer& elem) { return sum + elem.score(); }); + if (this->unfitindicator_) this->unfitindicator_(it->get().name + " bed_id="+std::to_string(j) + ",score=" + std::to_string(score)); if(score >= 0 && score < LARGE_COST_TO_REJECT) { if (bed_id_firstfit == -1) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 87b3c236a0..6b3a684b6e 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -257,6 +257,10 @@ void AppConfig::set_defaults() set("mouse_supported", "mouse left/mouse middle/mouse right"); } + if (get("privacy_version").empty()) { + set("privacy_version", "00.00.00.00"); + } + if (get("rotate_view").empty()) { set("rotate_view", "none/mouse left"); } @@ -462,8 +466,11 @@ std::string AppConfig::load() for(auto& element: iter.value()) { if (idx == 0) m_storage[it.key()]["filament"] = element; - else - m_storage[it.key()]["filament_" + std::to_string(idx)] = element; + else { + auto n = std::to_string(idx); + if (n.length() == 1) n = "0" + n; + m_storage[it.key()]["filament_" + n] = element; + } idx++; } } else { @@ -483,8 +490,6 @@ std::string AppConfig::load() m_filament_presets = iter.value().get>(); } else if (iter.key() == "filament_colors") { m_filament_colors = iter.value().get>(); - } else if (iter.key() == "flushing_volumes") { - m_flush_volumes_matrix = iter.value().get>(); } else { if (iter.value().is_string()) @@ -577,10 +582,6 @@ void AppConfig::save() j["app"]["filament_colors"].push_back(filament_color); } - for (double flushing_volume : m_flush_volumes_matrix) { - j["app"]["flushing_volumes"].push_back(flushing_volume); - } - // Write the other categories. for (const auto& category : m_storage) { if (category.first.empty()) diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 7886ad96d1..62f5564f87 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -177,11 +177,6 @@ public: m_filament_colors = filament_colors; m_dirty = true; } - const std::vector &get_flush_volumes_matrix() const { return m_flush_volumes_matrix; } - void set_flush_volumes_matrix(const std::vector &flush_volumes_matrix){ - m_flush_volumes_matrix = flush_volumes_matrix; - m_dirty = true; - } // return recent/last_opened_folder or recent/settings_folder or empty string. std::string get_last_dir() const; @@ -281,7 +276,6 @@ private: std::vector m_filament_presets; std::vector m_filament_colors; - std::vector m_flush_volumes_matrix; }; } // namespace Slic3r diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 83c803b3ce..2eb90dfe6b 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -452,20 +452,25 @@ protected: } std::set extruder_ids; + int non_virt_cnt = 0; for (int i = 0; i < m_items.size(); i++) { Item& p = m_items[i]; if (p.is_virt_object) continue; - extruder_ids.insert(p.extrude_id); - // add a large cost if not multi materials on same plate is not allowed - if (!params.allow_multi_materials_on_same_plate) - score += LARGE_COST_TO_REJECT * (item.extrude_id != p.extrude_id); + extruder_ids.insert(p.extrude_ids.begin(),p.extrude_ids.end()); + non_virt_cnt++; } + extruder_ids.insert(item.extrude_ids.begin(),item.extrude_ids.end()); + // add a large cost if not multi materials on same plate is not allowed + if (!params.allow_multi_materials_on_same_plate) { + // non_virt_cnt==0 means it's the first object, which can be multi-color + if (extruder_ids.size() > 1 && non_virt_cnt > 0) + score += LARGE_COST_TO_REJECT * 1.1; + } // for layered printing, we want extruder change as few as possible // this has very weak effect, CAN NOT use a large weight if (!params.is_seq_print) { - extruder_ids.insert(item.extrude_id); - score += 1 * std::max(0, ((int)extruder_ids.size() - 1)); + score += 1 * std::max(0, ((int) extruder_ids.size() - 1)); } return std::make_tuple(score, fullbb); @@ -601,7 +606,7 @@ public: } else { return i1.bed_temp != i2.bed_temp ? (i1.bed_temp > i2.bed_temp) : - (i1.extrude_id != i2.extrude_id ? (i1.extrude_id < i2.extrude_id) : (i1.area() > i2.area())); + (i1.extrude_ids != i2.extrude_ids ? (i1.extrude_ids.front() < i2.extrude_ids.front()) : (i1.area() > i2.area())); } }; @@ -850,7 +855,7 @@ static void process_arrangeable(const ArrangePolygon &arrpoly, item.binId(arrpoly.bed_idx); item.priority(arrpoly.priority); item.itemId(arrpoly.itemid); - item.extrude_id = arrpoly.extrude_ids.front(); + item.extrude_ids = arrpoly.extrude_ids; item.height = arrpoly.height; item.name = arrpoly.name; //BBS: add virtual object logic diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 711e8f8e45..5989c7ae5f 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -165,17 +165,6 @@ static Polygons top_level_outer_brim_islands(const ConstPrintObjectPtrs &top_lev } } - // BBS - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - Polygons contour_offset = offset(ex_poly.contour, brim_object_gap, ClipperLib::jtSquare); - for (Polygon& poly : contour_offset) - poly.douglas_peucker(scaled_resolution); - - polygons_append(islands_object, std::move(contour_offset)); - } - } - for (const PrintInstance &instance : object->instances()) append_and_translate(islands, islands_object, instance); } @@ -248,19 +237,6 @@ static ExPolygons top_level_outer_brim_area(const Print &print } } - // BBS - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim) - append(brim_area_object, diff_ex(offset(ex_poly.contour, brim_width + brim_object_gap, jtRound, scaled_resolution), offset(ex_poly.contour, brim_object_gap))); - - if (brim_type != BrimType::btNoBrim) - append(no_brim_area_object, offset_ex(ExPolygon(ex_poly.contour), brim_object_gap)); - - no_brim_area_object.emplace_back(ex_poly.contour); - } - } - for (const PrintInstance &instance : object->instances()) { append_and_translate(brim_area, brim_area_object, instance); append_and_translate(no_brim_area, no_brim_area_object, instance); @@ -360,21 +336,6 @@ static ExPolygons top_level_outer_brim_area(const Print& print, const ConstPrint } } - // BBS - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim) - append(brim_area_support, diff_ex(offset(ex_poly.contour, brim_width, jtRound, SCALED_RESOLUTION), offset(ex_poly.contour, 0))); - - if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim) - append(no_brim_area_support, offset_ex(ex_poly.holes, -no_brim_offset)); - - if (brim_type != BrimType::btNoBrim) - append(no_brim_area_support, offset_ex(ex_poly.contour, 0)); - - no_brim_area_support.emplace_back(ex_poly.contour); - } - } brimToWrite.at(object->id()).sup = false; for (const PrintInstance& instance : object->instances()) { if (!brim_area_support.empty()) @@ -543,26 +504,6 @@ static ExPolygons inner_brim_area(const Print& print, const ConstPrintObjectPtrs no_brim_area_support.emplace_back(support_contour); } } - - // BBS - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) { - if (!top_outer_brim) - append(brim_area_support, diff_ex(offset_ex(ex_poly.contour, brim_width + brim_offset, jtRound, SCALED_RESOLUTION), offset_ex(ex_poly.contour, brim_offset))); - } - if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner) - append(brim_area_support, diff_ex(offset_ex(ex_poly.holes, -brim_offset), offset_ex(ex_poly.holes, -brim_width - brim_offset))); - if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim) - append(no_brim_area_support, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly.holes)); - if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim) - append(no_brim_area_support, offset_ex(ex_poly.holes, -no_brim_offset)); - append(holes_support, ex_poly.holes); - if (brim_type != BrimType::btNoBrim) - append(no_brim_area_support, offset_ex(ex_poly.contour, 0)); - no_brim_area_support.emplace_back(ex_poly.contour); - } - } } brimToWrite.at(object->id()).sup = false; for (const PrintInstance& instance : object->instances()) { @@ -927,7 +868,6 @@ static ExPolygons outer_inner_brim_area(const Print& print, double brimWidthRaw = configBrimWidthByVolumeGroups(adhension, maxSpeed, groupVolumePtrs, volumeGroup.slices, groupHeight); brim_width = scale_(floor(brimWidthRaw / flowWidth / 2) * flowWidth * 2); } - for (const ExPolygon& ex_poly : volumeGroup.slices) { // BBS: additional brim width will be added if part's adhension area is too small and brim is not generated float brim_width_mod; @@ -986,7 +926,7 @@ static ExPolygons outer_inner_brim_area(const Print& print, support_material_extruder = printExtruders.front() + 1; } if (support_material_extruder == extruderNo && brimToWrite.at(object->id()).sup) { - if (!object->support_layers().empty()) { + if (!object->support_layers().empty() && object->support_layers().front()->support_type==stInnerNormal) { for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) { // Brim will not be generated for supports /* @@ -1000,8 +940,8 @@ static ExPolygons outer_inner_brim_area(const Print& print, } } // BBS - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { + if (!object->support_layers().empty() && object->support_layers().front()->support_type == stInnerTree) { + for (const ExPolygon &ex_poly : object->support_layers().front()->lslices) { // BBS: additional brim width will be added if adhension area is too small without brim float brim_width_mod = ex_poly.area() / ex_poly.contour.length() < scaled_half_min_adh_length && brim_width < scaled_flow_width ? brim_width + scaled_additional_brim_width : brim_width; @@ -1036,11 +976,16 @@ static ExPolygons outer_inner_brim_area(const Print& print, } } } - if (!bedExPoly.empty()) + if (!bedExPoly.empty()){ + auto plateOffset = print.get_plate_origin(); + bedExPoly.front().translate(scale_(plateOffset.x()), scale_(plateOffset.y())); no_brim_area.push_back(bedExPoly.front()); - for (const PrintObject* object : print.objects()) - if (brimAreaMap.find(object->id()) != brimAreaMap.end()) { + } + for (const PrintObject* object : print.objects()) { + if (brimAreaMap.find(object->id()) != brimAreaMap.end()) + { brimAreaMap[object->id()] = diff_ex(brimAreaMap[object->id()], no_brim_area); + } if (supportBrimAreaMap.find(object->id()) != supportBrimAreaMap.end()) supportBrimAreaMap[object->id()] = diff_ex(supportBrimAreaMap[object->id()], no_brim_area); @@ -1220,13 +1165,6 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr } } - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - Polygon counter = ex_poly.contour; - save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair); - } - } - //BBS: 3 generate loops, only save part of loop which inside hole const float brim_offset = scale_(object->config().brim_object_gap.value); const float brim_width = scale_(object->config().brim_width.value); @@ -1369,13 +1307,6 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr } } - if (!object->tree_support_layers().empty()) { - for (const ExPolygon& ex_poly : object->tree_support_layers().front()->lslices) { - Polygon counter = ex_poly.contour; - save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair_supports); - } - } - //BBS: 3 generate loops, only save part of loop which inside hole const float brim_offset = scale_(object->config().brim_object_gap.value); const float brim_width = floor(scale_(object->config().brim_width.value) / 2 / flow.scaled_spacing()) * 2 * flow.scaled_spacing(); @@ -1587,10 +1518,10 @@ Polygons tryExPolygonOffset(const ExPolygons islandAreaEx, const Print& print) for (ExPolygon& poly_ex : islands_ex) poly_ex.douglas_peucker(resolution); polygons_append(loops, to_polygons(islands_ex)); - islands_ex = offset_ex(std::move(islands_ex), -1.4f*float(flow.scaled_spacing()), jtRound, resolution); + islands_ex = offset_ex(std::move(islands_ex), -1.3f*float(flow.scaled_spacing()), jtRound, resolution); for (ExPolygon& poly_ex : islands_ex) poly_ex.douglas_peucker(resolution); - islands_ex = offset_ex(std::move(islands_ex), 0.4f*float(flow.scaled_spacing()), jtRound, resolution); + islands_ex = offset_ex(std::move(islands_ex), 0.3f*float(flow.scaled_spacing()), jtRound, resolution); } return loops; } @@ -1663,13 +1594,6 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_ ex_poly_translated.translate(instance.shift.x(), instance.shift.y()); bbx.merge(get_extents(ex_poly_translated)); } - if (!object->tree_support_layers().empty()) - for (const Polygon& ex_poly : object->tree_support_layers().front()->support_fills.polygons_covered_by_spacing()) - for (const PrintInstance& instance : object->instances()) { - auto ex_poly_translated = ex_poly; - ex_poly_translated.translate(instance.shift.x(), instance.shift.y()); - bbx.merge(get_extents(ex_poly_translated)); - } if (supportBrimAreaMap.find(printObjID) != supportBrimAreaMap.end()) { for (const ExPolygon& ex_poly : supportBrimAreaMap.at(printObjID)) bbx.merge(get_extents(ex_poly.contour)); diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 9630bec411..cbb606adff 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -3,6 +3,9 @@ project(libslic3r) include(PrecompiledHeader) +string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S) +set(SLIC3R_BUILD_TIME ${COMPILE_TIME}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libslic3r_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/libslic3r_version.h @ONLY) if (MINGW) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index 93ec1fd27e..f5eac154cc 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -298,9 +298,16 @@ ConfigOption* ConfigOptionDef::create_default_option() const return new ConfigOptionEnumGeneric(this->enum_keys_map, this->default_value->getInt()); if (type == coEnums) { - ConfigOptionEnumsGeneric* opt = dynamic_cast(this->default_value->clone()); - opt->keys_map = this->enum_keys_map; - return opt; + auto dft = this->default_value->clone(); + if (dft->nullable()) { + ConfigOptionEnumsGenericNullable *opt = dynamic_cast(this->default_value->clone()); + opt->keys_map = this->enum_keys_map; + return opt; + } else { + ConfigOptionEnumsGeneric *opt = dynamic_cast(this->default_value->clone()); + opt->keys_map = this->enum_keys_map; + return opt; + } } return this->default_value->clone(); @@ -743,6 +750,9 @@ ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardC int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContext& substitution_context, bool load_inherits_to_config, std::map& key_values, std::string& reason) { json j; + std::list different_settings_append; + std::string new_support_style; + bool is_project_settings = false; try { boost::nowide::ifstream ifs(file); ifs >> j; @@ -762,6 +772,8 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex } else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) { key_values.emplace(BBL_JSON_KEY_NAME, it.value()); + if (it.value() == "project_settings") + is_project_settings = true; } else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) { key_values.emplace(BBL_JSON_KEY_URL, it.value()); @@ -791,6 +803,15 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex if (it.value().is_string()) { //bool test1 = (it.key() == std::string("end_gcode")); this->set_deserialize(opt_key, it.value(), substitution_context); + //some logic for special values + if (opt_key == "support_type") { + //std::string new_value = dynamic_cast(this->option(opt_key))->value; + if (it.value() == "hybrid(auto)") { + different_settings_append.push_back(opt_key); + different_settings_append.push_back("support_style"); + new_support_style = "tree_hybrid"; + } + } } else if (it.value().is_array()) { t_config_option_key opt_key_src = opt_key; @@ -856,6 +877,62 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex } } } + if (!different_settings_append.empty()) { + if (!new_support_style.empty()) { + ConfigOptionEnum* opt = this->option>("support_style", true); + opt->value = smsTreeHybrid; + } + if (is_project_settings) { + std::vector& different_settings = this->option("different_settings_to_system", true)->values; + size_t size = different_settings.size(); + if (size == 0) { + size = this->option("filament_settings_id")->values.size() + 2; + different_settings.resize(size); + } + + std::vector is_first(size, false); + std::vector> original_diffs(size); + for (int index = 0; index < size; index++) + { + if (different_settings[index].empty()) { + is_first[index] = true; + } + else { + Slic3r::unescape_strings_cstyle(different_settings[index], original_diffs[index]); + } + } + + for (auto diff_key : different_settings_append) + { + //get the index in the group + int index = 0; + bool need_insert = true; + if (diff_key == "support_type") + index = 0; + else if (diff_key == "support_style") + index = 0; + + //check whether exist firstly + if (!original_diffs[index].empty()) { + for (int j = 0; j < original_diffs[index].size(); j++) { + if (original_diffs[index][j] == diff_key) { + need_insert = false; + break; + } + } + } + if (!need_insert) + continue; + + //insert this key + if (!is_first[index]) + different_settings[index] += ";"; + else + is_first[index] = false; + different_settings[index] += diff_key; + } + } + } return 0; } catch (const std::ifstream::failure &err) { diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 3c7f13092f..f3ab945ce1 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -771,6 +771,8 @@ public: ConfigOptionIntsTempl() : ConfigOptionVector() {} explicit ConfigOptionIntsTempl(size_t n, int value) : ConfigOptionVector(n, value) {} explicit ConfigOptionIntsTempl(std::initializer_list il) : ConfigOptionVector(std::move(il)) {} + explicit ConfigOptionIntsTempl(const std::vector &vec) : ConfigOptionVector(vec) {} + explicit ConfigOptionIntsTempl(std::vector &&vec) : ConfigOptionVector(std::move(vec)) {} static ConfigOptionType static_type() { return coInts; } ConfigOptionType type() const override { return static_type(); } @@ -1640,33 +1642,37 @@ private: }; // BBS -class ConfigOptionEnumsGeneric : public ConfigOptionInts +template +class ConfigOptionEnumsGenericTempl : public ConfigOptionInts { public: - ConfigOptionEnumsGeneric(const t_config_enum_values* keys_map = nullptr) : keys_map(keys_map) {} - explicit ConfigOptionEnumsGeneric(const t_config_enum_values* keys_map, size_t size, int value) : ConfigOptionInts(size, value), keys_map(keys_map) {} - explicit ConfigOptionEnumsGeneric(std::initializer_list il) : ConfigOptionInts(std::move(il)), keys_map(keys_map) {} + ConfigOptionEnumsGenericTempl(const t_config_enum_values *keys_map = nullptr) : keys_map(keys_map) {} + explicit ConfigOptionEnumsGenericTempl(const t_config_enum_values *keys_map, size_t size, int value) : ConfigOptionInts(size, value), keys_map(keys_map) {} + explicit ConfigOptionEnumsGenericTempl(std::initializer_list il) : ConfigOptionInts(std::move(il)), keys_map(keys_map) {} + explicit ConfigOptionEnumsGenericTempl(const std::vector &vec) : ConfigOptionInts(vec) {} + explicit ConfigOptionEnumsGenericTempl(std::vector &&vec) : ConfigOptionInts(std::move(vec)) {} const t_config_enum_values* keys_map = nullptr; static ConfigOptionType static_type() { return coEnums; } ConfigOptionType type() const override { return static_type(); } - ConfigOption* clone() const override { return new ConfigOptionEnumsGeneric(*this); } - ConfigOptionEnumsGeneric& operator= (const ConfigOption* opt) { this->set(opt); return *this; } - bool operator< (const ConfigOptionIntsTempl& rhs) const throw() { return this->values < rhs.values; } + ConfigOption* clone() const override { return new ConfigOptionEnumsGenericTempl(*this); } + ConfigOptionEnumsGenericTempl& operator= (const ConfigOption* opt) { this->set(opt); return *this; } + bool operator< (const ConfigOptionInts& rhs) const throw() { return this->values < rhs.values; } - bool operator==(const ConfigOptionIntsTempl& rhs) const throw() + bool operator==(const ConfigOptionInts& rhs) const throw() { if (rhs.type() != this->type()) throw ConfigurationError("ConfigOptionEnumsGeneric: Comparing incompatible types"); return this->values == rhs.values; } + bool nullable() const override { return NULLABLE; } void set(const ConfigOption* rhs) override { if (rhs->type() != this->type()) throw ConfigurationError("ConfigOptionEnumGeneric: Assigning an incompatible type"); // rhs could be of the following type: ConfigOptionEnumsGeneric - this->values = dynamic_cast(rhs)->values; + this->values = dynamic_cast(rhs)->values; } std::string serialize() const override @@ -1701,7 +1707,10 @@ public: while (std::getline(is, item_str, ',')) { boost::trim(item_str); if (item_str == "nil") { - return false; + if (NULLABLE) + this->values.push_back(nil_value()); + else + throw ConfigurationError("Deserializing nil into a non-nullable object"); } else { auto it = this->keys_map->find(item_str); @@ -1716,15 +1725,26 @@ public: private: void serialize_single_value(std::ostringstream& ss, const int v) const { - for (const auto& kvp : *this->keys_map) - if (kvp.second == v) - ss << kvp.first; + if (v == nil_value()) { + if (NULLABLE) + ss << "nil"; + else + throw ConfigurationError("Serializing NaN"); + } + else { + for (const auto& kvp : *this->keys_map) + if (kvp.second == v) + ss << kvp.first; + } } friend class cereal::access; template void serialize(Archive& ar) { ar(cereal::base_class>(this)); } }; +using ConfigOptionEnumsGeneric = ConfigOptionEnumsGenericTempl; +using ConfigOptionEnumsGenericNullable = ConfigOptionEnumsGenericTempl; + // Definition of a configuration value for the purpose of GUI presentation, editing, value mapping and config file handling. class ConfigOptionDef { diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index b96988fb91..af8a8a9a04 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -1367,61 +1367,61 @@ ModelVolumeType type_from_string(const std::string &s) void _3MF_Importer::_extract_custom_gcode_per_print_z_from_archive(::mz_zip_archive &archive, const mz_zip_archive_file_stat &stat) { - if (stat.m_uncomp_size > 0) { - std::string buffer((size_t)stat.m_uncomp_size, 0); - mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, (void*)buffer.data(), (size_t)stat.m_uncomp_size, 0); - if (res == 0) { - add_error("Error while reading custom Gcodes per height data to buffer"); - return; - } + //if (stat.m_uncomp_size > 0) { + // std::string buffer((size_t)stat.m_uncomp_size, 0); + // mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, (void*)buffer.data(), (size_t)stat.m_uncomp_size, 0); + // if (res == 0) { + // add_error("Error while reading custom Gcodes per height data to buffer"); + // return; + // } - std::istringstream iss(buffer); // wrap returned xml to istringstream - pt::ptree main_tree; - pt::read_xml(iss, main_tree); + // std::istringstream iss(buffer); // wrap returned xml to istringstream + // pt::ptree main_tree; + // pt::read_xml(iss, main_tree); - if (main_tree.front().first != "custom_gcodes_per_print_z") - return; - pt::ptree code_tree = main_tree.front().second; + // if (main_tree.front().first != "custom_gcodes_per_print_z") + // return; + // pt::ptree code_tree = main_tree.front().second; - m_model->custom_gcode_per_print_z.gcodes.clear(); + // m_model->custom_gcode_per_print_z.gcodes.clear(); - for (const auto& code : code_tree) { - if (code.first == "mode") { - pt::ptree tree = code.second; - std::string mode = tree.get(".value"); - m_model->custom_gcode_per_print_z.mode = mode == CustomGCode::SingleExtruderMode ? CustomGCode::Mode::SingleExtruder : - mode == CustomGCode::MultiAsSingleMode ? CustomGCode::Mode::MultiAsSingle : - CustomGCode::Mode::MultiExtruder; - } - if (code.first != "code") - continue; + // for (const auto& code : code_tree) { + // if (code.first == "mode") { + // pt::ptree tree = code.second; + // std::string mode = tree.get(".value"); + // m_model->custom_gcode_per_print_z.mode = mode == CustomGCode::SingleExtruderMode ? CustomGCode::Mode::SingleExtruder : + // mode == CustomGCode::MultiAsSingleMode ? CustomGCode::Mode::MultiAsSingle : + // CustomGCode::Mode::MultiExtruder; + // } + // if (code.first != "code") + // continue; - pt::ptree tree = code.second; - double print_z = tree.get (".print_z" ); - int extruder = tree.get (".extruder"); - std::string color = tree.get (".color" ); + // pt::ptree tree = code.second; + // double print_z = tree.get (".print_z" ); + // int extruder = tree.get (".extruder"); + // std::string color = tree.get (".color" ); - CustomGCode::Type type; - std::string extra; - pt::ptree attr_tree = tree.find("")->second; - if (attr_tree.find("type") == attr_tree.not_found()) { - // It means that data was saved in old version (2.2.0 and older) of PrusaSlicer - // read old data ... - std::string gcode = tree.get (".gcode"); - // ... and interpret them to the new data - type = gcode == "M600" ? CustomGCode::ColorChange : - gcode == "M601" ? CustomGCode::PausePrint : - gcode == "tool_change" ? CustomGCode::ToolChange : CustomGCode::Custom; - extra = type == CustomGCode::PausePrint ? color : - type == CustomGCode::Custom ? gcode : ""; - } - else { - type = static_cast(tree.get(".type")); - extra = tree.get(".extra"); - } - m_model->custom_gcode_per_print_z.gcodes.push_back(CustomGCode::Item{print_z, type, extruder, color, extra}) ; - } - } + // CustomGCode::Type type; + // std::string extra; + // pt::ptree attr_tree = tree.find("")->second; + // if (attr_tree.find("type") == attr_tree.not_found()) { + // // It means that data was saved in old version (2.2.0 and older) of PrusaSlicer + // // read old data ... + // std::string gcode = tree.get (".gcode"); + // // ... and interpret them to the new data + // type = gcode == "M600" ? CustomGCode::ColorChange : + // gcode == "M601" ? CustomGCode::PausePrint : + // gcode == "tool_change" ? CustomGCode::ToolChange : CustomGCode::Custom; + // extra = type == CustomGCode::PausePrint ? color : + // type == CustomGCode::Custom ? gcode : ""; + // } + // else { + // type = static_cast(tree.get(".type")); + // extra = tree.get(".extra"); + // } + // m_model->custom_gcode_per_print_z.gcodes.push_back(CustomGCode::Item{print_z, type, extruder, color, extra}) ; + // } + //} } void _3MF_Importer::_handle_start_model_xml_element(const char* name, const char** attributes) @@ -3182,54 +3182,55 @@ ModelVolumeType type_from_string(const std::string &s) bool _3MF_Exporter::_add_custom_gcode_per_print_z_file_to_archive( mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config) { - std::string out = ""; - - if (!model.custom_gcode_per_print_z.gcodes.empty()) { - pt::ptree tree; - pt::ptree& main_tree = tree.add("custom_gcodes_per_print_z", ""); - - for (const CustomGCode::Item& code : model.custom_gcode_per_print_z.gcodes) { - pt::ptree& code_tree = main_tree.add("code", ""); - - // store data of custom_gcode_per_print_z - code_tree.put(".print_z" , code.print_z ); - code_tree.put(".type" , static_cast(code.type)); - code_tree.put(".extruder" , code.extruder ); - code_tree.put(".color" , code.color ); - code_tree.put(".extra" , code.extra ); - - //BBS - std::string gcode = //code.type == CustomGCode::ColorChange ? config->opt_string("color_change_gcode") : - code.type == CustomGCode::PausePrint ? config->opt_string("machine_pause_gcode") : - code.type == CustomGCode::Template ? config->opt_string("template_custom_gcode") : - code.type == CustomGCode::ToolChange ? "tool_change" : code.extra; - code_tree.put(".gcode" , gcode ); - } - - pt::ptree& mode_tree = main_tree.add("mode", ""); - // store mode of a custom_gcode_per_print_z - mode_tree.put(".value", model.custom_gcode_per_print_z.mode == CustomGCode::Mode::SingleExtruder ? CustomGCode::SingleExtruderMode : - model.custom_gcode_per_print_z.mode == CustomGCode::Mode::MultiAsSingle ? CustomGCode::MultiAsSingleMode : - CustomGCode::MultiExtruderMode); - - if (!tree.empty()) { - std::ostringstream oss; - boost::property_tree::write_xml(oss, tree); - out = oss.str(); - - // Post processing("beautification") of the output string - boost::replace_all(out, "><", ">\n<"); - } - } - - if (!out.empty()) { - if (!mz_zip_writer_add_mem(&archive, CUSTOM_GCODE_PER_PRINT_Z_FILE.c_str(), (const void*)out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) { - add_error("Unable to add custom Gcodes per print_z file to archive"); - return false; - } - } - return true; + //std::string out = ""; + + //if (!model.custom_gcode_per_print_z.gcodes.empty()) { + // pt::ptree tree; + // pt::ptree& main_tree = tree.add("custom_gcodes_per_print_z", ""); + + // for (const CustomGCode::Item& code : model.custom_gcode_per_print_z.gcodes) { + // pt::ptree& code_tree = main_tree.add("code", ""); + + // // store data of custom_gcode_per_print_z + // code_tree.put(".print_z" , code.print_z ); + // code_tree.put(".type" , static_cast(code.type)); + // code_tree.put(".extruder" , code.extruder ); + // code_tree.put(".color" , code.color ); + // code_tree.put(".extra" , code.extra ); + + // //BBS + // std::string gcode = //code.type == CustomGCode::ColorChange ? config->opt_string("color_change_gcode") : + // code.type == CustomGCode::PausePrint ? config->opt_string("machine_pause_gcode") : + // code.type == CustomGCode::Template ? config->opt_string("template_custom_gcode") : + // code.type == CustomGCode::ToolChange ? "tool_change" : code.extra; + // code_tree.put(".gcode" , gcode ); + // } + + // pt::ptree& mode_tree = main_tree.add("mode", ""); + // // store mode of a custom_gcode_per_print_z + // mode_tree.put(".value", model.custom_gcode_per_print_z.mode == CustomGCode::Mode::SingleExtruder ? CustomGCode::SingleExtruderMode : + // model.custom_gcode_per_print_z.mode == CustomGCode::Mode::MultiAsSingle ? CustomGCode::MultiAsSingleMode : + // CustomGCode::MultiExtruderMode); + + // if (!tree.empty()) { + // std::ostringstream oss; + // boost::property_tree::write_xml(oss, tree); + // out = oss.str(); + + // // Post processing("beautification") of the output string + // boost::replace_all(out, "><", ">\n<"); + // } + //} + + //if (!out.empty()) { + // if (!mz_zip_writer_add_mem(&archive, CUSTOM_GCODE_PER_PRINT_Z_FILE.c_str(), (const void*)out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) { + // add_error("Unable to add custom Gcodes per print_z file to archive"); + // return false; + // } + //} + + //return true; } // Perform conversions based on the config values available. diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index 1d5efef400..333bd794d6 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -28,8 +28,8 @@ #include "TopExp_Explorer.hxx" #include "BRep_Tool.hxx" -const double STEP_TRANS_CHORD_ERROR = 0.005; -const double STEP_TRANS_ANGLE_RES = 1; +const double STEP_TRANS_CHORD_ERROR = 0.0025; +const double STEP_TRANS_ANGLE_RES = 0.5; namespace Slic3r { @@ -210,13 +210,15 @@ static void getNamedSolids(const TopLoc_Location& location, const std::string& p } } -bool load_step(const char *path, Model *model, ImportStepProgressFn stepFn, StepIsUtf8Fn isUtf8Fn) +bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgressFn stepFn, StepIsUtf8Fn isUtf8Fn) { bool cb_cancel = false; if (stepFn) { stepFn(LOAD_STEP_STAGE_READ_FILE, 0, 1, cb_cancel); - if (cb_cancel) + is_cancel = cb_cancel; + if (cb_cancel) { return false; + } } if (!StepPreProcessor::isUtf8File(path) && isUtf8Fn) @@ -248,6 +250,7 @@ bool load_step(const char *path, Model *model, ImportStepProgressFn stepFn, Step if (stepFn) { if ((iLabel % stage_unit2) == 0) { stepFn(LOAD_STEP_STAGE_GET_SOLID, iLabel, topShapeLength, cb_cancel); + is_cancel = cb_cancel; } if (cb_cancel) { shapeTool.reset(nullptr); @@ -345,6 +348,7 @@ bool load_step(const char *path, Model *model, ImportStepProgressFn stepFn, Step if (stepFn) { if ((i % stage_unit3) == 0) { stepFn(LOAD_STEP_STAGE_GET_MESH, i, stl.size(), cb_cancel); + is_cancel = cb_cancel; } if (cb_cancel) { model->delete_object(new_object); diff --git a/src/libslic3r/Format/STEP.hpp b/src/libslic3r/Format/STEP.hpp index 13965d4112..b86933a346 100644 --- a/src/libslic3r/Format/STEP.hpp +++ b/src/libslic3r/Format/STEP.hpp @@ -17,7 +17,7 @@ typedef std::function StepIsUtf8Fn; //BBS: Load an step file into a provided model. -extern bool load_step(const char *path, Model *model, ImportStepProgressFn proFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr); +extern bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgressFn proFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr); //BBS: Used to detect what kind of encoded type is used in name field of step // If is encoded in UTF8, the file don't need to be handled, then return the original path directly. diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 69f12b32fe..ef7bf7f9e3 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -240,6 +240,7 @@ static constexpr const char* LAST_TRIANGLE_ID_ATTR = "lastid"; static constexpr const char* SUBTYPE_ATTR = "subtype"; static constexpr const char* LOCK_ATTR = "locked"; static constexpr const char* BED_TYPE_ATTR = "bed_type"; +static constexpr const char* PRINT_SEQUENCE_ATTR = "print_sequence"; static constexpr const char* GCODE_FILE_ATTR = "gcode_file"; static constexpr const char* THUMBNAIL_FILE_ATTR = "thumbnail_file"; static constexpr const char* PATTERN_FILE_ATTR = "pattern_file"; @@ -1776,6 +1777,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) plate_data_list[it->first-1]->pattern_file = (m_load_restore || it->second->pattern_file.empty()) ? it->second->pattern_file : m_backup_path + "/" + it->second->pattern_file; plate_data_list[it->first-1]->pattern_bbox_file = (m_load_restore || it->second->pattern_bbox_file.empty()) ? it->second->pattern_bbox_file : m_backup_path + "/" + it->second->pattern_bbox_file; plate_data_list[it->first-1]->config = it->second->config; + current_plate_data = plate_data_list[it->first - 1]; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%")%it->first %plate_data_list[it->first-1]->thumbnail_file; it++; @@ -2499,6 +2501,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) void _BBS_3MF_Importer::_extract_custom_gcode_per_print_z_from_archive(::mz_zip_archive &archive, const mz_zip_archive_file_stat &stat) { + //BBS: add plate tree related logic if (stat.m_uncomp_size > 0) { std::string buffer((size_t)stat.m_uncomp_size, 0); mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, (void*)buffer.data(), (size_t)stat.m_uncomp_size, 0); @@ -2513,45 +2516,71 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (main_tree.front().first != "custom_gcodes_per_layer") return; - pt::ptree code_tree = main_tree.front().second; - m_model->custom_gcode_per_print_z.gcodes.clear(); + auto extract_code = [this](int plate_id, pt::ptree code_tree) { + for (const auto& code : code_tree) { + if (code.first == "mode") { + pt::ptree tree = code.second; + std::string mode = tree.get(".value"); + m_model->plates_custom_gcodes[plate_id - 1].mode = mode == CustomGCode::SingleExtruderMode ? CustomGCode::Mode::SingleExtruder : + mode == CustomGCode::MultiAsSingleMode ? CustomGCode::Mode::MultiAsSingle : + CustomGCode::Mode::MultiExtruder; + } + if (code.first == "layer") { + pt::ptree tree = code.second; + double print_z = tree.get(".top_z"); + int extruder = tree.get(".extruder"); + std::string color = tree.get(".color"); - for (const auto& code : code_tree) { - if (code.first == "mode") { - pt::ptree tree = code.second; - std::string mode = tree.get(".value"); - m_model->custom_gcode_per_print_z.mode = mode == CustomGCode::SingleExtruderMode ? CustomGCode::Mode::SingleExtruder : - mode == CustomGCode::MultiAsSingleMode ? CustomGCode::Mode::MultiAsSingle : - CustomGCode::Mode::MultiExtruder; + CustomGCode::Type type; + std::string extra; + pt::ptree attr_tree = tree.find("")->second; + if (attr_tree.find("type") == attr_tree.not_found()) { + // It means that data was saved in old version (2.2.0 and older) of PrusaSlicer + // read old data ... + std::string gcode = tree.get(".gcode"); + // ... and interpret them to the new data + type = gcode == "M600" ? CustomGCode::ColorChange : + gcode == "M601" ? CustomGCode::PausePrint : + gcode == "tool_change" ? CustomGCode::ToolChange : CustomGCode::Custom; + extra = type == CustomGCode::PausePrint ? color : + type == CustomGCode::Custom ? gcode : ""; + } + else { + type = static_cast(tree.get(".type")); + extra = tree.get(".extra"); + } + m_model->plates_custom_gcodes[plate_id - 1].gcodes.push_back(CustomGCode::Item{ print_z, type, extruder, color, extra }); + } } - if (code.first != "layer") - continue; + }; - pt::ptree tree = code.second; - double print_z = tree.get (".top_z" ); - int extruder = tree.get (".extruder"); - std::string color = tree.get (".color" ); + m_model->plates_custom_gcodes.clear(); - CustomGCode::Type type; - std::string extra; - pt::ptree attr_tree = tree.find("")->second; - if (attr_tree.find("type") == attr_tree.not_found()) { - // It means that data was saved in old version (2.2.0 and older) of PrusaSlicer - // read old data ... - std::string gcode = tree.get (".gcode"); - // ... and interpret them to the new data - type = gcode == "M600" ? CustomGCode::ColorChange : - gcode == "M601" ? CustomGCode::PausePrint : - gcode == "tool_change" ? CustomGCode::ToolChange : CustomGCode::Custom; - extra = type == CustomGCode::PausePrint ? color : - type == CustomGCode::Custom ? gcode : ""; + bool has_plate_info = false; + for (const auto& element : main_tree.front().second) { + if (element.first == "plate") { + has_plate_info = true; + + int plate_id = -1; + pt::ptree code_tree = element.second; + for (const auto& code : code_tree) { + if (code.first == "plate_info") { + plate_id = code.second.get(".id"); + } + + } + if (plate_id == -1) + continue; + + extract_code(plate_id, code_tree); } - else { - type = static_cast(tree.get(".type")); - extra = tree.get(".extra"); - } - m_model->custom_gcode_per_print_z.gcodes.push_back(CustomGCode::Item{print_z, type, extruder, color, extra}) ; + } + + if (!has_plate_info) { + int plate_id = 1; + pt::ptree code_tree = main_tree.front().second; + extract_code(plate_id, code_tree); } } } @@ -3444,6 +3473,12 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) ConfigOptionEnum::from_string(value, bed_type); m_curr_plater->config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); } + else if (key == PRINT_SEQUENCE_ATTR) + { + PrintSequence print_sequence = PrintSequence::ByLayer; + ConfigOptionEnum::from_string(value, print_sequence); + m_curr_plater->config.set_key_value("print_sequence", new ConfigOptionEnum(print_sequence)); + } else if (key == GCODE_FILE_ATTR) { m_curr_plater->gcode_file = value; @@ -3805,6 +3840,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //add the shared mesh logic shared_mesh_id = ::atoi(metadata.value.c_str()); found_count++; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": line %1%, shared_mesh_id %2%")%__LINE__%shared_mesh_id; } if (found_count >= 2) @@ -3822,6 +3858,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::map::iterator iter = m_shared_meshes.find(shared_mesh_id); if (iter != m_shared_meshes.end()) { shared_volume = iter->second; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": line %1%, found shared mesh, id %2%, mesh %3%")%__LINE__%shared_mesh_id%shared_volume; } } @@ -3874,11 +3911,17 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volume = object.add_volume(std::move(triangle_mesh)); - m_shared_meshes[sub_object->id] = volume; + if (shared_mesh_id != -1) + //for some cases the shared mesh is in other plate and not loaded in cli slicing + //we need to use the first one in the same plate instead + m_shared_meshes[shared_mesh_id] = volume; + else + m_shared_meshes[sub_object->id] = volume; } else { //create volume to use shared mesh volume = object.add_volume_with_shared_mesh(*shared_volume); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": line %1%, create volume using shared_mesh %2%")%__LINE__%shared_volume; } // stores the volume matrix taken from the metadata, if present if (has_transform) @@ -5347,6 +5390,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool sub_model = !objects_data.empty(); bool write_object = sub_model || !m_split_model; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", filename %1%, m_split_model %2%, sub_model %3%")%filename % m_split_model % sub_model; + #if WRITE_ZIP_LANGUAGE_ENCODING auto & zip_filename = filename; #else @@ -6388,6 +6433,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (bed_type_opt != nullptr && bed_type_names.size() > bed_type_opt->getInt()) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << BED_TYPE_ATTR << "\" " << VALUE_ATTR << "=\"" << bed_type_names[bed_type_opt->getInt()] << "\"/>\n"; + ConfigOption* print_sequence_opt = plate_data->config.option("print_sequence"); + t_config_enum_names print_sequence_names = ConfigOptionEnum::get_enum_names(); + if (print_sequence_opt != nullptr && print_sequence_names.size() > print_sequence_opt->getInt()) + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PRINT_SEQUENCE_ATTR << "\" " << VALUE_ATTR << "=\"" << print_sequence_names[print_sequence_opt->getInt()] << "\"/>\n"; + if (save_gcode) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << GCODE_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << xml_escape(plate_data->gcode_file) << "\"/>\n"; if (!plate_data->gcode_file.empty()) { @@ -6621,46 +6671,50 @@ bool _BBS_3MF_Exporter::_add_gcode_file_to_archive(mz_zip_archive& archive, cons return result; } -bool _BBS_3MF_Exporter::_add_custom_gcode_per_print_z_file_to_archive( mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config) +bool _BBS_3MF_Exporter::_add_custom_gcode_per_print_z_file_to_archive(mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config) { + //BBS: add plate tree related logic std::string out = ""; - - if (!model.custom_gcode_per_print_z.gcodes.empty()) { - pt::ptree tree; - pt::ptree& main_tree = tree.add("custom_gcodes_per_layer", ""); - - for (const CustomGCode::Item& code : model.custom_gcode_per_print_z.gcodes) { - pt::ptree& code_tree = main_tree.add("layer", ""); + bool has_custom_gcode = false; + pt::ptree tree; + pt::ptree& main_tree = tree.add("custom_gcodes_per_layer", ""); + for (auto custom_gcodes : model.plates_custom_gcodes) { + has_custom_gcode = true; + pt::ptree& plate_tree = main_tree.add("plate", ""); + pt::ptree& plate_idx_tree = plate_tree.add("plate_info", ""); + plate_idx_tree.put(".id", custom_gcodes.first + 1); // store data of custom_gcode_per_print_z - code_tree.put(".top_z" , code.print_z ); - code_tree.put(".type" , static_cast(code.type)); - code_tree.put(".extruder" , code.extruder ); - code_tree.put(".color" , code.color ); - code_tree.put(".extra" , code.extra ); + for (const CustomGCode::Item& code : custom_gcodes.second.gcodes) { + pt::ptree& code_tree = plate_tree.add("layer", ""); + code_tree.put(".top_z", code.print_z); + code_tree.put(".type", static_cast(code.type)); + code_tree.put(".extruder", code.extruder); + code_tree.put(".color", code.color); + code_tree.put(".extra", code.extra); - //BBS - std::string gcode = //code.type == CustomGCode::ColorChange ? config->opt_string("color_change_gcode") : - code.type == CustomGCode::PausePrint ? config->opt_string("machine_pause_gcode") : - code.type == CustomGCode::Template ? config->opt_string("template_custom_gcode") : - code.type == CustomGCode::ToolChange ? "tool_change" : code.extra; - code_tree.put(".gcode" , gcode ); - } + //BBS + std::string gcode = //code.type == CustomGCode::ColorChange ? config->opt_string("color_change_gcode") : + code.type == CustomGCode::PausePrint ? config->opt_string("machine_pause_gcode") : + code.type == CustomGCode::Template ? config->opt_string("template_custom_gcode") : + code.type == CustomGCode::ToolChange ? "tool_change" : code.extra; + code_tree.put(".gcode", gcode); + } - pt::ptree& mode_tree = main_tree.add("mode", ""); - // store mode of a custom_gcode_per_print_z - mode_tree.put(".value", model.custom_gcode_per_print_z.mode == CustomGCode::Mode::SingleExtruder ? CustomGCode::SingleExtruderMode : - model.custom_gcode_per_print_z.mode == CustomGCode::Mode::MultiAsSingle ? CustomGCode::MultiAsSingleMode : - CustomGCode::MultiExtruderMode); + pt::ptree& mode_tree = plate_tree.add("mode", ""); + // store mode of a custom_gcode_per_print_z + mode_tree.put(".value", custom_gcodes.second.mode == CustomGCode::Mode::SingleExtruder ? CustomGCode::SingleExtruderMode : + custom_gcodes.second.mode == CustomGCode::Mode::MultiAsSingle ? CustomGCode::MultiAsSingleMode : + CustomGCode::MultiExtruderMode); - if (!tree.empty()) { - std::ostringstream oss; - boost::property_tree::write_xml(oss, tree); - out = oss.str(); + } + if (has_custom_gcode) { + std::ostringstream oss; + boost::property_tree::write_xml(oss, tree); + out = oss.str(); - // Post processing("beautification") of the output string - boost::replace_all(out, "><", ">\n<"); - } + // Post processing("beautification") of the output string + boost::replace_all(out, "><", ">\n<"); } if (!out.empty()) { diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 3652709116..e0914f6774 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -22,6 +22,9 @@ struct ThumbnailData; #define EMBEDDED_FILAMENT_FILE_FORMAT "Metadata/filament_settings_%1%.config" #define EMBEDDED_PRINTER_FILE_FORMAT "Metadata/machine_settings_%1%.config" +#define BBL_DESIGNER_PROFILE_ID_TAG "DesignProfileId" +#define BBL_DESIGNER_MODEL_ID_TAG "DesignModelId" + //BBS: define assistant struct to store temporary variable during exporting 3mf class PackingTemporaryData diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index fa965bbbfb..59452e30fe 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -82,6 +82,132 @@ static const int g_max_flush_count = 4; bool GCode::gcode_label_objects = true; +Vec2d travel_point_1; +Vec2d travel_point_2; +Vec2d travel_point_3; + +static std::vector get_path_of_change_filament(const Print& print) +{ + // give safe value in case there is no start_end_points in config + std::vector out_points; + out_points.emplace_back(Vec2d(54, 0)); + out_points.emplace_back(Vec2d(54, 0)); + out_points.emplace_back(Vec2d(54, 245)); + + // get the start_end_points from config (20, -3) (54, 245) + Pointfs points = print.config().start_end_points.values; + if (points.size() != 2) + return out_points; + + Vec2d start_point = points[0]; + Vec2d end_point = points[1]; + + // the cutter area size(18, 28) + Pointfs excluse_area = print.config().bed_exclude_area.values; + if (excluse_area.size() != 4) + return out_points; + + double cutter_area_x = excluse_area[2].x() + 2; + double cutter_area_y = excluse_area[2].y() + 2; + + double start_x_position = start_point.x(); + double end_x_position = end_point.x(); + double end_y_position = end_point.y(); + + bool can_travel_form_left = true; + + // step 1: get the x-range intervals of all objects + std::vector> object_intervals; + for (PrintObject *print_object : print.objects()) { + const PrintInstances &print_instances = print_object->instances(); + BoundingBoxf3 bounding_box = print_instances[0].model_instance->get_object()->bounding_box(); + + if (bounding_box.min.x() < start_x_position && bounding_box.min.y() < cutter_area_y) + can_travel_form_left = false; + + std::pair object_scope = std::make_pair(bounding_box.min.x() - 2, bounding_box.max.x() + 2); + if (object_intervals.empty()) + object_intervals.push_back(object_scope); + else { + std::vector> new_object_intervals; + bool intervals_intersect = false; + std::pair new_merged_scope; + for (auto object_interval : object_intervals) { + if (object_interval.second >= object_scope.first && object_interval.first <= object_scope.second) { + if (intervals_intersect) { + new_merged_scope = std::make_pair(std::min(object_interval.first, new_merged_scope.first), std::max(object_interval.second, new_merged_scope.second)); + } else { // it is the first intersection + new_merged_scope = std::make_pair(std::min(object_interval.first, object_scope.first), std::max(object_interval.second, object_scope.second)); + } + intervals_intersect = true; + } else { + new_object_intervals.push_back(object_interval); + } + } + + if (intervals_intersect) { + new_object_intervals.push_back(new_merged_scope); + object_intervals = new_object_intervals; + } else + object_intervals.push_back(object_scope); + } + } + + // step 2: get the available x-range + std::sort(object_intervals.begin(), object_intervals.end(), + [](const std::pair &left, const std::pair &right) { + return left.first < right.first; + }); + std::vector> available_intervals; + double start_position = 0; + for (auto object_interval : object_intervals) { + if (object_interval.first > start_position) + available_intervals.push_back(std::make_pair(start_position, object_interval.first)); + start_position = object_interval.second; + } + available_intervals.push_back(std::make_pair(start_position, 255)); + + // step 3: get the nearest path + double new_path = 255; + for (auto available_interval : available_intervals) { + if (available_interval.first > end_x_position) { + double distance = available_interval.first - end_x_position; + new_path = abs(end_x_position - new_path) < distance ? new_path : available_interval.first; + break; + } else { + if (available_interval.second >= end_x_position) { + new_path = end_x_position; + break; + } else if (!can_travel_form_left && available_interval.second < start_x_position) { + continue; + } else { + new_path = available_interval.second; + } + } + } + + // step 4: generate path points (new_path == start_x_position means not need to change path) + Vec2d out_point_1; + Vec2d out_point_2; + Vec2d out_point_3; + if (new_path < start_x_position) { + out_point_1 = Vec2d(start_x_position, cutter_area_y); + out_point_2 = Vec2d(new_path, cutter_area_y); + out_point_3 = Vec2d(new_path, end_y_position); + } else { + out_point_1 = Vec2d(new_path, 0); + out_point_2 = Vec2d(new_path, 0); + out_point_3 = Vec2d(new_path, end_y_position); + } + + out_points.clear(); + out_points.emplace_back(out_point_1); + out_points.emplace_back(out_point_2); + out_points.emplace_back(out_point_3); + + return out_points; +} + // Only add a newline in case the current G-code does not end with a newline. static inline void check_add_eol(std::string& gcode) { @@ -378,6 +504,12 @@ bool GCode::gcode_label_objects = true; config.set_key_value("second_flush_volume", new ConfigOptionFloat(purge_length / 2.f)); config.set_key_value("old_filament_e_feedrate", new ConfigOptionInt(old_filament_e_feedrate)); config.set_key_value("new_filament_e_feedrate", new ConfigOptionInt(new_filament_e_feedrate)); + config.set_key_value("travel_point_1_x", new ConfigOptionFloat(float(travel_point_1.x()))); + config.set_key_value("travel_point_1_y", new ConfigOptionFloat(float(travel_point_1.y()))); + config.set_key_value("travel_point_2_x", new ConfigOptionFloat(float(travel_point_2.x()))); + config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y()))); + config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x()))); + config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y()))); int flush_count = std::min(g_max_flush_count, (int)std::round(purge_volume / g_purge_volume_one_time)); float flush_unit = purge_length / flush_count; @@ -624,7 +756,7 @@ bool GCode::gcode_label_objects = true; std::vector GCode::collect_layers_to_print(const PrintObject& object) { std::vector layers_to_print; - layers_to_print.reserve(object.layers().size() + object.support_layers().size() + object.tree_support_layers().size()); + layers_to_print.reserve(object.layers().size() + object.support_layers().size()); /* // Calculate a minimum support layer height as a minimum over all extruders, but not smaller than 10um. @@ -647,9 +779,8 @@ std::vector GCode::collect_layers_to_print(const PrintObjec // Pair the object layers with the support layers by z. size_t idx_object_layer = 0; size_t idx_support_layer = 0; - size_t idx_tree_support_layer = 0; const LayerToPrint* last_extrusion_layer = nullptr; - while (idx_object_layer < object.layers().size() || idx_support_layer < object.support_layers().size() || idx_tree_support_layer < object.tree_support_layers().size()) { + while (idx_object_layer < object.layers().size() || idx_support_layer < object.support_layers().size()) { LayerToPrint layer_to_print; double print_z_min = std::numeric_limits::max(); if (idx_object_layer < object.layers().size()) { @@ -662,11 +793,6 @@ std::vector GCode::collect_layers_to_print(const PrintObjec print_z_min = std::min(print_z_min, layer_to_print.support_layer->print_z); } - if (idx_tree_support_layer < object.tree_support_layers().size()) { - layer_to_print.tree_support_layer = object.tree_support_layers()[idx_tree_support_layer++]; - print_z_min = std::min(print_z_min, layer_to_print.tree_support_layer->print_z); - } - if (layer_to_print.object_layer && layer_to_print.object_layer->print_z > print_z_min + EPSILON) { layer_to_print.object_layer = nullptr; --idx_object_layer; @@ -677,17 +803,11 @@ std::vector GCode::collect_layers_to_print(const PrintObjec --idx_support_layer; } - if (layer_to_print.tree_support_layer && layer_to_print.tree_support_layer->print_z > print_z_min + EPSILON) { - layer_to_print.tree_support_layer = nullptr; - --idx_tree_support_layer; - } - layer_to_print.original_object = &object; layers_to_print.push_back(layer_to_print); bool has_extrusions = (layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) - || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions() - || (layer_to_print.tree_support_layer && layer_to_print.tree_support_layer->has_extrusions())); + || (layer_to_print.support_layer && layer_to_print.support_layer->has_extrusions()); // Check that there are extrusions on the very first layer. The case with empty // first layer may result in skirt/brim in the air and maybe other issues. @@ -699,13 +819,12 @@ std::vector GCode::collect_layers_to_print(const PrintObjec // In case there are extrusions on this layer, check there is a layer to lay it on. if ((layer_to_print.object_layer && layer_to_print.object_layer->has_extrusions()) // Allow empty support layers, as the support generator may produce no extrusions for non-empty support regions. - || (layer_to_print.support_layer /* && layer_to_print.support_layer->has_extrusions() */) - || (layer_to_print.tree_support_layer)) { + || (layer_to_print.support_layer /* && layer_to_print.support_layer->has_extrusions() */)) { double top_cd = object.config().support_top_z_distance; //double bottom_cd = object.config().support_bottom_z_distance == 0. ? top_cd : object.config().support_bottom_z_distance; double bottom_cd = top_cd; - double extra_gap = ((layer_to_print.support_layer || layer_to_print.tree_support_layer) ? bottom_cd : top_cd); + double extra_gap = (layer_to_print.support_layer ? bottom_cd : top_cd); double maximal_print_z = (last_extrusion_layer ? last_extrusion_layer->print_z() : 0.) + layer_to_print.layer()->height @@ -914,6 +1033,9 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu { PROFILE_CLEAR(); + // BBS + m_curr_print = print; + CNumericLocalesSetter locales_setter; // Does the file exist? If so, we hope that it is still valid. @@ -1333,7 +1455,14 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato for (auto layer : object->support_layers()) zs.push_back((coord_t)(layer->print_z / EPSILON)); std::sort(zs.begin(), zs.end()); - m_layer_count += (unsigned int)(object->instances().size() * (std::unique(zs.begin(), zs.end()) - zs.begin())); + //BBS: merge numerically very close Z values. + auto end_it = std::unique(zs.begin(), zs.end()); + unsigned int temp_layer_count = (unsigned int)(end_it - zs.begin()); + for (auto it = zs.begin(); it != end_it - 1; it++) { + if (abs(*it - *(it + 1)) < EPSILON) + temp_layer_count--; + } + m_layer_count += (unsigned int)(object->instances().size() * temp_layer_count); } } else { // Print all objects with the same print_z together. @@ -1347,7 +1476,13 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato zs.push_back((coord_t)(layer->print_z / EPSILON)); } std::sort(zs.begin(), zs.end()); - m_layer_count = (unsigned int)(std::unique(zs.begin(), zs.end()) - zs.begin()); + //BBS: merge numerically very close Z values. + auto end_it = std::unique(zs.begin(), zs.end()); + m_layer_count = (unsigned int)(end_it - zs.begin()); + for (auto it = zs.begin(); it != end_it - 1; it++) { + if (abs(*it - *(it + 1)) < EPSILON) + m_layer_count--; + } } print.throw_if_canceled(); @@ -1374,6 +1509,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato //BBS: total estimated printing time file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str()); //BBS: total layer number + file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Total_Layer_Number_Placeholder).c_str()); file.write_format("; total layer number: %d\n", m_layer_count); file.write_format("; HEADER_BLOCK_END\n\n"); @@ -1450,6 +1586,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // For a print by objects, find the 1st printing object. ToolOrdering tool_ordering; unsigned int initial_extruder_id = (unsigned int)-1; + //BBS: first non-support filament extruder + unsigned int initial_non_support_extruder_id; unsigned int final_extruder_id = (unsigned int)-1; bool has_wipe_tower = false; std::vector print_object_instances_ordering; @@ -1462,8 +1600,33 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato print_object_instance_sequential_active = print_object_instances_ordering.begin(); for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++ print_object_instance_sequential_active) { tool_ordering = ToolOrdering(*(*print_object_instance_sequential_active)->print_object, initial_extruder_id); - if ((initial_extruder_id = tool_ordering.first_extruder()) != static_cast(-1)) + if ((initial_extruder_id = tool_ordering.first_extruder()) != static_cast(-1)) { + //BBS: try to find the non-support filament extruder if is multi color and initial_extruder is support filament + initial_non_support_extruder_id = initial_extruder_id; + if (tool_ordering.all_extruders().size() > 1 && print.config().filament_is_support.get_at(initial_extruder_id)) { + bool has_non_support_filament = false; + for (unsigned int extruder : tool_ordering.all_extruders()) { + if (!print.config().filament_is_support.get_at(extruder)) { + has_non_support_filament = true; + break; + } + } + //BBS: find the non-support filament extruder of object + if (has_non_support_filament) + for (LayerTools layer_tools : tool_ordering.layer_tools()) { + if (!layer_tools.has_object) + continue; + for (unsigned int extruder : layer_tools.extruders) { + if (print.config().filament_is_support.get_at(extruder)) + continue; + initial_non_support_extruder_id = extruder; + break; + } + } + } + break; + } } if (initial_extruder_id == static_cast(-1)) // No object to print was found, cancel the G-code export. @@ -1471,6 +1634,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // We don't allow switching of extruders per layer by Model::custom_gcode_per_print_z in sequential mode. // Use the extruder IDs collected from Regions. this->set_extruders(print.extruders()); + + has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); } else { // Find tool ordering for all the objects at once, and the initial extruder ID. // If the tool ordering has been pre-calculated by Print class for wipe tower already, reuse it. @@ -1490,6 +1655,32 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato #else initial_extruder_id = tool_ordering.first_extruder(); #endif + //BBS: try to find the non-support filament extruder if is multi color and initial_extruder is support filament + if (initial_extruder_id != static_cast(-1)) { + initial_non_support_extruder_id = initial_extruder_id; + if (tool_ordering.all_extruders().size() > 1 && print.config().filament_is_support.get_at(initial_extruder_id)) { + bool has_non_support_filament = false; + for (unsigned int extruder : tool_ordering.all_extruders()) { + if (!print.config().filament_is_support.get_at(extruder)) { + has_non_support_filament = true; + break; + } + } + //BBS: find the non-support filament extruder of object + if (has_non_support_filament) + for (LayerTools layer_tools : tool_ordering.layer_tools()) { + if (!layer_tools.has_object) + continue; + for (unsigned int extruder : layer_tools.extruders) { + if (print.config().filament_is_support.get_at(extruder)) + continue; + initial_non_support_extruder_id = extruder; + break; + } + } + } + } + // In non-sequential print, the printing extruders may have been modified by the extruder switches stored in Model::custom_gcode_per_print_z. // Therefore initialize the printing extruders from there. this->set_extruders(tool_ordering.all_extruders()); @@ -1499,6 +1690,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (initial_extruder_id == (unsigned int)-1) { // Nothing to print! initial_extruder_id = 0; + initial_non_support_extruder_id = 0; final_extruder_id = 0; } else { final_extruder_id = tool_ordering.last_extruder(); @@ -1522,6 +1714,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Let the start-up script prime the 1st printing tool. m_placeholder_parser.set("initial_tool", initial_extruder_id); m_placeholder_parser.set("initial_extruder", initial_extruder_id); + //BBS + m_placeholder_parser.set("initial_no_support_tool", initial_non_support_extruder_id); + m_placeholder_parser.set("initial_no_support_extruder", initial_non_support_extruder_id); m_placeholder_parser.set("current_extruder", initial_extruder_id); //Set variable for total layer count so it can be used in custom gcode. m_placeholder_parser.set("total_layer_count", m_layer_count); @@ -1531,10 +1726,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_placeholder_parser.set("has_wipe_tower", has_wipe_tower); //m_placeholder_parser.set("has_single_extruder_multi_material_priming", has_wipe_tower && print.config().single_extruder_multi_material_priming); m_placeholder_parser.set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change). + Vec2f plate_offset = m_writer.get_xy_offset(); { BoundingBoxf bbox(print.config().printable_area.values); - m_placeholder_parser.set("print_bed_min", new ConfigOptionFloats({ bbox.min.x(), bbox.min.y() })); - m_placeholder_parser.set("print_bed_max", new ConfigOptionFloats({ bbox.max.x(), bbox.max.y() })); + m_placeholder_parser.set("print_bed_min", new ConfigOptionFloats({ bbox.min.x() - plate_offset.x(), bbox.min.y() - plate_offset.y() })); + m_placeholder_parser.set("print_bed_max", new ConfigOptionFloats({ bbox.max.x() - plate_offset.x(), bbox.max.y() - plate_offset.y() })); m_placeholder_parser.set("print_bed_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() })); } { @@ -1549,8 +1745,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato pts->values.emplace_back(unscale(pt) - Vec2d(print.get_plate_origin().x(), print.get_plate_origin().y())); BoundingBoxf bbox(pts->values); m_placeholder_parser.set("first_layer_print_convex_hull", pts.release()); - m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({ bbox.min.x(), bbox.min.y() })); - m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({ bbox.max.x(), bbox.max.y() })); + m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({bbox.min.x() - plate_offset.x(), bbox.min.y() - plate_offset.y()})); + m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({bbox.max.x() - plate_offset.x(), bbox.max.y() - plate_offset.y()})); m_placeholder_parser.set("first_layer_print_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() })); } float outer_wall_volumetric_speed = 0.0f; @@ -1575,13 +1771,13 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato //BBS: calculate the volumetric speed of outer wall. Ignore pre-object setting and multi-filament, and just use the default setting { - float filament_max_volumetric_speed = m_config.option("filament_max_volumetric_speed")->get_at(initial_extruder_id); + float filament_max_volumetric_speed = m_config.option("filament_max_volumetric_speed")->get_at(initial_non_support_extruder_id); float outer_wall_line_width = print.default_region_config().outer_wall_line_width.value; if (outer_wall_line_width == 0.0) { float default_line_width = print.default_object_config().line_width.value; - outer_wall_line_width = default_line_width == 0.0 ? m_config.nozzle_diameter.get_at(initial_extruder_id) : default_line_width; + outer_wall_line_width = default_line_width == 0.0 ? m_config.nozzle_diameter.get_at(initial_non_support_extruder_id) : default_line_width; } - Flow outer_wall_flow = Flow(outer_wall_line_width, m_config.layer_height, m_config.nozzle_diameter.get_at(initial_extruder_id)); + Flow outer_wall_flow = Flow(outer_wall_line_width, m_config.layer_height, m_config.nozzle_diameter.get_at(initial_non_support_extruder_id)); float outer_wall_speed = print.default_region_config().outer_wall_speed.value; outer_wall_volumetric_speed = outer_wall_speed * outer_wall_flow.mm3_per_mm(); if (outer_wall_volumetric_speed > filament_max_volumetric_speed) @@ -1637,7 +1833,17 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato std::function throw_if_canceled_func = [&print]() { print.throw_if_canceled(); }; m_seam_placer.init(print, throw_if_canceled_func); - // BBS: priming logic is removed, always set first extruder here. + // BBS: get path for change filament + if (m_writer.multiple_extruders) { + std::vector points = get_path_of_change_filament(print); + if (points.size() == 3) { + travel_point_1 = points[0]; + travel_point_2 = points[1]; + travel_point_3 = points[2]; + } + } + + // BBS: priming logic is removed, always set first extruer here. //if (! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) { // Set initial extruder only after custom start G-code. @@ -1676,8 +1882,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato gcode += pa_test.generate_test(params.start, params.step, std::llround(std::ceil((params.end - params.start) / params.step))); file.write(gcode); - } - else { + } else { //BBS: open spaghetti detector if (is_bbl_printers) { // if (print.config().spaghetti_detector.value) @@ -1685,11 +1890,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } // Do all objects for each layer. - if (print.config().print_sequence == PrintSequence::ByObject) { + if (print.config().print_sequence == PrintSequence::ByObject && !has_wipe_tower) { size_t finished_objects = 0; - const PrintObject* prev_object = (*print_object_instance_sequential_active)->print_object; - for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++print_object_instance_sequential_active) { - const PrintObject& object = *(*print_object_instance_sequential_active)->print_object; + const PrintObject *prev_object = (*print_object_instance_sequential_active)->print_object; + for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++ print_object_instance_sequential_active) { + const PrintObject &object = *(*print_object_instance_sequential_active)->print_object; if (&object != prev_object || tool_ordering.first_extruder() != final_extruder_id) { tool_ordering = ToolOrdering(object, final_extruder_id); unsigned int new_extruder_id = tool_ordering.first_extruder(); @@ -1697,7 +1902,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Skip this object. continue; initial_extruder_id = new_extruder_id; - final_extruder_id = tool_ordering.last_extruder(); + final_extruder_id = tool_ordering.last_extruder(); assert(final_extruder_id != (unsigned int)-1); } print.throw_if_canceled(); @@ -1751,34 +1956,33 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write("M1003 S0\n"); } } -#ifdef HAS_PRESSURE_EQUALIZER + #ifdef HAS_PRESSURE_EQUALIZER if (m_pressure_equalizer) file.write(m_pressure_equalizer->process("", true)); -#endif /* HAS_PRESSURE_EQUALIZER */ - ++finished_objects; + #endif /* HAS_PRESSURE_EQUALIZER */ + ++ finished_objects; // Flag indicating whether the nozzle temperature changes from 1st to 2nd layer were performed. // Reset it when starting another object from 1st layer. m_second_layer_things_done = false; prev_object = &object; } - } - else { + } else { // Sort layers by Z. // All extrusion moves with the same top layer height are extruded uninterrupted. std::vector>> layers_to_print = collect_layers_to_print(print); // Prusa Multi-Material wipe tower. - if (has_wipe_tower && !layers_to_print.empty()) { - m_wipe_tower.reset(new WipeTowerIntegration(print.config(), print.get_plate_index(), print.get_plate_origin(), *print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); + if (has_wipe_tower && ! layers_to_print.empty()) { + m_wipe_tower.reset(new WipeTowerIntegration(print.config(), print.get_plate_index(), print.get_plate_origin(), * print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); //BBS //file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); file.write(m_writer.travel_to_z(initial_layer_print_height, "Move to the first layer height")); -#if 0 + #if 0 if (print.config().single_extruder_multi_material_priming) { file.write(m_wipe_tower->prime(*this)); // Verify, whether the print overaps the priming extrusions. BoundingBoxf bbox_print(get_print_extrusions_extents(print)); coordf_t twolayers_printz = ((layers_to_print.size() == 1) ? layers_to_print.front() : layers_to_print[1]).first + EPSILON; - for (const PrintObject* print_object : print.objects()) + for (const PrintObject *print_object : print.objects()) bbox_print.merge(get_print_object_extrusions_extents(*print_object, twolayers_printz)); bbox_print.merge(get_wipe_tower_extrusions_extents(print, twolayers_printz)); BoundingBoxf bbox_prime(get_wipe_tower_priming_extrusions_extents(print)); @@ -1791,8 +1995,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (overlap) { // Wait for the user to remove the priming extrusions. file.write("M1 Remove priming towers and click button.\n"); - } - else { + } else { // Just wait for a bit to let the user check, that the priming succeeded. //TODO Add a message explaining what the printer is waiting for. This needs a firmware fix. file.write("M1 S10\n"); @@ -1810,7 +2013,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato //} //} } -#endif + #endif print.throw_if_canceled(); } // Process all layers of all objects (non-sequential mode) with a parallel pipeline: @@ -1824,10 +2027,10 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write("M1003 S0\n"); } } -#ifdef HAS_PRESSURE_EQUALIZER + #ifdef HAS_PRESSURE_EQUALIZER if (m_pressure_equalizer) file.write(m_pressure_equalizer->process("", true)); -#endif /* HAS_PRESSURE_EQUALIZER */ + #endif /* HAS_PRESSURE_EQUALIZER */ if (m_wipe_tower) // Purge the extruder, pull out the active filament. file.write(m_wipe_tower->finalize(*this)); @@ -2502,7 +2705,6 @@ GCode::LayerResult GCode::process_layer( // First object, support and raft layer, if available. const Layer *object_layer = nullptr; const SupportLayer *support_layer = nullptr; - const TreeSupportLayer* tree_support_layer = nullptr; const SupportLayer *raft_layer = nullptr; for (const LayerToPrint &l : layers) { if (l.object_layer && ! object_layer) @@ -2513,16 +2715,6 @@ GCode::LayerResult GCode::process_layer( if (! raft_layer && support_layer->id() < support_layer->object()->slicing_parameters().raft_layers()) raft_layer = support_layer; } - - if (l.tree_support_layer) { - if (!tree_support_layer) - tree_support_layer = l.tree_support_layer; - // BBS: to be checked. -#if 0 - if (!raft_layer && tree_support_layer->id() < tree_support_layer->object()->slicing_parameters().raft_layers()) - raft_layer = tree_support_layer; -#endif - } } const Layer* layer_ptr = nullptr; @@ -2530,8 +2722,6 @@ GCode::LayerResult GCode::process_layer( layer_ptr = object_layer; else if (support_layer != nullptr) layer_ptr = support_layer; - else - layer_ptr = tree_support_layer; const Layer& layer = *layer_ptr; GCode::LayerResult result { {}, layer.id(), false, last_layer }; if (layer_tools.extruders.empty()) @@ -2552,7 +2742,7 @@ GCode::LayerResult GCode::process_layer( // Check whether it is possible to apply the spiral vase logic for this layer. // Just a reminder: A spiral vase mode is allowed for a single object, single material print only. m_enable_loop_clipping = true; - if (m_spiral_vase && layers.size() == 1 && support_layer == nullptr && tree_support_layer == nullptr) { + if (m_spiral_vase && layers.size() == 1 && support_layer == nullptr) { bool enable = (layer.id() > 0 || !print.has_brim()) && (layer.id() >= (size_t)print.config().skirt_height.value && ! print.has_infinite_skirt()); if (enable) { for (const LayerRegion *layer_region : layer.regions()) @@ -2790,90 +2980,6 @@ GCode::LayerResult GCode::process_layer( } } - // BBS - if (layer_to_print.tree_support_layer != nullptr) { - const TreeSupportLayer& tree_support_layer = *layer_to_print.tree_support_layer; - const PrintObject& object = *layer_to_print.original_object; - if (!tree_support_layer.support_fills.entities.empty()) { - ExtrusionRole role = tree_support_layer.support_fills.role(); - bool has_support = role == erMixed || role == erSupportMaterial || role == erSupportTransition; - bool has_interface = role == erMixed || role == erSupportMaterialInterface; - // Extruder ID of the support base. -1 if "don't care". - unsigned int support_extruder = object.config().support_filament.value - 1; - // Shall the support be printed with the active extruder, preferably with non-soluble, to avoid tool changes? - bool support_dontcare = object.config().support_filament.value == 0; - // Extruder ID of the support interface. -1 if "don't care". - unsigned int interface_extruder = object.config().support_interface_filament.value - 1; - // Shall the support interface be printed with the active extruder, preferably with non-soluble, to avoid tool changes? - bool interface_dontcare = object.config().support_interface_filament.value == 0; - - // BBS: apply wiping overridden extruders - WipingExtrusions& wiping_extrusions = const_cast(layer_tools).wiping_extrusions(); - if (support_dontcare) { - int extruder_override = wiping_extrusions.get_support_extruder_overrides(&object); - if (extruder_override >= 0) { - support_extruder = extruder_override; - support_dontcare = false; - } - } - - if (interface_dontcare) { - int extruder_override = wiping_extrusions.get_support_interface_extruder_overrides(&object); - if (extruder_override >= 0) { - interface_extruder = extruder_override; - interface_dontcare = false; - } - } - - // BBS: try to print support base with a filament other than interface filament - if (support_dontcare && !interface_dontcare) { - unsigned int dontcare_extruder = first_extruder_id; - for (unsigned int extruder_id : layer_tools.extruders) { - if (print.config().filament_soluble.get_at(extruder_id)) continue; - - if (extruder_id == interface_extruder) continue; - - dontcare_extruder = extruder_id; - break; - } - - if (support_dontcare) support_extruder = dontcare_extruder; - } - else if (support_dontcare || interface_dontcare) { - // Some support will be printed with "don't care" material, preferably non-soluble. - // Is the current extruder assigned a soluble filament? - unsigned int dontcare_extruder = first_extruder_id; - if (print.config().filament_soluble.get_at(dontcare_extruder)) { - // The last extruder printed on the previous layer extrudes soluble filament. - // Try to find a non-soluble extruder on the same layer. - for (unsigned int extruder_id : layer_tools.extruders) - if (!print.config().filament_soluble.get_at(extruder_id)) { - dontcare_extruder = extruder_id; - break; - } - } - - if (support_dontcare) - support_extruder = dontcare_extruder; - if (interface_dontcare) - interface_extruder = dontcare_extruder; - } - // Both the support and the support interface are printed with the same extruder, therefore - // the interface may be interleaved with the support base. - bool single_extruder = !has_support || support_extruder == interface_extruder; - - // Assign an extruder to the base. - ObjectByExtruder& obj = object_by_extruder(by_extruder, has_support ? support_extruder : interface_extruder, &layer_to_print - layers.data(), layers.size()); - obj.support = &tree_support_layer.support_fills; - obj.support_extrusion_role = single_extruder ? erMixed : erSupportMaterial; - if (!single_extruder && has_interface) { - ObjectByExtruder& obj_interface = object_by_extruder(by_extruder, interface_extruder, &layer_to_print - layers.data(), layers.size()); - obj_interface.support = &tree_support_layer.support_fills; - obj_interface.support_extrusion_role = erSupportMaterialInterface; - } - } - } - if (layer_to_print.object_layer != nullptr) { const Layer &layer = *layer_to_print.object_layer; // We now define a strategy for building perimeters and fills. The separation @@ -3024,8 +3130,9 @@ GCode::LayerResult GCode::process_layer( // BBS: ordering instances by extruder std::vector instances_to_print; bool has_prime_tower = print.config().enable_prime_tower - && print.config().print_sequence == PrintSequence::ByLayer - && print.extruders().size() > 1; + && print.extruders().size() > 1 + && (print.config().print_sequence == PrintSequence::ByLayer + || (print.config().print_sequence == PrintSequence::ByObject && print.objects().size() == 1)); if (has_prime_tower) { int plate_idx = print.get_plate_index(); Point wt_pos(print.config().wipe_tower_x.get_at(plate_idx), print.config().wipe_tower_y.get_at(plate_idx)); @@ -3097,12 +3204,7 @@ GCode::LayerResult GCode::process_layer( m_last_obj_copy = this_object_copy; this->set_origin(unscale(offset)); if (instance_to_print.object_by_extruder.support != nullptr) { - if (layers[instance_to_print.layer_id].support_layer) { - m_layer = layers[instance_to_print.layer_id].support_layer; - } - else { - m_layer = layers[instance_to_print.layer_id].tree_support_layer; - } + m_layer = layers[instance_to_print.layer_id].support_layer; m_object_layer_over_raft = false; //BBS: print supports' brims first @@ -3303,8 +3405,11 @@ std::string GCode::change_layer(coordf_t print_z, bool lazy_raise) //BBS //coordf_t z = print_z + m_config.z_offset.value; // in unscaled coordinates coordf_t z = print_z; // in unscaled coordinates - if (EXTRUDER_CONFIG(retract_when_changing_layer) && m_writer.will_move_z(z)) - gcode += this->retract(); + if (EXTRUDER_CONFIG(retract_when_changing_layer) && m_writer.will_move_z(z)) { + LiftType lift_type = this->to_lift_type(ZHopType(EXTRUDER_CONFIG(z_hop_types))); + //BBS: force to use SpiralLift when change layer if lift type is auto + gcode += this->retract(false, false, ZHopType(EXTRUDER_CONFIG(z_hop_types)) == ZHopType::zhtAuto ? LiftType::SpiralLift : lift_type); + } if (!lazy_raise) { std::ostringstream comment; @@ -3421,6 +3526,12 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou if (was_clockwise) { // swap points Point c = a; a = b; b = c; + + // double angle = paths.front().first_point().ccw_angle(a, b) / 3; + + // // turn left if contour, turn right if hole + // if (was_clockwise) angle *= -1; + } double angle = paths.front().first_point().ccw_angle(a, b) / 3; @@ -4067,7 +4178,8 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string Polyline travel { this->last_pos(), point }; // check whether a straight travel move would need retraction - bool needs_retraction = this->needs_retraction(travel, role); + LiftType lift_type = LiftType::SpiralLift; + bool needs_retraction = this->needs_retraction(travel, role, lift_type); // check whether wipe could be disabled without causing visible stringing bool could_be_wipe_disabled = false; // Save state of use_external_mp_once for the case that will be needed to call twice m_avoid_crossing_perimeters.travel_to. @@ -4104,10 +4216,12 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string // multi-hop travel path inside the configuration space if (needs_retraction && m_config.reduce_crossing_wall - && ! m_avoid_crossing_perimeters.disabled_once()) { + && ! m_avoid_crossing_perimeters.disabled_once() + //BBS: don't generate detour travel paths when current position is unclear + && m_writer.is_current_position_clear()) { travel = m_avoid_crossing_perimeters.travel_to(*this, point, &could_be_wipe_disabled); // check again whether the new travel path still needs a retraction - needs_retraction = this->needs_retraction(travel, role); + needs_retraction = this->needs_retraction(travel, role, lift_type); //if (needs_retraction && m_layer_index > 1) exit(0); } @@ -4120,7 +4234,7 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string m_wipe.reset_path(); Point last_post_before_retract = this->last_pos(); - gcode += this->retract(); + gcode += this->retract(false, false, lift_type); // When "Wipe while retracting" is enabled, then extruder moves to another position, and travel from this position can cross perimeters. // Because of it, it is necessary to call avoid crossing perimeters again with new starting point after calling retraction() // FIXME Lukas H.: Try to predict if this second calling of avoid crossing perimeters will be needed or not. It could save computations. @@ -4155,36 +4269,102 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string return gcode; } -bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) +//BBS +LiftType GCode::to_lift_type(ZHopType z_hop_types) { + switch (z_hop_types) + { + case ZHopType::zhtNormal: + return LiftType::NormalLift; + case ZHopType::zhtSlope: + return LiftType::LazyLift; + case ZHopType::zhtSpiral: + return LiftType::SpiralLift; + default: + // if no corresponding lift type, use normal lift + return LiftType::NormalLift; + } +}; + +bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftType& lift_type) { if (travel.length() < scale_(EXTRUDER_CONFIG(retraction_minimum_travel))) { // skip retraction if the move is shorter than the configured threshold return false; } + auto is_through_overhang = [this](const Polyline& travel) { + const float protect_z_scaled = scale_(0.4); + std::pair z_range; + z_range.second = m_layer ? m_layer->print_z : 0.f; + z_range.first = std::max(0.f, z_range.second - protect_z_scaled); + for (auto object : m_curr_print->objects()) { + BoundingBox obj_bbox = object->bounding_box(); + BoundingBox travel_bbox = get_extents(travel); + obj_bbox.offset(scale_(EPSILON)); + if (!obj_bbox.overlap(travel_bbox)) + continue; + + for (auto layer : object->layers()) { + if (layer->print_z < z_range.first) + continue; + + if (layer->print_z > z_range.second + EPSILON) + break; + + for (ExPolygon& overhang : layer->loverhangs) { + if (overhang.contains(travel)) + return true; + } + } + } + + return false; + }; + + float max_z_hop = 0.f; + for (int i = 0; i < m_config.z_hop.size(); i++) + max_z_hop = std::max(max_z_hop, (float)m_config.z_hop.get_at(i)); + float travel_len_thresh = max_z_hop / tan(GCodeWriter::slope_threshold); + float accum_len = 0.f; + Polyline clipped_travel; + for (auto line : travel.lines()) { + if (accum_len + line.length() > travel_len_thresh + EPSILON) { + Point end_pnt = line.a + line.normal() * (travel_len_thresh - accum_len); + clipped_travel.append(Polyline(line.a, end_pnt)); + break; + } + else { + clipped_travel.append(Polyline(line.a, line.b)); + accum_len += line.length(); + } + } + //BBS: force to retract when leave from external perimeter for a long travel //Better way is judging whether the travel move direction is same with last extrusion move. - if (is_perimeter(m_last_processor_extrusion_role) && m_last_processor_extrusion_role != erPerimeter) + if (is_perimeter(m_last_processor_extrusion_role) && m_last_processor_extrusion_role != erPerimeter) { + if (ZHopType(EXTRUDER_CONFIG(z_hop_types)) == ZHopType::zhtAuto) { + lift_type = is_through_overhang(clipped_travel) ? LiftType::SpiralLift : LiftType::LazyLift; + } + else { + lift_type = to_lift_type(ZHopType(EXTRUDER_CONFIG(z_hop_types))); + } return true; + } if (role == erSupportMaterial || role == erSupportTransition) { const SupportLayer* support_layer = dynamic_cast(m_layer); - //FIXME support_layer->support_islands.contains should use some search structure! if (support_layer != NULL && support_layer->support_islands.contains(travel)) // skip retraction if this is a travel move inside a support material island //FIXME not retracting over a long path may cause oozing, which in turn may result in missing material // at the end of the extrusion path! return false; - //reduce the retractions in lightning infills for tree support - const TreeSupportLayer* ts_layer = dynamic_cast(m_layer); - if (ts_layer != NULL) - for (auto& area : ts_layer->base_areas) - if(area.contains(travel)) + if (support_layer != NULL && support_layer->support_type==stInnerTree) + for (auto &area : support_layer->base_areas) + if (area.contains(travel)) return false; } - //BBS: need retract when long moving to print perimeter to avoid dropping of material if (!is_perimeter(role) && m_config.reduce_infill_retraction && m_layer != nullptr && m_config.sparse_infill_density.value > 0 && m_layer->any_internal_region_slice_contains(travel)) @@ -4194,10 +4374,16 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) return false; // retract if reduce_infill_retraction is disabled or doesn't apply when role is perimeter + if (ZHopType(EXTRUDER_CONFIG(z_hop_types)) == ZHopType::zhtAuto) { + lift_type = is_through_overhang(clipped_travel) ? LiftType::SpiralLift : LiftType::LazyLift; + } + else { + lift_type = to_lift_type(ZHopType(EXTRUDER_CONFIG(z_hop_types))); + } return true; } -std::string GCode::retract(bool toolchange, bool is_last_retraction) +std::string GCode::retract(bool toolchange, bool is_last_retraction, LiftType lift_type) { std::string gcode; @@ -4221,11 +4407,7 @@ std::string GCode::retract(bool toolchange, bool is_last_retraction) if (m_writer.extruder()->retraction_length() > 0 || m_config.use_firmware_retraction) { // BBS: don't do lazy_lift when enable spiral vase size_t extruder_id = m_writer.extruder()->id(); - auto _lift = m_config.z_lift_type.value; - if(m_spiral_vase) - _lift = NormalLift; - - gcode += m_writer.lift(_lift); + gcode += m_writer.lift(!m_spiral_vase ? lift_type : LiftType::NormalLift); } return gcode; @@ -4340,6 +4522,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) dyn_config.set_key_value("second_flush_volume", new ConfigOptionFloat(wipe_length / 2.f)); dyn_config.set_key_value("old_filament_e_feedrate", new ConfigOptionInt(old_filament_e_feedrate)); dyn_config.set_key_value("new_filament_e_feedrate", new ConfigOptionInt(new_filament_e_feedrate)); + dyn_config.set_key_value("travel_point_1_x", new ConfigOptionFloat(float(travel_point_1.x()))); + dyn_config.set_key_value("travel_point_1_y", new ConfigOptionFloat(float(travel_point_1.y()))); + dyn_config.set_key_value("travel_point_2_x", new ConfigOptionFloat(float(travel_point_2.x()))); + dyn_config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y()))); + dyn_config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x()))); + dyn_config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y()))); int flush_count = std::min(g_max_flush_count, (int)std::round(wipe_volume / g_purge_volume_one_time)); float flush_unit = wipe_length / flush_count; diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index fca73b1782..080a20ebd3 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -197,8 +197,8 @@ public: void apply_print_config(const PrintConfig &print_config); std::string travel_to(const Point& point, ExtrusionRole role, std::string comment); - bool needs_retraction(const Polyline& travel, ExtrusionRole role = erNone); - std::string retract(bool toolchange = false, bool is_last_retraction = false); + bool needs_retraction(const Polyline& travel, ExtrusionRole role, LiftType& lift_type); + std::string retract(bool toolchange = false, bool is_last_retraction = false, LiftType lift_type = LiftType::SpiralLift); std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } std::string set_extruder(unsigned int extruder_id, double print_z); @@ -209,10 +209,9 @@ public: // public, so that it could be accessed by free helper functions from GCode.cpp struct LayerToPrint { - LayerToPrint() : object_layer(nullptr), support_layer(nullptr), tree_support_layer(nullptr), original_object(nullptr) {} + LayerToPrint() : object_layer(nullptr), support_layer(nullptr), original_object(nullptr) {} const Layer* object_layer; const SupportLayer* support_layer; - const TreeSupportLayer* tree_support_layer; const PrintObject* original_object; //BBS: used for shared object logic const Layer* layer() const { @@ -222,9 +221,6 @@ public: if (support_layer != nullptr) return support_layer; - if (tree_support_layer != nullptr) - return tree_support_layer; - return nullptr; } @@ -246,10 +242,6 @@ public: count++; } - if (tree_support_layer != nullptr) { - sum_z += tree_support_layer->print_z; - count++; - } return sum_z / count; } }; @@ -409,6 +401,10 @@ private: std::string extrude_perimeters(const Print& print, const std::vector& by_region); std::string extrude_infill(const Print& print, const std::vector& by_region, bool ironing); std::string extrude_support(const ExtrusionEntityCollection& support_fills); + + // BBS + LiftType to_lift_type(ZHopType z_hop_types); + std::set m_objsWithBrim; // indicates the objs with brim std::set m_objSupportsWithBrim; // indicates the objs' supports with brim // Cache for custom seam enforcers/blockers for each layer. @@ -491,6 +487,7 @@ private: GCodeProcessor m_processor; // BBS + Print* m_curr_print = nullptr; unsigned int m_toolchange_count; coordf_t m_nominal_z; bool m_need_change_layer_lift_z = false; diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index ebba1dda27..aca9fdf6ea 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -1135,8 +1135,7 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point & const ExPolygons &lslices = gcodegen.layer()->lslices; const std::vector &lslices_bboxes = gcodegen.layer()->lslices_bboxes; - bool is_support_layer = (dynamic_cast(gcodegen.layer()) != nullptr) || - (dynamic_cast(gcodegen.layer()) != nullptr); + bool is_support_layer = (dynamic_cast(gcodegen.layer()) != nullptr); if (!use_external && (is_support_layer || (!lslices.empty() && !any_expolygon_contains(lslices, lslices_bboxes, m_grid_lslice, travel)))) { // Initialize m_internal only when it is necessary. if (m_internal.boundaries.empty()) diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index fc67b6bd8a..e9bb580c82 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -244,22 +244,22 @@ float new_feedrate_to_reach_time_stretch( { float new_feedrate = min_feedrate; for (size_t iter = 0; iter < max_iter; ++ iter) { - float nomin = 0; - float denom = time_stretch; + double nomin = 0; + double denom = time_stretch; for (auto it = it_begin; it != it_end; ++ it) { assert((*it)->slow_down_min_speed < min_feedrate + EPSILON); for (size_t i = 0; i < (*it)->n_lines_adjustable; ++i) { const CoolingLine &line = (*it)->lines[i]; if (line.feedrate > min_feedrate) { - nomin += line.time * line.feedrate; - denom += line.time; + nomin += (double)line.time * (double)line.feedrate; + denom += (double)line.time; } } } assert(denom > 0); if (denom < 0) return min_feedrate; - new_feedrate = nomin / denom; + new_feedrate = (float)(nomin / denom); assert(new_feedrate > min_feedrate - EPSILON); if (new_feedrate < min_feedrate + EPSILON) goto finished; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 644d7aee71..b25ac9af1e 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -55,7 +55,8 @@ const std::vector GCodeProcessor::Reserved_Tags = { " CUSTOM_GCODE", "_GP_FIRST_LINE_M73_PLACEHOLDER", "_GP_LAST_LINE_M73_PLACEHOLDER", - "_GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER" + "_GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER", + "_GP_TOTAL_LAYER_NUMBER_PLACEHOLDER" }; const std::vector GCodeProcessor::Reserved_Tags_compatible = { @@ -227,6 +228,7 @@ void GCodeProcessor::TimeMachine::reset() std::fill(moves_time.begin(), moves_time.end(), 0.0f); std::fill(roles_time.begin(), roles_time.end(), 0.0f); layers_time = std::vector(); + prepare_time = 0.0f; } void GCodeProcessor::TimeMachine::simulate_st_synchronize(float additional_time) @@ -334,7 +336,9 @@ void GCodeProcessor::TimeMachine::calculate_time(size_t keep_last_n_blocks, floa time += block_time; gcode_time.cache += block_time; - moves_time[static_cast(block.move_type)] += block_time; + //BBS: don't calculate travel of start gcode into travel time + if (!block.flags.prepare_stage || block.move_type != EMoveType::Travel) + moves_time[static_cast(block.move_type)] += block_time; roles_time[static_cast(block.role)] += block_time; if (block.layer_id >= layers_time.size()) { const size_t curr_size = layers_time.size(); @@ -344,6 +348,9 @@ void GCodeProcessor::TimeMachine::calculate_time(size_t keep_last_n_blocks, floa } } layers_time[block.layer_id - 1] += block_time; + //BBS + if (block.flags.prepare_stage) + prepare_time += block_time; g1_times_cache.push_back({ block.g1_line_id, time }); // update times for remaining time to printer stop placeholders auto it_stop_time = std::lower_bound(stop_times.begin(), stop_times.end(), block.g1_line_id, @@ -371,7 +378,7 @@ void GCodeProcessor::TimeProcessor::reset() machines[static_cast(PrintEstimatedStatistics::ETimeMode::Normal)].enabled = true; } -void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, std::vector& moves, std::vector& lines_ends) +void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, std::vector& moves, std::vector& lines_ends, size_t total_layer_num) { FilePtr in{ boost::nowide::fopen(filename.c_str(), "rb") }; if (in.f == nullptr) @@ -480,14 +487,20 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st //sprintf(buf, "; estimated printing time (%s mode) = %s\n", // (mode == PrintEstimatedStatistics::ETimeMode::Normal) ? "normal" : "silent", // get_time_dhms(machine.time).c_str()); - sprintf(buf, "; model printing time: %s; total estimated time: %s\n", - get_time_dhms(machine.time - machine.roles_time[ExtrusionRole::erCustom]).c_str(), - get_time_dhms(machine.time).c_str()); + sprintf(buf, "; model printing time: %s; total estimated time: %s\n", + get_time_dhms(machine.time - machine.prepare_time).c_str(), + get_time_dhms(machine.time).c_str()); } ret += buf; } } } + //BBS: write total layer number + else if (line == reserved_tag(ETags::Total_Layer_Number_Placeholder)) { + char buf[128]; + sprintf(buf, "; total layer number: %zd\n", total_layer_num); + ret += buf; + } } if (! ret.empty()) @@ -783,6 +796,7 @@ void GCodeProcessorResult::reset() { filament_diameters = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DIAMETER); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); custom_gcode_per_print_z = std::vector(); + spiral_vase_layers = std::vector>>(); time = 0; //BBS: add mutex for protection of gcode result @@ -808,6 +822,7 @@ void GCodeProcessorResult::reset() { required_nozzle_HRC = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_HRC); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); custom_gcode_per_print_z = std::vector(); + spiral_vase_layers = std::vector>>(); warnings.clear(); //BBS: add mutex for protection of gcode result @@ -962,6 +977,10 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_first_layer_height = std::abs(initial_layer_print_height->value); m_result.printable_height = config.printable_height; + + const ConfigOptionBool* spiral_vase = config.option("spiral_mode"); + if (spiral_vase != nullptr) + m_spiral_vase_active = spiral_vase->value; } void GCodeProcessor::apply_config(const DynamicPrintConfig& config) @@ -1224,6 +1243,10 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) const ConfigOptionFloat* printable_height = config.option("printable_height"); if (printable_height != nullptr) m_result.printable_height = printable_height->value; + + const ConfigOptionBool* spiral_vase = config.option("spiral_mode"); + if (spiral_vase != nullptr) + m_spiral_vase_active = spiral_vase->value; } void GCodeProcessor::enable_stealth_time_estimator(bool enabled) @@ -1294,6 +1317,8 @@ void GCodeProcessor::reset() m_options_z_corrector.reset(); + m_spiral_vase_active = false; + #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_mm3_per_mm_compare.reset(); m_height_compare.reset(); @@ -1449,7 +1474,7 @@ void GCodeProcessor::finalize(bool post_process) #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING if (post_process) - m_time_processor.post_process(m_result.filename, m_result.moves, m_result.lines_ends); + m_time_processor.post_process(m_result.filename, m_result.moves, m_result.lines_ends, m_layer_id); #if ENABLE_GCODE_VIEWER_STATISTICS m_result.time = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - m_start_time).count(); #endif // ENABLE_GCODE_VIEWER_STATISTICS @@ -1462,6 +1487,11 @@ float GCodeProcessor::get_time(PrintEstimatedStatistics::ETimeMode mode) const return (mode < PrintEstimatedStatistics::ETimeMode::Count) ? m_time_processor.machines[static_cast(mode)].time : 0.0f; } +float GCodeProcessor::get_prepare_time(PrintEstimatedStatistics::ETimeMode mode) const +{ + return (mode < PrintEstimatedStatistics::ETimeMode::Count) ? m_time_processor.machines[static_cast(mode)].prepare_time : 0.0f; +} + std::string GCodeProcessor::get_time_dhm(PrintEstimatedStatistics::ETimeMode mode) const { return (mode < PrintEstimatedStatistics::ETimeMode::Count) ? short_time(get_time_dhms(m_time_processor.machines[static_cast(mode)].time)) : std::string("N/A"); @@ -2044,6 +2074,18 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers // layer change tag if (comment == reserved_tag(ETags::Layer_Change)) { ++m_layer_id; + if (m_spiral_vase_active) { + if (m_result.moves.empty() || m_result.spiral_vase_layers.empty()) + // add a placeholder for layer height. the actual value will be set inside process_G1() method + m_result.spiral_vase_layers.push_back({ FLT_MAX, { 0, 0 } }); + else { + const size_t move_id = m_result.moves.size() - 1; + if (!m_result.spiral_vase_layers.empty()) + m_result.spiral_vase_layers.back().second.second = move_id; + // add a placeholder for layer height. the actual value will be set inside process_G1() method + m_result.spiral_vase_layers.push_back({ FLT_MAX, { move_id, move_id } }); + } + } return; } @@ -2703,10 +2745,12 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) TimeBlock block; block.move_type = type; - block.role = m_extrusion_role; + //BBS: don't calculate travel time into extrusion path, except travel inside start and end gcode. + block.role = (type != EMoveType::Travel || m_extrusion_role == erCustom) ? m_extrusion_role : erNone; block.distance = distance; block.g1_line_id = m_g1_line_id; block.layer_id = std::max(1, m_layer_id); + block.flags.prepare_stage = m_processing_start_custom_gcode; //BBS: limite the cruise according to centripetal acceleration //Only need to handle when both prev and curr segment has movement in x-y plane @@ -2924,6 +2968,14 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) m_seams_detector.set_first_vertex(m_result.moves.back().position - m_extruder_offsets[m_extruder_id] - plate_offset); } + if (m_spiral_vase_active && !m_result.spiral_vase_layers.empty()) { + if (m_result.spiral_vase_layers.back().first == FLT_MAX && delta_pos[Z] > 0.0) + // replace layer height placeholder with correct value + m_result.spiral_vase_layers.back().first = static_cast(m_end_position[Z]); + if (!m_result.moves.empty()) + m_result.spiral_vase_layers.back().second.second = m_result.moves.size() - 1; + } + // store move store_move_vertex(type); } @@ -3125,10 +3177,12 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) TimeBlock block; block.move_type = type; - block.role = m_extrusion_role; + //BBS: don't calculate travel time into extrusion path, except travel inside start and end gcode. + block.role = (type != EMoveType::Travel || m_extrusion_role == erCustom) ? m_extrusion_role : erNone; block.distance = delta_xyz; block.g1_line_id = m_g1_line_id; block.layer_id = std::max(1, m_layer_id); + block.flags.prepare_stage = m_processing_start_custom_gcode; // BBS: calculates block cruise feedrate // For arc move, we need to limite the cruise according to centripetal acceleration which is @@ -4103,6 +4157,7 @@ void GCodeProcessor::update_estimated_times_stats() auto update_mode = [this](PrintEstimatedStatistics::ETimeMode mode) { PrintEstimatedStatistics::Mode& data = m_result.print_statistics.modes[static_cast(mode)]; data.time = get_time(mode); + data.prepare_time = get_prepare_time(mode); data.custom_gcode_times = get_custom_gcode_times(mode, true); data.moves_times = get_moves_time(mode); data.roles_times = get_roles_time(mode); @@ -4176,4 +4231,3 @@ void GCodeProcessor::update_slice_warnings() } } /* namespace Slic3r */ - diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 8d5aa3df83..a064fe85c7 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -49,6 +49,7 @@ namespace Slic3r { struct Mode { float time; + float prepare_time; std::vector>> custom_gcode_times; std::vector> moves_times; std::vector> roles_times; @@ -56,6 +57,7 @@ namespace Slic3r { void reset() { time = 0.0f; + prepare_time = 0.0f; custom_gcode_times.clear(); moves_times.clear(); roles_times.clear(); @@ -163,6 +165,7 @@ namespace Slic3r { std::vector filament_vitrification_temperature; PrintEstimatedStatistics print_statistics; std::vector custom_gcode_per_print_z; + std::vector>> spiral_vase_layers; //BBS std::vector warnings; int nozzle_hrc; @@ -191,6 +194,7 @@ namespace Slic3r { filament_densities = other.filament_densities; print_statistics = other.print_statistics; custom_gcode_per_print_z = other.custom_gcode_per_print_z; + spiral_vase_layers = other.spiral_vase_layers; warnings = other.warnings; #if ENABLE_GCODE_VIEWER_STATISTICS time = other.time; @@ -223,7 +227,8 @@ namespace Slic3r { Custom_Code, First_Line_M73_Placeholder, Last_Line_M73_Placeholder, - Estimated_Printing_Time_Placeholder + Estimated_Printing_Time_Placeholder, + Total_Layer_Number_Placeholder }; static const std::string& reserved_tag(ETags tag) { return s_IsBBLPrinter ? Reserved_Tags[static_cast(tag)] : Reserved_Tags_compatible[static_cast(tag)]; } @@ -301,6 +306,7 @@ namespace Slic3r { { bool recalculate{ false }; bool nominal_length{ false }; + bool prepare_stage{ false }; }; EMoveType move_type{ EMoveType::Noop }; @@ -384,6 +390,8 @@ namespace Slic3r { std::array(EMoveType::Count)> moves_time; std::array(ExtrusionRole::erCount)> roles_time; std::vector layers_time; + //BBS: prepare stage time before print model, including start gcode time and mostly same with start gcode time + float prepare_time; void reset(); @@ -420,7 +428,7 @@ namespace Slic3r { // post process the file with the given filename to add remaining time lines M73 // and updates moves' gcode ids accordingly - void post_process(const std::string& filename, std::vector& moves, std::vector& lines_ends); + void post_process(const std::string& filename, std::vector& moves, std::vector& lines_ends, size_t total_layer_num); }; struct UsedFilaments // filaments per ColorChange @@ -627,6 +635,7 @@ namespace Slic3r { SeamsDetector m_seams_detector; OptionsZCorrector m_options_z_corrector; size_t m_last_default_color_id; + bool m_spiral_vase_active; #if ENABLE_GCODE_VIEWER_STATISTICS std::chrono::time_point m_start_time; #endif // ENABLE_GCODE_VIEWER_STATISTICS @@ -684,6 +693,7 @@ namespace Slic3r { void finalize(bool post_process); float get_time(PrintEstimatedStatistics::ETimeMode mode) const; + float get_prepare_time(PrintEstimatedStatistics::ETimeMode mode) const; std::string get_time_dhm(PrintEstimatedStatistics::ETimeMode mode) const; std::vector>> get_custom_gcode_times(PrintEstimatedStatistics::ETimeMode mode, bool include_remaining) const; diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index 4264ca0249..4b89930635 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -467,6 +467,8 @@ void process_perimeter_polygon( if (orig_point) { Vec3f pos_of_next = orig_polygon_points.empty() ? first : orig_polygon_points.front(); float distance_to_next = (position - pos_of_next).norm(); + if (distance_to_next > perimeter.flow_width * perimeter.flow_width * 4) + oversampled_points.push((position + pos_of_next) / 2); if (global_model_info.is_enforced(position, distance_to_next)) { Vec3f vec_to_next = (pos_of_next - position).normalized(); float step_size = SeamPlacer::enforcer_oversampling_distance; diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 5a2c49a96f..039f95ebd4 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -175,10 +175,6 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool for (auto layer : object->support_layers()) zs.emplace_back(layer->print_z); - // BBS - for (auto layer : object->tree_support_layers()) - zs.emplace_back(layer->print_z); - // Find first object layer that is not empty and save its print_z for (const Layer* layer : object->layers()) if (layer->has_extrusions()) { @@ -199,10 +195,11 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool // BBS if (auto num_filaments = unsigned(print.config().filament_diameter.size()); num_filaments > 1 && print.object_extruders().size() == 1 && // the current Print's configuration is CustomGCode::MultiAsSingle - print.model().custom_gcode_per_print_z.mode == CustomGCode::MultiAsSingle) { + //BBS: replace model custom gcode with current plate custom gcode + print.model().get_curr_plate_custom_gcodes().mode == CustomGCode::MultiAsSingle) { // Printing a single extruder platter on a printer with more than 1 extruder (or single-extruder multi-material). // There may be custom per-layer tool changes available at the model. - per_layer_extruder_switches = custom_tool_changes(print.model().custom_gcode_per_print_z, num_filaments); + per_layer_extruder_switches = custom_tool_changes(print.model().get_curr_plate_custom_gcodes(), num_filaments); } // Collect extruders reuqired to print the layers. @@ -348,24 +345,6 @@ void ToolOrdering::collect_extruders(const PrintObject &object, const std::vecto } } - // BBS - for (auto tree_support_layer : object.tree_support_layers()) { - LayerTools &layer_tools = this->tools_for_layer(tree_support_layer->print_z); - ExtrusionRole role = tree_support_layer->support_fills.role(); - bool has_support = role == erMixed || role == erSupportMaterial || role == erSupportTransition;; - bool has_interface = role == erMixed || role == erSupportMaterialInterface; - unsigned int extruder_support = object.config().support_filament.value; - unsigned int extruder_interface = object.config().support_interface_filament.value; - if (has_support) - layer_tools.extruders.push_back(extruder_support); - if (has_interface) - layer_tools.extruders.push_back(extruder_interface); - if (has_support || has_interface) { - layer_tools.has_support = true; - layer_tools.wiping_extrusions().is_support_overriddable_and_mark(role, object); - } - } - // Extruder overrides are ordered by print_z. std::vector>::const_iterator it_per_layer_extruder_override; it_per_layer_extruder_override = per_layer_extruder_switches.begin(); @@ -781,12 +760,15 @@ void ToolOrdering::mark_skirt_layers(const PrintConfig &config, coordf_t max_lay // Assign a pointer to a custom G-code to the respective ToolOrdering::LayerTools. // Ignore color changes, which are performed on a layer and for such an extruder, that the extruder will not be printing above that layer. // If multiple events are planned over a span of a single layer, use the last one. + +// BBS: replace model custom gcode with current plate custom gcode +static CustomGCode::Info custom_gcode_per_print_z; void ToolOrdering::assign_custom_gcodes(const Print &print) { // Only valid for non-sequential print. assert(print.config().print_sequence == PrintSequence::ByLayer); - const CustomGCode::Info &custom_gcode_per_print_z = print.model().custom_gcode_per_print_z; + custom_gcode_per_print_z = print.model().get_curr_plate_custom_gcodes(); if (custom_gcode_per_print_z.gcodes.empty()) return; @@ -795,7 +777,7 @@ void ToolOrdering::assign_custom_gcodes(const Print &print) CustomGCode::Mode mode = (num_filaments == 1) ? CustomGCode::SingleExtruder : print.object_extruders().size() == 1 ? CustomGCode::MultiAsSingle : CustomGCode::MultiExtruder; - CustomGCode::Mode model_mode = print.model().custom_gcode_per_print_z.mode; + CustomGCode::Mode model_mode = print.model().get_curr_plate_custom_gcodes().mode; std::vector extruder_printing_above(num_filaments, false); auto custom_gcode_it = custom_gcode_per_print_z.gcodes.rbegin(); // Tool changes and color changes will be ignored, if the model's tool/color changes were entered in mm mode and the print is in non mm mode @@ -890,7 +872,7 @@ int WipingExtrusions::first_nonsoluble_extruder_on_layer(const PrintConfig& prin { const LayerTools& lt = *m_layer_tools; for (auto extruders_it = lt.extruders.begin(); extruders_it != lt.extruders.end(); ++extruders_it) - if (!print_config.filament_soluble.get_at(*extruders_it)) + if (!print_config.filament_soluble.get_at(*extruders_it) && !print_config.filament_is_support.get_at(*extruders_it)) return (*extruders_it); return (-1); @@ -901,7 +883,7 @@ int WipingExtrusions::last_nonsoluble_extruder_on_layer(const PrintConfig& print { const LayerTools& lt = *m_layer_tools; for (auto extruders_it = lt.extruders.rbegin(); extruders_it != lt.extruders.rend(); ++extruders_it) - if (!print_config.filament_soluble.get_at(*extruders_it)) + if (!print_config.filament_soluble.get_at(*extruders_it) && !print_config.filament_is_support.get_at(*extruders_it)) return (*extruders_it); return (-1); @@ -1042,10 +1024,9 @@ float WipingExtrusions::mark_wiping_extrusions(const Print& print, unsigned int if (object->config().flush_into_support) { auto& object_config = object->config(); const SupportLayer* this_support_layer = object->get_support_layer_at_printz(lt.print_z, EPSILON); - const TreeSupportLayer* this_tree_support_layer = object->get_tree_support_layer_at_printz(lt.print_z, EPSILON); do { - if (this_support_layer == nullptr && this_tree_support_layer == nullptr) + if (this_support_layer == nullptr) break; bool support_overriddable = object_config.support_filament == 0; @@ -1053,7 +1034,7 @@ float WipingExtrusions::mark_wiping_extrusions(const Print& print, unsigned int if (!support_overriddable && !support_intf_overriddable) break; - auto& entities = this_support_layer != nullptr ? this_support_layer->support_fills.entities : this_tree_support_layer->support_fills.entities; + auto &entities = this_support_layer->support_fills.entities; if (support_overriddable && !is_support_overridden(object)) { set_support_extruder_override(object, copy, new_extruder, num_of_copies); for (const ExtrusionEntity* ee : entities) { diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index a82c2a47d8..7cafec1b14 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -398,14 +398,26 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co slop_move = w0.string(); } } + + std::string xy_z_move; + { + GCodeG1Formatter w0; + if (this->is_current_position_clear()) { + w0.emit_xyz(target); + w0.emit_f(this->config.travel_speed.value * 60.0); + w0.emit_comment(GCodeWriter::full_gcode_comment, comment); + xy_z_move = w0.string(); + } + else { + w0.emit_xy(Vec2d(target.x(), target.y())); + w0.emit_f(this->config.travel_speed.value * 60.0); + w0.emit_comment(GCodeWriter::full_gcode_comment, comment); + xy_z_move = w0.string() + _travel_to_z(target.z(), comment); + } + } m_pos = dest_point; this->set_current_position_clear(true); - GCodeG1Formatter w1; - w1.emit_xyz(target); - w1.emit_f(this->config.travel_speed.value * 60.0); - //BBS - w1.emit_comment(GCodeWriter::full_gcode_comment, comment); - return slop_move + w1.string(); + return slop_move + xy_z_move; } else if (!this->will_move_z(point(2))) { double nominal_z = m_pos(2) - m_lifted; diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index 9648223f2b..eb3d31e575 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -79,7 +79,7 @@ public: //BBS: set offset for gcode writer void set_xy_offset(double x, double y) { m_x_offset = x; m_y_offset = y; } - + Vec2f get_xy_offset() { return Vec2f{m_x_offset, m_y_offset}; }; // To be called by the CoolingBuffer from another thread. static std::string set_fan(const GCodeFlavor gcode_flavor, unsigned int speed); // To be called by the main thread. It always emits the G-code, it does not remember the previous state. @@ -93,7 +93,8 @@ public: bool is_current_position_clear() const { return m_is_current_pos_clear; }; //BBS: static const bool full_gcode_comment; - + //Radian threshold of slope for lazy lift and spiral lift; + static const double slope_threshold; //SoftFever void set_is_bbl_machine(bool bval) {m_is_bbl_printers = bval;} const bool is_bbl_printers() const {return m_is_bbl_printers;} @@ -134,9 +135,6 @@ private: double m_x_offset{ 0 }; double m_y_offset{ 0 }; - //Radian threshold of slope for lazy lift and spiral lift; - static const double slope_threshold; - //SoftFever bool m_is_bbl_printers = false; double m_current_speed; diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 9172ea2406..5191c22939 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -352,6 +352,50 @@ void Layer::export_region_fill_surfaces_to_svg_debug(const char *name) const this->export_region_fill_surfaces_to_svg(debug_out_path("Layer-fill_surfaces-%s-%d.svg", name, idx ++).c_str()); } +coordf_t Layer::get_sparse_infill_max_void_area() +{ + double max_void_area = 0.; + for (auto layerm : m_regions) { + Flow flow = layerm->flow(frInfill); + float density = layerm->region().config().sparse_infill_density; + InfillPattern pattern = layerm->region().config().sparse_infill_pattern; + if (density == 0.) + return -1; + + //BBS: rough estimation and need to be optimized + double spacing = flow.scaled_spacing() * (100 - density) / density; + switch (pattern) { + case ipConcentric: + case ipRectilinear: + case ipLine: + case ipGyroid: + case ipAlignedRectilinear: + case ipOctagramSpiral: + case ipHilbertCurve: + case ip3DHoneycomb: + case ipArchimedeanChords: + max_void_area = std::max(max_void_area, spacing * spacing); + break; + case ipGrid: + case ipHoneycomb: + case ipLightning: + max_void_area = std::max(max_void_area, 4.0 * spacing * spacing); + break; + case ipCubic: + case ipAdaptiveCubic: + case ipTriangles: + case ipStars: + case ipSupportCubic: + max_void_area = std::max(max_void_area, 4.5 * spacing * spacing); + break; + default: + max_void_area = std::max(max_void_area, spacing * spacing); + break; + } + }; + return max_void_area; +} + BoundingBox get_extents(const LayerRegion &layer_region) { BoundingBox bbox; diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 67a200f738..68bdfc8692 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -143,6 +143,9 @@ public: ExPolygons lslices; std::vector lslices_bboxes; + // BBS + ExPolygons loverhangs; + size_t region_count() const { return m_regions.size(); } const LayerRegion* get_region(int idx) const { return m_regions[idx]; } LayerRegion* get_region(int idx) { return m_regions[idx]; } @@ -184,6 +187,8 @@ public: //BBS void simplify_extrusion_path() { for (auto layerm : m_regions) layerm->simplify_extrusion_entity();} + //BBS: this function calculate the maximum void grid area of sparse infill of this layer. Just estimated value + coordf_t get_sparse_infill_max_void_area(); protected: friend class PrintObject; @@ -209,6 +214,11 @@ private: LayerRegionPtrs m_regions; }; +enum SupportInnerType { + stInnerNormal, + stInnerTree +}; + class SupportLayer : public Layer { public: @@ -217,6 +227,10 @@ public: ExPolygonCollection support_islands; // Extrusion paths for the support base and for the support interface and contacts. ExtrusionEntityCollection support_fills; + SupportInnerType support_type = stInnerNormal; + + // for tree supports + ExPolygons base_areas; // Is there any valid extrusion assigned to this LayerRegion? @@ -229,33 +243,23 @@ public: protected: friend class PrintObject; + friend class TreeSupport; // The constructor has been made public to be able to insert additional support layers for the skirt or a wipe tower // between the raft and the object first layer. SupportLayer(size_t id, size_t interface_id, PrintObject *object, coordf_t height, coordf_t print_z, coordf_t slice_z) : - Layer(id, object, height, print_z, slice_z), m_interface_id(interface_id) {} + Layer(id, object, height, print_z, slice_z), m_interface_id(interface_id), support_type(stInnerNormal) {} virtual ~SupportLayer() = default; size_t m_interface_id; -}; -class TreeSupportLayer : public Layer -{ -public: - ExtrusionEntityCollection support_fills; - ExPolygons overhang_areas; - ExPolygons roof_areas; - ExPolygons roof_1st_layer; // the layer just below roof. When working with PolySupport, this layer should be printed with regular material - ExPolygons floor_areas; - ExPolygons base_areas; - ExPolygons roof_gap_areas; // the areas in the gap between support roof and overhang - - enum AreaType { - BaseType=0, - RoofType=1, - FloorType=2, - Roof1stLayer=3 - }; + // for tree support + ExPolygons overhang_areas; + ExPolygons roof_areas; + ExPolygons roof_1st_layer; // the layer just below roof. When working with PolySupport, this layer should be printed with regular material + ExPolygons floor_areas; + ExPolygons roof_gap_areas; // the areas in the gap between support roof and overhang + enum AreaType { BaseType = 0, RoofType = 1, FloorType = 2, Roof1stLayer = 3 }; struct AreaGroup { ExPolygon *area; @@ -263,23 +267,9 @@ public: coordf_t dist_to_top; // mm dist to top AreaGroup(ExPolygon *a, int t, coordf_t d) : area(a), type(t), dist_to_top(d) {} }; - std::vector area_groups; - - enum OverhangType { - Detected=0, - Enforced - }; + enum OverhangType { Detected = 0, Enforced }; + std::vector area_groups; std::map overhang_types; - - virtual bool has_extrusions() const { return !support_fills.empty(); } - - void simplify_support_extrusion_path() { this->simplify_support_entity_collection(&support_fills);} - -protected: - friend class PrintObject; - TreeSupportLayer(size_t id, PrintObject* object, coordf_t height, coordf_t print_z, coordf_t slice_z) : - Layer(id, object, height, print_z, slice_z) {} - virtual ~TreeSupportLayer() = default; }; template diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index e33a33dd2b..55c87d05bc 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -158,11 +158,20 @@ void LayerRegion::process_external_surfaces(const Layer *lower_layer, const Poly { // Voids are sparse infills if infill rate is zero. Polygons voids; + + double max_grid_area = -1; + if (this->layer()->lower_layer != nullptr) + max_grid_area = this->layer()->lower_layer->get_sparse_infill_max_void_area(); for (const Surface &surface : this->fill_surfaces.surfaces) { if (surface.is_top()) { // Collect the top surfaces, inflate them and trim them by the bottom surfaces. // This gives the priority to bottom surfaces. - surfaces_append(top, offset_ex(surface.expolygon, margin, EXTERNAL_SURFACES_OFFSET_PARAMETERS), surface); + if (max_grid_area < 0 || surface.expolygon.area() < max_grid_area) + surfaces_append(top, offset_ex(surface.expolygon, margin, EXTERNAL_SURFACES_OFFSET_PARAMETERS), surface); + else + //BBS: Don't need to expand too much in this situation. Expand 3mm to eliminate hole and 1mm for contour + surfaces_append(top, intersection_ex(offset(surface.expolygon.contour, margin / 3.0, EXTERNAL_SURFACES_OFFSET_PARAMETERS), + offset_ex(surface.expolygon, margin, EXTERNAL_SURFACES_OFFSET_PARAMETERS)), surface); } else if (surface.surface_type == stBottom || (surface.surface_type == stBottomBridge && lower_layer == nullptr)) { // Grown by 3mm. surfaces_append(bottom, offset_ex(surface.expolygon, margin, EXTERNAL_SURFACES_OFFSET_PARAMETERS), surface); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 1c06f9180a..15e30a3482 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -63,7 +63,9 @@ Model& Model::assign_copy(const Model &rhs) } // copy custom code per height - this->custom_gcode_per_print_z = rhs.custom_gcode_per_print_z; + // BBS + this->plates_custom_gcodes = rhs.plates_custom_gcodes; + this->curr_plate_index = rhs.curr_plate_index; // BBS: for design info this->design_info = rhs.design_info; @@ -89,7 +91,9 @@ Model& Model::assign_copy(Model &&rhs) rhs.objects.clear(); // copy custom code per height - this->custom_gcode_per_print_z = std::move(rhs.custom_gcode_per_print_z); + // BBS + this->plates_custom_gcodes = std::move(rhs.plates_custom_gcodes); + this->curr_plate_index = rhs.curr_plate_index; //BBS: add auxiliary path logic // BBS: backup, all in one temp dir @@ -161,10 +165,11 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c file_version = &temp_version; bool result = false; + bool is_cb_cancel = false; std::string message; if (boost::algorithm::iends_with(input_file, ".stp") || boost::algorithm::iends_with(input_file, ".step")) - result = load_step(input_file.c_str(), &model, stepFn, stepIsUtf8Fn); + result = load_step(input_file.c_str(), &model, is_cb_cancel, stepFn, stepIsUtf8Fn); else if (boost::algorithm::iends_with(input_file, ".stl")) result = load_stl(input_file.c_str(), &model, nullptr, stlFn); else if (boost::algorithm::iends_with(input_file, ".obj")) @@ -185,6 +190,11 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c else throw Slic3r::RuntimeError("Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension."); + if (is_cb_cancel) { + Model empty_model; + return empty_model; + } + if (!result) { if (message.empty()) throw Slic3r::RuntimeError("Loading of a model file failed."); @@ -203,7 +213,9 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c //BBS //CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, config); - CustomGCode::check_mode_for_custom_gcode_per_print_z(model.custom_gcode_per_print_z); + //BBS + for (auto& plate_gcodes : model.plates_custom_gcodes) + CustomGCode::check_mode_for_custom_gcode_per_print_z(plate_gcodes.second); sort_remove_duplicates(config_substitutions->substitutions); return model; @@ -277,7 +289,9 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig throw Slic3r::RuntimeError("Canceled"); } - CustomGCode::check_mode_for_custom_gcode_per_print_z(model.custom_gcode_per_print_z); + //BBS + for (auto& plate_gcodes : model.plates_custom_gcodes) + CustomGCode::check_mode_for_custom_gcode_per_print_z(plate_gcodes.second); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("import 3mf IMPORT_STAGE_CHECK_MODE_GCODE\n"); if (proFn) { @@ -2352,6 +2366,12 @@ bool ModelVolume::is_splittable() const // BBS std::vector ModelVolume::get_extruders() const { + if (m_type == ModelVolumeType::INVALID + || m_type == ModelVolumeType::NEGATIVE_VOLUME + || m_type == ModelVolumeType::SUPPORT_BLOCKER + || m_type == ModelVolumeType::SUPPORT_ENFORCER) + return std::vector(); + if (mmu_segmentation_facets.timestamp() != mmuseg_ts) { std::vector its_per_type; mmuseg_extruders.clear(); @@ -2564,6 +2584,7 @@ size_t ModelVolume::split(unsigned int max_extruders) if (idx == 0) { this->set_mesh(std::move(mesh)); this->calculate_convex_hull(); + this->invalidate_convex_hull_2d(); // Assign a new unique ID, so that a new GLVolume will be generated. this->set_new_unique_id(); // reset the source to disable reload from disk diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index f8b88ae0b9..6b53a45af0 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -650,6 +650,38 @@ private: friend class ModelVolume; }; +struct RaycastResult +{ + Vec2d mouse_position = Vec2d::Zero(); + int mesh_id = -1; + Vec3f hit = Vec3f::Zero(); + Vec3f normal = Vec3f::Zero(); + + template void serialize(Archive &ar) { ar(mouse_position, mesh_id, hit, normal); } +}; + +struct TextInfo +{ + std::string m_font_name; + float m_font_size = 16.f; + int m_curr_font_idx = 0; + bool m_bold = true; + bool m_italic = false; + float m_thickness = 2.f; + float m_embeded_depth = 0.f; + float m_rotate_angle = 0; + float m_text_gap = 0.f; + bool m_is_surface_text = false; + bool m_keep_horizontal = false; + std::string m_text; + + RaycastResult m_rr; + + template void serialize(Archive &ar) { + ar(m_font_name, m_font_size, m_curr_font_idx, m_bold, m_italic, m_thickness, m_embeded_depth, m_rotate_angle, m_text_gap, m_is_surface_text, m_keep_horizontal, m_text, m_rr); + } +}; + // An object STL, or a modifier volume, over which a different set of parameters shall be applied. // ModelVolume instances are owned by a ModelObject. class ModelVolume final : public ObjectBase @@ -756,6 +788,10 @@ public: const std::shared_ptr& get_convex_hull_shared_ptr() const { return m_convex_hull; } //BBS: add convex_hell_2d related logic const Polygon& get_convex_hull_2d(const Transform3d &trafo_instance) const; + void invalidate_convex_hull_2d() + { + m_convex_hull_2d.clear(); + } // Get count of errors in the mesh int get_repaired_errors_count() const; @@ -795,6 +831,9 @@ public: void convert_from_imperial_units(); void convert_from_meters(); + void set_text_info(const TextInfo& text_info) { m_text_info = text_info; } + const TextInfo& get_text_info() const { return m_text_info; } + const Transform3d& get_matrix(bool dont_translate = false, bool dont_rotate = false, bool dont_scale = false, bool dont_mirror = false) const { return m_transformation.get_matrix(dont_translate, dont_rotate, dont_scale, dont_mirror); } void set_new_unique_id() { @@ -839,6 +878,8 @@ private: mutable Polygon m_cached_2d_polygon; //BBS, used for convex_hell_2d acceleration Geometry::Transformation m_transformation; + TextInfo m_text_info; + //BBS: add convex_hell_2d related logic void calculate_convex_hull_2d(const Geometry::Transformation &transformation) const; @@ -892,7 +933,8 @@ private: ObjectBase(other), name(other.name), source(other.source), m_mesh(other.m_mesh), m_convex_hull(other.m_convex_hull), config(other.config), m_type(other.m_type), object(object), m_transformation(other.m_transformation), - supported_facets(other.supported_facets), seam_facets(other.seam_facets), mmu_segmentation_facets(other.mmu_segmentation_facets) + supported_facets(other.supported_facets), seam_facets(other.seam_facets), mmu_segmentation_facets(other.mmu_segmentation_facets), + m_text_info(other.m_text_info) { assert(this->id().valid()); assert(this->config.id().valid()); @@ -957,7 +999,7 @@ private: // BBS: add backup, check modify bool mesh_changed = false; auto tr = m_transformation; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info); mesh_changed |= !(tr == m_transformation); if (mesh_changed) m_transformation.get_matrix(true, true, true, true); // force dirty auto t = supported_facets.timestamp(); @@ -983,7 +1025,7 @@ private: } template void save(Archive &ar) const { bool has_convex_hull = m_convex_hull.get() != nullptr; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info); cereal::save_by_value(ar, supported_facets); cereal::save_by_value(ar, seam_facets); cereal::save_by_value(ar, mmu_segmentation_facets); @@ -1280,7 +1322,17 @@ public: } // Extensions for color print - CustomGCode::Info custom_gcode_per_print_z; + // CustomGCode::Info custom_gcode_per_print_z; + //BBS: replace model custom gcode with current plate custom gcode + int curr_plate_index{ 0 }; + std::map plates_custom_gcodes; //map + + const CustomGCode::Info get_curr_plate_custom_gcodes() const { + if (plates_custom_gcodes.find(curr_plate_index) != plates_custom_gcodes.end()) { + return plates_custom_gcodes.at(curr_plate_index); + } + return CustomGCode::Info(); + } // Default constructor assigns a new ID to the model. Model() { assert(this->id().valid()); } diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 29fae2ce3d..03f3268210 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -1136,21 +1136,8 @@ static std::vector> get_all_next_arcs( continue; Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; - if (arc_line.norm() < 5) { // two points whose distance is less than 5 are considered as one point - Linef process_line_1(graph.nodes[arc.from_idx].point, graph.nodes[arc.to_idx].point); - std::vector> next_arcs = get_all_next_arcs(graph, used_arcs, process_line_1, arc, color); - if (next_arcs.empty()) - continue; - - for (std::vector &next_arc : next_arcs) { - next_continue_arc.emplace_back(&arc); - next_continue_arc.insert(next_continue_arc.end(), next_arc.begin(), next_arc.end()); - all_next_arcs.emplace_back(next_continue_arc); - } - } else { - next_continue_arc.emplace_back(&arc); - all_next_arcs.emplace_back(next_continue_arc); - } + next_continue_arc.emplace_back(&arc); + all_next_arcs.emplace_back(next_continue_arc); } return all_next_arcs; } diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index dfd1482874..1b7cb7699d 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -965,26 +965,19 @@ void PerimeterGenerator::process_classic() if (is_outer_wall_first || //BBS: always print outer wall first when there indeed has brim. (this->layer_id == 0 && - this->object_config->brim_type == BrimType::btOuterOnly && - this->object_config->brim_width.value > 0)) - { - if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) { - if (entities.entities.size() > 1) { - std::vector extPs; - for (int i = 0; i < entities.entities.size(); ++i) { - if (entities.entities[i]->role() == erExternalPerimeter) - extPs.push_back(i); + this->object_config->brim_type == BrimType::btOuterOnly && + this->object_config->brim_width.value > 0)) + entities.reverse(); + else if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) + if (entities.entities.size() > 1){ + int last_outer=0; + int outer = 0; + for (; outer < entities.entities.size(); ++outer) + if (entities.entities[outer]->role() == erExternalPerimeter && outer - last_outer > 1) { + std::swap(entities.entities[outer], entities.entities[outer - 1]); + last_outer = outer; } - for (int i = 0; i < extPs.size(); ++i) { - if (extPs[i] == 0 || (i > 0 && extPs[i] - 1 == extPs[i - 1])) - continue; - std::swap(entities.entities[extPs[i]], entities.entities[extPs[i] - 1]); - } - } } - else - entities.reverse(); - } // append perimeters for this slice as a collection if (! entities.empty()) this->loops->append(entities); @@ -1327,6 +1320,17 @@ void PerimeterGenerator::process_arachne() } } } + // BBS. adjust wall generate seq + if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) + if (ordered_extrusions.size() > 1) { + int last_outer = 0; + int outer = 0; + for (; outer < ordered_extrusions.size(); ++outer) + if (ordered_extrusions[outer].extrusion->inset_idx == 0 && outer - last_outer > 1) { + std::swap(ordered_extrusions[outer], ordered_extrusions[outer - 1]); + last_outer = outer; + } + } if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) { diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index bef791567e..b3f4cccb97 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -161,6 +161,21 @@ public: Point& operator-=(const Point& rhs) { this->x() -= rhs.x(); this->y() -= rhs.y(); return *this; } Point& operator*=(const double &rhs) { this->x() = coord_t(this->x() * rhs); this->y() = coord_t(this->y() * rhs); return *this; } Point operator*(const double &rhs) { return Point(this->x() * rhs, this->y() * rhs); } + bool both_comp(const Point &rhs, const std::string& op) { + if (op == ">") + return this->x() > rhs.x() && this->y() > rhs.y(); + else if (op == "<") + return this->x() < rhs.x() && this->y() < rhs.y(); + return false; + } + bool any_comp(const Point &rhs, const std::string &op) + { + if (op == ">") + return this->x() > rhs.x() || this->y() > rhs.y(); + else if (op == "<") + return this->x() < rhs.x() || this->y() < rhs.y(); + return false; + } void rotate(double angle) { this->rotate(std::cos(angle), std::sin(angle)); } void rotate(double cos_a, double sin_a) { diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1460e09a01..32e5a91a3a 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -771,7 +771,7 @@ static std::vector s_Preset_filament_options { "fan_max_speed", "enable_overhang_bridge_fan", "overhang_fan_speed", "overhang_fan_threshold", "close_fan_the_first_x_layers", "full_fan_speed_layer", "fan_cooling_layer_time", "slow_down_layer_time", "slow_down_min_speed", "filament_start_gcode", "filament_end_gcode", // Retract overrides - "filament_retraction_length", "filament_z_hop", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", "filament_retraction_minimum_travel", + "filament_retraction_length", "filament_z_hop", "filament_z_hop_types", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", "filament_retraction_minimum_travel", "filament_retract_when_changing_layer", "filament_wipe", "filament_retract_before_wipe", // Profile compatibility "filament_vendor", "compatible_prints", "compatible_prints_condition", "compatible_printers", "compatible_printers_condition", "inherits", @@ -799,7 +799,7 @@ static std::vector s_Preset_printer_options { "silent_mode", // BBS "scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "machine_pause_gcode", "template_custom_gcode", - "nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", + "nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", //SoftFever "host_type", "print_host", "printhost_apikey", "printhost_cafile","printhost_port","printhost_authorization_type", @@ -1128,7 +1128,7 @@ void PresetCollection::load_presets( std::sort(m_presets.begin() + m_num_default_presets, m_presets.end()); //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": loaded %1% presets from %2%, type %3%")%presets_loaded.size() %dir %Preset::get_type_string(m_type); - this->select_preset(first_visible_idx()); + //this->select_preset(first_visible_idx()); if (! errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); } @@ -1555,6 +1555,10 @@ bool PresetCollection::load_user_preset(std::string name, std::mapname == m_edited_preset.name && iter->is_dirty) { + // Keep modifies when update from remote + new_config.apply_only(m_edited_preset.config, m_edited_preset.config.diff(iter->config)); + } iter->config = new_config; iter->updated_time = cloud_update_time; iter->version = cloud_version.value(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index da0ca312ca..05a77e673b 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -241,44 +241,17 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, Forward //BBS: change system config to json std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule); - //BBS load preset from user's folder, load system default if - //BBS: change directories by design - std::string dir_user_presets; - if (!config.get("preset_folder").empty()) { - dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + config.get("preset_folder"); + // Load default user presets always + load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule); + // BBS load preset from user's folder, load system default if + // BBS: change directories by design + std::string dir_user_presets = config.get("preset_folder"); + if (!dir_user_presets.empty()) { + load_user_presets(dir_user_presets, substitution_rule); } - else { - dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + DEFAULT_USER_FOLDER_NAME; - } - fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); - if (!fs::exists(user_folder)) - fs::create_directory(user_folder); - fs::path folder(dir_user_presets); - if (!fs::exists(folder)) - fs::create_directory(folder); - - // BBS do not load sla_print - //BBS: change directoties by design - try { - this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error &err) { - errors_cummulative += err.what(); - } - try { - this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error &err) { - errors_cummulative += err.what(); - } - try { - this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error &err) { - errors_cummulative += err.what(); - } this->update_multi_material_filament_presets(); this->update_compatible(PresetSelectCompatibleType::Never); - if (! errors_cummulative.empty()) - throw Slic3r::RuntimeError(errors_cummulative); this->load_selections(config, preferred_selection); @@ -534,7 +507,44 @@ std::string PresetBundle::get_hotend_model_for_printer_model(std::string model_n return out; } -PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig &config, std::map>& my_presets, ForwardCompatibilitySubstitutionRule substitution_rule) +PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule substitution_rule) +{ + PresetsConfigSubstitutions substitutions; + std::string errors_cummulative; + + fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); + if (!fs::exists(user_folder)) fs::create_directory(user_folder); + + std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + user; + fs::path folder(user_folder / user); + if (!fs::exists(folder)) fs::create_directory(folder); + + // BBS do not load sla_print + // BBS: change directoties by design + try { + this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); + } catch (const std::runtime_error &err) { + errors_cummulative += err.what(); + } + try { + this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); + } catch (const std::runtime_error &err) { + errors_cummulative += err.what(); + } + try { + this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); + } catch (const std::runtime_error &err) { + errors_cummulative += err.what(); + } + if (!errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); + this->update_multi_material_filament_presets(); + this->update_compatible(PresetSelectCompatibleType::Never); + return PresetsConfigSubstitutions(); +} + +PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig & config, + std::map> &my_presets, + ForwardCompatibilitySubstitutionRule substitution_rule) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; @@ -545,6 +555,10 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig &config, st BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" print's selected_idx %1%, selected_name %2%") %prints.get_selected_idx() %prints.get_selected_preset_name(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" filament's selected_idx %1%, selected_name %2%") %filaments.get_selected_idx() %filaments.get_selected_preset_name(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" printers's selected_idx %1%, selected_name %2%") %printers.get_selected_idx() %printers.get_selected_preset_name(); + + // Sync removing + remove_users_preset(config, &my_presets); + std::map>::iterator it; for (it = my_presets.begin(); it != my_presets.end(); it++) { std::string name = it->first; @@ -830,13 +844,26 @@ bool PresetBundle::validate_printers(const std::string &name, DynamicPrintConfig #endif } -void PresetBundle::remove_users_preset(AppConfig& config) +void PresetBundle::remove_users_preset(AppConfig &config, std::map> *my_presets) { + auto check_removed = [my_presets, this](Preset &preset) -> bool { + if (my_presets == nullptr) return true; + if (my_presets->find(preset.name) != my_presets->end()) return false; + if (!preset.sync_info.empty()) return false; // syncing, not remove + if (preset.setting_id.empty()) return false; // no id, not remove + // Saved preset is removed by another session + if (preset.is_dirty) { + preset.setting_id.clear(); + return false; + } + preset.remove_files(); + return true; + }; std::string preset_folder_user_id = config.get("preset_folder"); std::string printer_selected_preset_name = printers.get_selected_preset().name; bool need_reset_printer_preset = false; for (auto it = printers.begin(); it != printers.end();) { - if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) { + if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":printers erase %1%, type %2%, user_id %3%") % it->name % Preset::get_type_string(it->type) % it->user_id; if (it->name == printer_selected_preset_name) need_reset_printer_preset = true; @@ -867,7 +894,7 @@ void PresetBundle::remove_users_preset(AppConfig& config) bool need_reset_print_preset = false; // remove preset if user_id is not current user for (auto it = prints.begin(); it != prints.end();) { - if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) { + if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":prints erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_print_name) need_reset_print_preset = true; @@ -887,7 +914,7 @@ void PresetBundle::remove_users_preset(AppConfig& config) std::string selected_filament_name = filaments.get_selected_preset().name; bool need_reset_filament_preset = false; for (auto it = filaments.begin(); it != filaments.end();) { - if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0) { + if (it->is_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":filaments erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_filament_name) need_reset_filament_preset = true; @@ -905,6 +932,8 @@ void PresetBundle::remove_users_preset(AppConfig& config) filaments.select_preset_by_name(selected_filament_name, false); } + update_compatible(PresetSelectCompatibleType::Always); + /* set selected preset */ for (size_t i = 0; i < filament_presets.size(); ++i) { @@ -1268,7 +1297,7 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p this->filament_presets = { filaments.get_selected_preset_name() }; for (unsigned int i = 1; i < 1000; ++ i) { char name[64]; - sprintf(name, "filament_%u", i); + sprintf(name, "filament_%02u", i); if (! config.has("presets", name)) break; this->filament_presets.emplace_back(remove_ini_suffix(config.get("presets", name))); @@ -1276,8 +1305,9 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p std::vector filament_colors; if (config.has("presets", "filament_colors")) { boost::algorithm::split(filament_colors, config.get("presets", "filament_colors"), boost::algorithm::is_any_of(",")); - project_config.option("filament_colour")->values = filament_colors; } + filament_colors.resize(filament_presets.size()); + project_config.option("filament_colour")->values = filament_colors; std::vector matrix; if (config.has("presets", "flush_volumes_matrix")) { boost::algorithm::split(matrix, config.get("presets", "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); @@ -1340,13 +1370,14 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p void PresetBundle::export_selections(AppConfig &config) { assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() >= 1); -// assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front()); + //assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front()); config.clear_section("presets"); config.set("presets", PRESET_PRINT_NAME, prints.get_selected_preset_name()); config.set("presets", PRESET_FILAMENT_NAME, filament_presets.front()); for (unsigned i = 1; i < filament_presets.size(); ++i) { char name[64]; - sprintf(name, "filament_%u", i); + assert(!filament_presets[i].empty()); + sprintf(name, "filament_%02u", i); config.set("presets", name, filament_presets[i]); } CNumericLocalesSetter locales_setter; @@ -1402,6 +1433,13 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns) for (auto &ams : filament_ams_list) { auto filament_id = ams.opt_string("filament_id", 0u); auto filament_color = ams.opt_string("filament_colour", 0u); + auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); + if (filament_id.empty()) continue; + if (!filament_changed && this->filament_presets.size() > filament_presets.size()) { + filament_presets.push_back(this->filament_presets[filament_presets.size()]); + filament_colors.push_back(filament_color); + continue; + } auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == filament_id; }); if (iter == filaments.end()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; @@ -3473,9 +3511,9 @@ std::vector PresetBundle::export_current_configs(const std::string std::string file = path + "/" + preset->name + ".json"; if (boost::filesystem::exists(file) && overwrite < 2) { overwrite = override_confirm(preset->name); - if (overwrite == 0 || overwrite == 2) - continue; } + if (overwrite == 0 || overwrite == 2) + continue; preset->config.save_to_json(file, preset->name, "", preset->version.to_string()); result.push_back(file); } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 8c0e2dd825..854baf804b 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -47,10 +47,11 @@ public: void load_selections(AppConfig &config, const PresetPreferences& preferred_selection = PresetPreferences()); // BBS Load user presets + PresetsConfigSubstitutions load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule rule); PresetsConfigSubstitutions load_user_presets(AppConfig &config, std::map>& my_presets, ForwardCompatibilitySubstitutionRule rule); PresetsConfigSubstitutions import_presets(std::vector &files, std::function override_confirm, ForwardCompatibilitySubstitutionRule rule); void save_user_presets(AppConfig& config, std::vector& need_to_delete_list); - void remove_users_preset(AppConfig &config); + void remove_users_preset(AppConfig &config, std::map> * my_presets = nullptr); void update_user_presets_directory(const std::string preset_folder); void remove_user_presets_directory(const std::string preset_folder); void update_system_preset_setting_ids(std::map>& system_presets); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 0bc46f14cb..a18e824b0b 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -246,6 +246,9 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n osteps.emplace_back(posSimplifyPath); osteps.emplace_back(posSimplifySupportPath); steps.emplace_back(psSkirtBrim); + } + else if (opt_key == "z_hop_types") { + osteps.emplace_back(posDetectOverhangsForLift); } else { // for legacy, if we can't handle this option let's invalidate all steps //FIXME invalidate all steps of all objects as well? @@ -354,10 +357,21 @@ std::vector Print::support_material_extruders() const } // returns 0-based indices of used extruders -std::vector Print::extruders() const +std::vector Print::extruders(bool conside_custom_gcode) const { std::vector extruders = this->object_extruders(); append(extruders, this->support_material_extruders()); + + if (conside_custom_gcode) { + //BBS + for (auto plate_data : m_model.plates_custom_gcodes) { + for (auto item : plate_data.second.gcodes) { + if (item.type == CustomGCode::Type::ToolChange) + extruders.push_back((unsigned int)item.extruder); + } + } + } + sort_remove_duplicates(extruders); return extruders; } @@ -1135,34 +1149,35 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } } + const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); - if (is_BBL_printer()) { - const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; - for (unsigned int extruder_id : extruders) { - const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); - for (unsigned int extruder_id : extruders) { - int curr_bed_temp = bed_temp_opt->get_at(extruder_id); - if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { - std::string bed_type_name; - for (auto item : *bed_type_keys_map) { - if (item.second == m_config.curr_bed_type) { - bed_type_name = item.first; - break; - } - } + if (is_BBL_printer()) { + const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; + for (unsigned int extruder_id : extruders) { + const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); + for (unsigned int extruder_id : extruders) { + int curr_bed_temp = bed_temp_opt->get_at(extruder_id); + if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { + std::string bed_type_name; + for (auto item : *bed_type_keys_map) { + if (item.second == m_config.curr_bed_type) { + bed_type_name = item.first; + break; + } + } - StringObjectException except; - except.string = format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); - except.string += "\n"; - except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; - except.params.push_back(std::to_string(this->get_plate_index() + 1)); - except.params.push_back(L(bed_type_name)); - except.params.push_back(std::to_string(extruder_id + 1)); - except.object = nullptr; - return except; - } + StringObjectException except; + except.string = format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); + except.string += "\n"; + except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; + except.params.push_back(std::to_string(this->get_plate_index() + 1)); + except.params.push_back(L(bed_type_name)); + except.params.push_back(std::to_string(extruder_id+1)); + except.object = nullptr; + return except; + } } } } @@ -1307,7 +1322,6 @@ void PrintObject::clear_shared_object() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": this=%1%, clear previous shared object data %2%")%this %m_shared_object; m_layers.clear(); m_support_layers.clear(); - m_tree_support_layers.clear(); m_shared_object = nullptr; @@ -1320,7 +1334,6 @@ void PrintObject::copy_layers_from_shared_object() if (m_shared_object) { m_layers.clear(); m_support_layers.clear(); - m_tree_support_layers.clear(); firstLayerObjSliceByVolume.clear(); firstLayerObjSliceByGroups.clear(); @@ -1328,7 +1341,6 @@ void PrintObject::copy_layers_from_shared_object() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": this=%1%, copied layers from object %2%")%this%m_shared_object; m_layers = m_shared_object->layers(); m_support_layers = m_shared_object->support_layers(); - m_tree_support_layers = m_shared_object->tree_support_layers(); firstLayerObjSliceByVolume = m_shared_object->firstLayerObjSlice(); firstLayerObjSliceByGroups = m_shared_object->firstLayerObjGroups(); @@ -1660,6 +1672,17 @@ void Print::process(bool use_cache) } } + // BBS + for (PrintObject* obj : m_objects) { + if (need_slicing_objects.count(obj) != 0) { + obj->detect_overhangs_for_lift(); + } + else { + if (obj->set_started(posDetectOverhangsForLift)) + obj->set_done(posDetectOverhangsForLift); + } + } + BOOST_LOG_TRIVIAL(info) << "Slicing process finished." << log_memory_info(); } @@ -1732,13 +1755,6 @@ void Print::_make_skirt() break; layer->support_fills.collect_points(object_points); } - // BBS - for (const TreeSupportLayer* layer : object->m_tree_support_layers) { - if (layer->print_z > skirt_height_z) - break; - - layer->support_fills.collect_points(object_points); - } object_convex_hulls.insert({ object, Slic3r::Geometry::convex_hull(object_points) }); @@ -1885,12 +1901,12 @@ Polygons Print::first_layer_islands() const Polygons object_islands; for (ExPolygon &expoly : object->m_layers.front()->lslices) object_islands.push_back(expoly.contour); - if (! object->support_layers().empty()) - object->support_layers().front()->support_fills.polygons_covered_by_spacing(object_islands, float(SCALED_EPSILON)); - if (! object->tree_support_layers().empty()) { - ExPolygons& expolys_first_layer = object->m_tree_support_layers.front()->lslices; - for (ExPolygon &expoly : expolys_first_layer) { - object_islands.push_back(expoly.contour); + if (!object->support_layers().empty()) { + if (object->support_layers().front()->support_type==stInnerNormal) + object->support_layers().front()->support_fills.polygons_covered_by_spacing(object_islands, float(SCALED_EPSILON)); + else if(object->support_layers().front()->support_type==stInnerTree) { + ExPolygons &expolys_first_layer = object->m_support_layers.front()->lslices; + for (ExPolygon &expoly : expolys_first_layer) { object_islands.push_back(expoly.contour); } } } islands.reserve(islands.size() + object_islands.size() * object->instances().size()); @@ -2241,7 +2257,7 @@ std::string PrintStatistics::finalize_output_path(const std::string &path_in) co #define JSON_SUPPORT_LAYER_ISLANDS "support_islands" #define JSON_SUPPORT_LAYER_FILLS "support_fills" #define JSON_SUPPORT_LAYER_INTERFACE_ID "interface_id" - +#define JSON_SUPPORT_LAYER_TYPE "support_type" #define JSON_LAYER_REGION_CONFIG_HASH "config_hash" #define JSON_LAYER_REGION_SLICES "slices" @@ -2872,6 +2888,7 @@ void extract_layer(const json& layer_json, Layer& layer) { void extract_support_layer(const json& support_layer_json, SupportLayer& support_layer) { extract_layer(support_layer_json, support_layer); + support_layer.support_type = support_layer_json[JSON_SUPPORT_LAYER_TYPE]; //support_islands int islands_count = support_layer_json[JSON_SUPPORT_LAYER_ISLANDS].size(); for (int islands_index = 0; islands_index < islands_count; islands_index++) @@ -2900,27 +2917,6 @@ void extract_support_layer(const json& support_layer_json, SupportLayer& support return; } -void extract_tree_support_layer(const json& tree_support_layer_json, TreeSupportLayer& tree_support_layer) { - extract_layer(tree_support_layer_json, tree_support_layer); - - //support_fills - tree_support_layer.support_fills.no_sort = tree_support_layer_json[JSON_SUPPORT_LAYER_FILLS][JSON_EXTRUSION_NO_SORT]; - int treesupport_fills_entities_count = tree_support_layer_json[JSON_SUPPORT_LAYER_FILLS][JSON_EXTRUSION_ENTITIES].size(); - for (int treesupport_fills_entities_index = 0; treesupport_fills_entities_index < treesupport_fills_entities_count; treesupport_fills_entities_index++) - { - const json& extrusion_entity_json = tree_support_layer_json[JSON_SUPPORT_LAYER_FILLS][JSON_EXTRUSION_ENTITIES][treesupport_fills_entities_index]; - bool ret = convert_extrusion_from_json(extrusion_entity_json, tree_support_layer.support_fills); - if (!ret) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": error parsing fills found at tree_support_layer %1%, print_z %2%")%tree_support_layer.id() %tree_support_layer.print_z; - char error_buf[1024]; - ::sprintf(error_buf, "Error while parsing fills at tree_support_layer %d, print_z %f", tree_support_layer.id(), tree_support_layer.print_z); - throw Slic3r::FileIOError(error_buf); - } - } - - return; -} - int Print::export_cached_data(const std::string& directory, bool with_space) { int ret = 0; @@ -2986,7 +2982,7 @@ int Print::export_cached_data(const std::string& directory, bool with_space) std::string file_name = directory +"/obj_"+std::to_string(arrange_order)+".json"; try { - json root_json, layers_json = json::array(), support_layers_json = json::array(), tree_support_layers_json = json::array(); + json root_json, layers_json = json::array(), support_layers_json = json::array(); root_json[JSON_OBJECT_NAME] = model_obj->name; root_json[JSON_ARRANGE_ORDER] = arrange_order; @@ -3031,6 +3027,7 @@ int Print::export_cached_data(const std::string& directory, bool with_space) convert_layer_to_json(support_layer_json, support_layer); support_layer_json[JSON_SUPPORT_LAYER_INTERFACE_ID] = support_layer->interface_id(); + support_layer_json[JSON_SUPPORT_LAYER_TYPE] = support_layer->support_type; //support_islands for (const ExPolygon& support_island : support_layer->support_islands.expolygons) { @@ -3094,136 +3091,6 @@ int Print::export_cached_data(const std::string& directory, bool with_space) } // for each layer*/ root_json[JSON_SUPPORT_LAYERS] = std::move(support_layers_json); - //export the tree support layers - std::vector tree_support_layers_json_vector(obj->tree_support_layer_count()); - tbb::parallel_for( - tbb::blocked_range(0, obj->tree_support_layer_count()), - [&tree_support_layers_json_vector, obj, convert_layer_to_json](const tbb::blocked_range& tree_support_layer_range) { - for (size_t ts_layer_index = tree_support_layer_range.begin(); ts_layer_index < tree_support_layer_range.end(); ++ ts_layer_index) { - const TreeSupportLayer *tree_support_layer = obj->get_tree_support_layer(ts_layer_index); - json treesupport_layer_json, treesupport_fills_json, treesupportfills_entities_json = json::array(); - //json overhang_areas_json = json::array(), roof_areas_json = json::array(), roof_1st_layer_json = json::array(), floor_areas_json = json::array(), base_areas_json = json::array(); - - convert_layer_to_json(treesupport_layer_json, tree_support_layer); - - //tree_support_fills - treesupport_fills_json[JSON_EXTRUSION_NO_SORT] = tree_support_layer->support_fills.no_sort; - treesupport_fills_json[JSON_EXTRUSION_ENTITY_TYPE] = JSON_EXTRUSION_TYPE_COLLECTION; - for (const ExtrusionEntity* extrusion_entity : tree_support_layer->support_fills.entities) { - json treesupportfill_entity_json, treesupportfill_entity_paths_json = json::array(); - bool ret = convert_extrusion_to_json(treesupportfill_entity_json, treesupportfill_entity_paths_json, extrusion_entity); - if (!ret) - continue; - - treesupportfills_entities_json.push_back(std::move(treesupportfill_entity_json)); - } - treesupport_fills_json[JSON_EXTRUSION_ENTITIES] = std::move(treesupportfills_entities_json); - treesupport_layer_json[JSON_SUPPORT_LAYER_FILLS] = std::move(treesupport_fills_json); - - //following data are not needed in the later stage - //overhang_areas - /*for (const ExPolygon& overhang_area : tree_support_layer->overhang_areas) { - json overhang_area_json = overhang_area; - overhang_areas_json.push_back(std::move(overhang_area_json)); - } - treesupport_layer_json["overhang_areas"] = std::move(overhang_areas_json); - - //roof_areas - for (const ExPolygon& roof_area : tree_support_layer->roof_areas) { - json roof_area_json = roof_area; - roof_areas_json.push_back(std::move(roof_area_json)); - } - treesupport_layer_json["roof_areas"] = std::move(roof_areas_json); - - //roof_1st_layer - for (const ExPolygon& layer_poly : tree_support_layer->roof_1st_layer) { - json layer_poly_json = layer_poly; - roof_1st_layer_json.push_back(std::move(layer_poly_json)); - } - treesupport_layer_json["roof_1st_layer"] = std::move(roof_1st_layer_json); - - //floor_areas - for (const ExPolygon& floor_area : tree_support_layer->floor_areas) { - json floor_area_json = floor_area; - floor_areas_json.push_back(std::move(floor_area_json)); - } - treesupport_layer_json["floor_areas"] = std::move(floor_areas_json); - - //base_areas - for (const ExPolygon& base_area : tree_support_layer->base_areas) { - json base_area_json = base_area; - base_areas_json.push_back(std::move(base_area_json)); - } - treesupport_layer_json["base_areas"] = std::move(base_areas_json);*/ - - tree_support_layers_json_vector[ts_layer_index] = std::move(treesupport_layer_json); - } - } - ); - for (int ts_index = 0; ts_index < tree_support_layers_json_vector.size(); ts_index++) { - tree_support_layers_json.push_back(std::move(tree_support_layers_json_vector[ts_index])); - } - tree_support_layers_json_vector.clear(); -#if 0 - for (const TreeSupportLayer *tree_support_layer : obj->tree_support_layers()) { - json treesupport_layer_json, treesupport_fills_json, treesupportfills_entities_json = json::array(); - json overhang_areas_json = json::array(), roof_areas_json = json::array(), roof_1st_layer_json = json::array(), floor_areas_json = json::array(), base_areas_json = json::array(); - - convert_layer_to_json(treesupport_layer_json, tree_support_layer); - - //tree_support_fills - treesupport_fills_json[JSON_EXTRUSION_NO_SORT] = tree_support_layer->support_fills.no_sort; - treesupport_fills_json[JSON_EXTRUSION_ENTITY_TYPE] = JSON_EXTRUSION_TYPE_COLLECTION; - for (const ExtrusionEntity* extrusion_entity : tree_support_layer->support_fills.entities) { - json treesupportfill_entity_json, treesupportfill_entity_paths_json = json::array(); - bool ret = convert_extrusion_to_json(treesupportfill_entity_json, treesupportfill_entity_paths_json, extrusion_entity); - if (!ret) - continue; - - treesupportfills_entities_json.push_back(std::move(treesupportfill_entity_json)); - } - treesupport_fills_json[JSON_EXTRUSION_ENTITIES] = std::move(treesupportfills_entities_json); - treesupport_layer_json[JSON_SUPPORT_LAYER_FILLS] = std::move(treesupport_fills_json); - - //overhang_areas - /*for (const ExPolygon& overhang_area : tree_support_layer->overhang_areas) { - json overhang_area_json = overhang_area; - overhang_areas_json.push_back(std::move(overhang_area_json)); - } - treesupport_layer_json["overhang_areas"] = std::move(overhang_areas_json); - - //roof_areas - for (const ExPolygon& roof_area : tree_support_layer->roof_areas) { - json roof_area_json = roof_area; - roof_areas_json.push_back(std::move(roof_area_json)); - } - treesupport_layer_json["roof_areas"] = std::move(roof_areas_json); - - //roof_1st_layer - for (const ExPolygon& layer_poly : tree_support_layer->roof_1st_layer) { - json layer_poly_json = layer_poly; - roof_1st_layer_json.push_back(std::move(layer_poly_json)); - } - treesupport_layer_json["roof_1st_layer"] = std::move(roof_1st_layer_json); - - //floor_areas - for (const ExPolygon& floor_area : tree_support_layer->floor_areas) { - json floor_area_json = floor_area; - floor_areas_json.push_back(std::move(floor_area_json)); - } - treesupport_layer_json["floor_areas"] = std::move(floor_areas_json); - - //base_areas - for (const ExPolygon& base_area : tree_support_layer->base_areas) { - json base_area_json = base_area; - base_areas_json.push_back(std::move(base_area_json)); - } - treesupport_layer_json["base_areas"] = std::move(base_areas_json);*/ - - tree_support_layers_json.push_back(std::move(treesupport_layer_json)); - } // for each layer -#endif - root_json[JSON_TREE_SUPPORT_LAYERS] = std::move(tree_support_layers_json); filename_vector.push_back(file_name); json_vector.push_back(std::move(root_json)); @@ -3302,7 +3169,6 @@ int Print::load_cached_data(const std::string& directory) obj->clear_layers(); obj->clear_support_layers(); - obj->clear_tree_support_layers(); int arrange_order = model_instance->arrange_order; if (arrange_order <= 0) { @@ -3354,13 +3220,12 @@ int Print::load_cached_data(const std::string& directory) std::string name = root_json.at(JSON_OBJECT_NAME); int order = root_json.at(JSON_ARRANGE_ORDER); - int layer_count = 0, support_layer_count = 0, treesupport_layer_count = 0; + int layer_count = 0, support_layer_count = 0; layer_count = root_json[JSON_LAYERS].size(); support_layer_count = root_json[JSON_SUPPORT_LAYERS].size(); - treesupport_layer_count = root_json[JSON_TREE_SUPPORT_LAYERS].size(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<add_tree_support_layer(layer_json[JSON_LAYER_ID], layer_json[JSON_LAYER_HEIGHT], layer_json[JSON_LAYER_PRINT_Z], layer_json[JSON_LAYER_SLICE_Z]); - if (!new_tree_support_layer) { - BOOST_LOG_TRIVIAL(error) <<__FUNCTION__<< boost::format(":add_support_layer failed, out of memory"); - return CLI_OUT_OF_MEMORY; - } - if (previous_tree_support_layer) { - previous_tree_support_layer->upper_layer = new_tree_support_layer; - new_tree_support_layer->lower_layer = previous_tree_support_layer; - } - previous_tree_support_layer = new_tree_support_layer; - } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": finished load support_layers, start to load treesupport_layers."); - tbb::parallel_for( - tbb::blocked_range(0, obj->tree_support_layer_count()), - [&root_json, &obj](const tbb::blocked_range& tree_support_layer_range) { - for (size_t layer_index = tree_support_layer_range.begin(); layer_index < tree_support_layer_range.end(); ++ layer_index) { - const json& layer_json = root_json[JSON_TREE_SUPPORT_LAYERS][layer_index]; - TreeSupportLayer* tree_support_layer = obj->get_tree_support_layer(layer_index); - extract_tree_support_layer(layer_json, *tree_support_layer); - } - } - ); - count ++; BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": load object %1% from %2% successfully.")%count%object_filenames[obj_index].first; } @@ -3489,4 +3325,4 @@ int Print::load_cached_data(const std::string& directory) return ret; } -} // namespace Slic3r +} // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index d2409ead52..60704e8a38 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -32,7 +32,6 @@ class Print; class PrintObject; class SupportLayer; // BBS -class TreeSupportLayer; class TreeSupportData; class TreeSupport; @@ -86,7 +85,10 @@ enum PrintStep { enum PrintObjectStep { posSlice, posPerimeters, posPrepareInfill, - posInfill, posIroning, posSupportMaterial, posSimplifyPath, posSimplifySupportPath, posCount, + posInfill, posIroning, posSupportMaterial, posSimplifyPath, posSimplifySupportPath, + // BBS + posDetectOverhangsForLift, + posCount, }; // A PrintRegion object represents a group of volumes to print @@ -176,13 +178,6 @@ class ConstSupportLayerPtrsAdaptor : public ConstVectorOfPtrsAdaptor(data) {} }; -// BBS -typedef std::vector TreeSupportLayerPtrs; -class ConstTreeSupportLayerPtrsAdaptor : public ConstVectorOfPtrsAdaptor { - friend PrintObject; - ConstTreeSupportLayerPtrsAdaptor(const TreeSupportLayerPtrs* data) : ConstVectorOfPtrsAdaptor(data) {} -}; - class BoundingBoxf3; // TODO: for temporary constructor parameter // Single instance of a PrintObject. @@ -297,14 +292,10 @@ public: Transform3d trafo_centered() const { Transform3d t = this->trafo(); t.pretranslate(Vec3d(- unscale(m_center_offset.x()), - unscale(m_center_offset.y()), 0)); return t; } const PrintInstances& instances() const { return m_instances; } - // BBS - ConstTreeSupportLayerPtrsAdaptor tree_support_layers() const { return ConstTreeSupportLayerPtrsAdaptor(&m_tree_support_layers); } // Whoever will get a non-const pointer to PrintObject will be able to modify its layers. LayerPtrs& layers() { return m_layers; } SupportLayerPtrs& support_layers() { return m_support_layers; } - // BBS - TreeSupportLayerPtrs& tree_support_layers() { return m_tree_support_layers; } template static void remove_bridges_from_contacts( @@ -327,7 +318,9 @@ public: // BBS void generate_support_preview(); const std::vector& firstLayerObjSlice() const { return firstLayerObjSliceByVolume; } + std::vector& firstLayerObjSliceMod() { return firstLayerObjSliceByVolume; } const std::vector& firstLayerObjGroups() const { return firstLayerObjSliceByGroups; } + std::vector& firstLayerObjGroupsMod() { return firstLayerObjSliceByGroups; } bool has_brim() const { return ((this->config().brim_type != btNoBrim && this->config().brim_width.value > 0.) || this->config().brim_type == btAutoBrim) @@ -365,12 +358,7 @@ public: Layer* add_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z); // BBS - TreeSupportLayer* get_tree_support_layer(int idx) { return m_tree_support_layers[idx]; } - const TreeSupportLayer* get_tree_support_layer_at_printz(coordf_t print_z, coordf_t epsilon) const; - TreeSupportLayer* get_tree_support_layer_at_printz(coordf_t print_z, coordf_t epsilon); - TreeSupportLayer* add_tree_support_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z); - void clear_tree_support_layers(); - size_t tree_support_layer_count() const { return m_tree_support_layers.size(); } + SupportLayer* add_tree_support_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z); std::shared_ptr alloc_tree_support_preview_cache(); void clear_tree_support_preview_cache() { m_tree_support_preview_cache.reset(); } @@ -381,7 +369,6 @@ public: SupportLayer* get_support_layer_at_printz(coordf_t print_z, coordf_t epsilon); SupportLayer* add_support_layer(int id, int interface_id, coordf_t height, coordf_t print_z); SupportLayerPtrs::iterator insert_support_layer(SupportLayerPtrs::iterator pos, size_t id, size_t interface_id, coordf_t height, coordf_t print_z, coordf_t slice_z); - void delete_support_layer(int idx); // Initialize the layer_height_profile from the model_object's layer_height_profile, from model_object's layer height table, or from slicing parameters. // Returns true, if the layer_height_profile was changed. @@ -464,6 +451,10 @@ private: void slice_volumes(); //BBS ExPolygons _shrink_contour_holes(double contour_delta, double hole_delta, const ExPolygons& polys) const; + // BBS + void detect_overhangs_for_lift(); + void clear_overhangs_for_lift(); + // Has any support (not counting the raft). void detect_surfaces_type(); void process_external_surfaces(); @@ -498,7 +489,6 @@ private: LayerPtrs m_layers; SupportLayerPtrs m_support_layers; // BBS - TreeSupportLayerPtrs m_tree_support_layers; std::shared_ptr m_tree_support_preview_cache; // this is set to true when LayerRegion->slices is split in top/internal/bottom @@ -661,7 +651,7 @@ public: std::vector object_extruders() const; std::vector support_material_extruders() const; - std::vector extruders() const; + std::vector extruders(bool conside_custom_gcode = false) const; double max_allowed_layer_height() const; bool has_support_material() const; // Make sure the background processing has no access to this model_object during this call! diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index c43c9111e0..79a9143eac 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -1020,10 +1020,11 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ new_full_config.option("filament_settings_id", true); new_full_config.option("printer_settings_id", true); // BBS - int used_filaments = this->extruders().size(); + int used_filaments = this->extruders(true).size(); + //new_full_config.normalize_fdm(used_filaments); new_full_config.normalize_fdm_1(); - t_config_option_keys changed_keys = new_full_config.normalize_fdm_2(used_filaments); + t_config_option_keys changed_keys = new_full_config.normalize_fdm_2(objects().size(), used_filaments); if (changed_keys.size() > 0) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got changed_keys, size=%1%")%changed_keys.size(); for (int i = 0; i < changed_keys.size(); i++) @@ -1117,17 +1118,19 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ for (const ModelObject *model_object : m_model.objects) model_object_status_db.add(*model_object, ModelObjectStatus::New); } else { - if (m_model.custom_gcode_per_print_z != model.custom_gcode_per_print_z) { - update_apply_status(num_extruders_changed || - // Tool change G-codes are applied as color changes for a single extruder printer, no need to invalidate tool ordering. - //FIXME The tool ordering may be invalidated unnecessarily if the custom_gcode_per_print_z.mode is not applicable - // to the active print / model state, and then it is reset, so it is being applicable, but empty, thus the effect is the same. - (num_extruders > 1 && custom_per_printz_gcodes_tool_changes_differ(m_model.custom_gcode_per_print_z.gcodes, model.custom_gcode_per_print_z.gcodes)) ? - // The Tool Ordering and the Wipe Tower are no more valid. - this->invalidate_steps({ psWipeTower, psGCodeExport }) : - // There is no change in Tool Changes stored in custom_gcode_per_print_z, therefore there is no need to update Tool Ordering. - this->invalidate_step(psGCodeExport)); - m_model.custom_gcode_per_print_z = model.custom_gcode_per_print_z; + //BBS: replace model custom gcode with current plate custom gcode + m_model.curr_plate_index = model.curr_plate_index; + if (m_model.get_curr_plate_custom_gcodes() != model.get_curr_plate_custom_gcodes()) { + update_apply_status(num_extruders_changed || + // Tool change G-codes are applied as color changes for a single extruder printer, no need to invalidate tool ordering. + //FIXME The tool ordering may be invalidated unnecessarily if the custom_gcode_per_print_z.mode is not applicable + // to the active print / model state, and then it is reset, so it is being applicable, but empty, thus the effect is the same. + (num_extruders > 1 && custom_per_printz_gcodes_tool_changes_differ(m_model.get_curr_plate_custom_gcodes().gcodes, model.get_curr_plate_custom_gcodes().gcodes)) ? + // The Tool Ordering and the Wipe Tower are no more valid. + this->invalidate_steps({ psWipeTower, psGCodeExport }) : + // There is no change in Tool Changes stored in custom_gcode_per_print_z, therefore there is no need to update Tool Ordering. + this->invalidate_step(psGCodeExport)); + m_model.plates_custom_gcodes[m_model.curr_plate_index] = model.get_curr_plate_custom_gcodes(); } if (model_object_list_equal(m_model, model)) { // The object list did not change. @@ -1413,8 +1416,8 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ } //BBS: check the config again - int new_used_filaments = this->extruders().size(); - t_config_option_keys new_changed_keys = new_full_config.normalize_fdm_2(new_used_filaments); + int new_used_filaments = this->extruders(true).size(); + t_config_option_keys new_changed_keys = new_full_config.normalize_fdm_2(objects().size(), new_used_filaments); if (new_changed_keys.size() > 0) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got new_changed_keys, size=%1%")%new_changed_keys.size(); for (int i = 0; i < new_changed_keys.size(); i++) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 0a610bf9e8..8fb94e1cf7 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -159,7 +159,8 @@ static t_config_enum_values s_keys_map_WallInfillOrder { { "outer wall/inner wall/infill", int(WallInfillOrder::OuterInnerInfill) }, { "inner-outer-inner wall/infill", int(WallInfillOrder::InnerOuterInnerInfill) }, { "infill/inner wall/outer wall", int(WallInfillOrder::InfillInnerOuter) }, - { "infill/outer wall/inner wall", int(WallInfillOrder::InfillOuterInner) } + { "infill/outer wall/inner wall", int(WallInfillOrder::InfillOuterInner) }, + { "inner-outer-inner wall/infill", int(WallInfillOrder::InnerOuterInnerInfill)} }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(WallInfillOrder) @@ -303,6 +304,14 @@ static t_config_enum_values s_keys_map_PerimeterGeneratorType{ }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PerimeterGeneratorType) +static const t_config_enum_values s_keys_map_ZHopType = { + { "Auto Lift", zhtAuto }, + { "Normal Lift", zhtNormal }, + { "Slope Lift", zhtSlope }, + { "Spiral Lift", zhtSpiral } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(ZHopType) + static void assign_printer_technology_to_unknown(t_optiondef_map &options, PrinterTechnology printer_technology) { for (std::pair &kvp : options) @@ -813,8 +822,8 @@ void PrintConfigDef::init_fff_params() def = this->add("brim_type", coEnum); def->label = L("Brim type"); def->category = L("Support"); - def->tooltip = L("This controls brim position including outer side of models, inner side of holes or both. " - "Auto means both the brim position and brim width is analysed and calculated automatically"); + def->tooltip = L("This controls the generation of the brim at outer side of models. " + "Auto means the brim width is analysed and calculated automatically."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.emplace_back("auto_brim"); def->enum_values.emplace_back("outer_only"); @@ -1325,6 +1334,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("PA-CF"); def->enum_values.push_back("PLA-CF"); def->enum_values.push_back("PET-CF"); + def->enum_values.push_back("PETG-CF"); def->enum_values.push_back("PVA"); def->mode = comSimple; def->set_default_value(new ConfigOptionStrings { "PLA" }); @@ -2149,6 +2159,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Diameter of nozzle"); def->sidetext = L("mm"); def->mode = comAdvanced; + def->max = 1.0; def->set_default_value(new ConfigOptionFloats { 0.4 }); def = this->add("host_type", coEnum); @@ -2183,6 +2194,14 @@ void PrintConfigDef::init_fff_params() def->readonly = true; def->set_default_value(new ConfigOptionFloat { 0.0 }); + def = this->add("start_end_points", coPoints); + def->label = L("Start end points"); + def->tooltip = L("The start and end points which is from cutter area to garbage can."); + def->mode = comDevelop; + def->readonly = true; + // start and end point is from the change_filament_gcode + def->set_default_value(new ConfigOptionPoints{Vec2d(30, -3), Vec2d(54, 245)}); + def = this->add("reduce_infill_retraction", coBool); def->label = L("Reduce infill retraction"); def->tooltip = L("Don't retract when the travel is in infill area absolutely. That means the oozing can't been seen. " @@ -2397,6 +2416,21 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionFloats { 0.4 }); + def = this->add("z_hop_types", coEnums); + def->label = L("Z Hop Type"); + def->tooltip = L(""); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("Auto Lift"); + def->enum_values.push_back("Normal Lift"); + def->enum_values.push_back("Slope Lift"); + def->enum_values.push_back("Spiral Lift"); + def->enum_labels.push_back(L("Auto")); + def->enum_labels.push_back(L("Normal")); + def->enum_labels.push_back(L("Slope")); + def->enum_labels.push_back(L("Spiral")); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnumsGeneric{ ZHopType::zhtSpiral }); + def = this->add("retract_restart_extra", coFloats); def->label = L("Extra length on restart"); def->tooltip = L("When the retraction is compensated after the travel move, the extruder will push " @@ -2495,11 +2529,11 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(2)); def = this->add("skirt_height", coInt); - //def->label = L("Skirt height"); - def->label = "Skirt height"; - //def->tooltip = L("How many layers of skirt. Usually only one layer"); + def->label = L("Skirt height"); + //def->label = "Skirt height"; + def->tooltip = L("How many layers of skirt. Usually only one layer"); def->sidetext = L("layers"); - def->mode = comAdvanced; + def->mode = comSimple; def->max = 10000; def->set_default_value(new ConfigOptionInt(1)); @@ -3226,7 +3260,7 @@ void PrintConfigDef::init_fff_params() //def->sidetext = L("mm"); def->mode = comDevelop; // BBS: change data type to floats to add partplate logic - def->set_default_value(new ConfigOptionFloats{ 240. }); + def->set_default_value(new ConfigOptionFloats{ 220. }); def = this->add("prime_tower_width", coFloat); def->label = L("Width"); @@ -3409,7 +3443,7 @@ void PrintConfigDef::init_fff_params() // Declare retract values for filament profile, overriding the printer's extruder profile. for (const char *opt_key : { // floats - "retraction_length", "z_hop", "retraction_speed", "deretraction_speed", "retract_restart_extra", "retraction_minimum_travel", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_restart_extra", "retraction_minimum_travel", // BBS: floats "wipe_distance", // bools @@ -3423,6 +3457,9 @@ void PrintConfigDef::init_fff_params() def->full_label = it_opt->second.full_label; def->tooltip = it_opt->second.tooltip; def->sidetext = it_opt->second.sidetext; + def->enum_keys_map = it_opt->second.enum_keys_map; + def->enum_labels = it_opt->second.enum_labels; + def->enum_values = it_opt->second.enum_values; //BBS: shown specific filament retract config because we hide the machine retract into comDevelop mode if ((strcmp(opt_key, "retraction_length") == 0) || (strcmp(opt_key, "z_hop") == 0)) @@ -3433,6 +3470,7 @@ void PrintConfigDef::init_fff_params() case coFloats : def->set_default_value(new ConfigOptionFloatsNullable (static_cast(it_opt->second.default_value.get())->values)); break; case coPercents : def->set_default_value(new ConfigOptionPercentsNullable(static_cast(it_opt->second.default_value.get())->values)); break; case coBools : def->set_default_value(new ConfigOptionBoolsNullable (static_cast(it_opt->second.default_value.get())->values)); break; + case coEnums : def->set_default_value(new ConfigOptionEnumsGenericNullable(static_cast(it_opt->second.default_value.get())->values)); break; default: assert(false); } } @@ -3452,7 +3490,7 @@ void PrintConfigDef::init_extruder_option_keys() // ConfigOptionFloats, ConfigOptionPercents, ConfigOptionBools, ConfigOptionStrings m_extruder_option_keys = { "nozzle_diameter", "min_layer_height", "max_layer_height", "extruder_offset", - "retraction_length", "z_hop", "retraction_speed", "deretraction_speed", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_before_wipe", "retract_restart_extra", "retraction_minimum_travel", "wipe", "wipe_distance", "retract_when_changing_layer", "retract_length_toolchange", "retract_restart_extra_toolchange", "extruder_colour", "default_filament_profile" @@ -3468,7 +3506,8 @@ void PrintConfigDef::init_extruder_option_keys() "retraction_speed", "wipe", "wipe_distance", - "z_hop" + "z_hop", + "z_hop_types" }; assert(std::is_sorted(m_extruder_retract_keys.begin(), m_extruder_retract_keys.end())); } @@ -3477,7 +3516,7 @@ void PrintConfigDef::init_filament_option_keys() { m_filament_option_keys = { "filament_diameter", "min_layer_height", "max_layer_height", - "retraction_length", "z_hop", "retraction_speed", "deretraction_speed", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_before_wipe", "retract_restart_extra", "retraction_minimum_travel", "wipe", "wipe_distance", "retract_when_changing_layer", "retract_length_toolchange", "retract_restart_extra_toolchange", "filament_colour", "default_filament_profile"/*,"filament_seam_gap"*/ @@ -3493,7 +3532,8 @@ void PrintConfigDef::init_filament_option_keys() "retraction_speed", "wipe", "wipe_distance", - "z_hop" + "z_hop", + "z_hop_types" }; assert(std::is_sorted(m_filament_retract_keys.begin(), m_filament_retract_keys.end())); } @@ -4219,7 +4259,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va "support_closing_radius", "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", "support_transition_line_width", "support_transition_speed", "bed_temperature", "bed_temperature_initial_layer", - "can_switch_nozzle_type", "can_add_auxiliary_fan", "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height" + "can_switch_nozzle_type", "can_add_auxiliary_fan", "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", + "z_hop_type" }; if (ignore.find(opt_key) != ignore.end()) { @@ -4394,7 +4435,7 @@ void DynamicPrintConfig::normalize_fdm_1() return; } -t_config_option_keys DynamicPrintConfig::normalize_fdm_2(int used_filaments) +t_config_option_keys DynamicPrintConfig::normalize_fdm_2(int num_objects, int used_filaments) { t_config_option_keys changed_keys; ConfigOptionBool* ept_opt = this->option("enable_prime_tower"); @@ -4405,7 +4446,7 @@ t_config_option_keys DynamicPrintConfig::normalize_fdm_2(int used_filaments) ConfigOptionEnum* timelapse_opt = this->option>("timelapse_type"); bool is_smooth_timelapse = timelapse_opt != nullptr && timelapse_opt->value == TimelapseType::tlSmooth; - if (!is_smooth_timelapse && (used_filaments == 1 || ps_opt->value == PrintSequence::ByObject)) { + if (!is_smooth_timelapse && (used_filaments == 1 || (ps_opt->value == PrintSequence::ByObject && num_objects > 1))) { if (ept_opt->value) { ept_opt->value = false; changed_keys.push_back("enable_prime_tower"); @@ -4498,7 +4539,8 @@ void DynamicPrintConfig::set_num_filaments(unsigned int num_filaments) } } -std::string DynamicPrintConfig::validate() +//BBS: pass map to recording all invalid valies +std::map DynamicPrintConfig::validate(bool under_cli) { // Full print config is initialized from the defaults. const ConfigOption *opt = this->option("printer_technology", false); @@ -4509,11 +4551,11 @@ std::string DynamicPrintConfig::validate() FullPrintConfig fpc; fpc.apply(*this, true); // Verify this print options through the FullPrintConfig. - return Slic3r::validate(fpc); + return Slic3r::validate(fpc, under_cli); } default: //FIXME no validation on SLA data? - return std::string(); + return std::map(); } } @@ -4584,38 +4626,50 @@ bool DynamicPrintConfig::is_custom_defined() return false; } +//BBS: pass map to recording all invalid valies //FIXME localize this function. -std::string validate(const FullPrintConfig &cfg) +std::map validate(const FullPrintConfig &cfg, bool under_cli) { + std::map error_message; // --layer-height - if (cfg.get_abs_value("layer_height") <= 0) - return "Invalid value for --layer-height"; - if (fabs(fmod(cfg.get_abs_value("layer_height"), SCALING_FACTOR)) > 1e-4) - return "--layer-height must be a multiple of print resolution"; + if (cfg.get_abs_value("layer_height") <= 0) { + error_message.emplace("layer_height", L("invalid value ") + std::to_string(cfg.get_abs_value("layer_height"))); + } + else if (fabs(fmod(cfg.get_abs_value("layer_height"), SCALING_FACTOR)) > 1e-4) { + error_message.emplace("layer_height", L("invalid value ") + std::to_string(cfg.get_abs_value("layer_height"))); + } // --first-layer-height - if (cfg.initial_layer_print_height.value <= 0) - return "Invalid value for --first-layer-height"; + if (cfg.initial_layer_print_height.value <= 0) { + error_message.emplace("initial_layer_print_height", L("invalid value ") + std::to_string(cfg.initial_layer_print_height.value)); + } // --filament-diameter for (double fd : cfg.filament_diameter.values) - if (fd < 1) - return "Invalid value for --filament-diameter"; + if (fd < 1) { + error_message.emplace("filament_diameter", L("invalid value ") + cfg.filament_diameter.serialize()); + break; + } // --nozzle-diameter for (double nd : cfg.nozzle_diameter.values) - if (nd < 0.005) - return "Invalid value for --nozzle-diameter"; + if (nd < 0.005) { + error_message.emplace("nozzle_diameter", L("invalid value ") + cfg.nozzle_diameter.serialize()); + break; + } // --perimeters - if (cfg.wall_loops.value < 0) - return "Invalid value for --wall_loops"; + if (cfg.wall_loops.value < 0) { + error_message.emplace("wall_loops", L("invalid value ") + std::to_string(cfg.wall_loops.value)); + } // --solid-layers - if (cfg.top_shell_layers < 0) - return "Invalid value for --top-solid-layers"; - if (cfg.bottom_shell_layers < 0) - return "Invalid value for --bottom-solid-layers"; + if (cfg.top_shell_layers < 0) { + error_message.emplace("top_shell_layers", L("invalid value ") + std::to_string(cfg.top_shell_layers)); + } + if (cfg.bottom_shell_layers < 0) { + error_message.emplace("bottom_shell_layers", L("invalid value ") + std::to_string(cfg.bottom_shell_layers)); + } if (cfg.use_firmware_retraction.value && cfg.gcode_flavor.value != gcfKlipper && @@ -4626,69 +4680,96 @@ std::string validate(const FullPrintConfig &cfg) cfg.gcode_flavor.value != gcfMarlinFirmware && cfg.gcode_flavor.value != gcfMachinekit && cfg.gcode_flavor.value != gcfRepetier) - return "--use-firmware-retraction is only supported by Klipper, Marlin, Smoothie, RepRapFirmware, Repetier and Machinekit firmware"; + error_message.emplace("use_firmware_retraction","--use-firmware-retraction is only supported by Klipper, Marlin, Smoothie, RepRapFirmware, Repetier and Machinekit firmware"); if (cfg.use_firmware_retraction.value) for (unsigned char wipe : cfg.wipe.values) if (wipe) - return "--use-firmware-retraction is not compatible with --wipe"; + error_message.emplace("use_firmware_retraction", "--use-firmware-retraction is not compatible with --wipe"); // --gcode-flavor - if (! print_config_def.get("gcode_flavor")->has_enum_value(cfg.gcode_flavor.serialize())) - return "Invalid value for --gcode-flavor"; + if (! print_config_def.get("gcode_flavor")->has_enum_value(cfg.gcode_flavor.serialize())) { + error_message.emplace("gcode_flavor", L("invalid value ") + cfg.gcode_flavor.serialize()); + } // --fill-pattern - if (! print_config_def.get("sparse_infill_pattern")->has_enum_value(cfg.sparse_infill_pattern.serialize())) - return "Invalid value for --fill-pattern"; + if (! print_config_def.get("sparse_infill_pattern")->has_enum_value(cfg.sparse_infill_pattern.serialize())) { + error_message.emplace("sparse_infill_pattern", L("invalid value ") + cfg.sparse_infill_pattern.serialize()); + } // --top-fill-pattern - if (! print_config_def.get("top_surface_pattern")->has_enum_value(cfg.top_surface_pattern.serialize())) - return "Invalid value for --top-fill-pattern"; + if (! print_config_def.get("top_surface_pattern")->has_enum_value(cfg.top_surface_pattern.serialize())) { + error_message.emplace("top_surface_pattern", L("invalid value ") + cfg.top_surface_pattern.serialize()); + } // --bottom-fill-pattern - if (! print_config_def.get("bottom_surface_pattern")->has_enum_value(cfg.bottom_surface_pattern.serialize())) - return "Invalid value for --bottom-fill-pattern"; + if (! print_config_def.get("bottom_surface_pattern")->has_enum_value(cfg.bottom_surface_pattern.serialize())) { + error_message.emplace("bottom_surface_pattern", L("invalid value ") + cfg.bottom_surface_pattern.serialize()); + } // --fill-density if (fabs(cfg.sparse_infill_density.value - 100.) < EPSILON && - ! print_config_def.get("top_surface_pattern")->has_enum_value(cfg.sparse_infill_pattern.serialize())) - return "The selected fill pattern is not supposed to work at 100% density"; + ! print_config_def.get("top_surface_pattern")->has_enum_value(cfg.sparse_infill_pattern.serialize())) { + error_message.emplace("sparse_infill_pattern", cfg.sparse_infill_pattern.serialize() + L(" doesn't work at 100%% density ")); + } // --skirt-height - if (cfg.skirt_height < 0) - return "Invalid value for --skirt-height"; + if (cfg.skirt_height < 0) { + error_message.emplace("skirt_height", L("invalid value ") + std::to_string(cfg.skirt_height)); + } // --bridge-flow-ratio - if (cfg.bridge_flow <= 0) - return "Invalid value for --bridge-flow-ratio"; + if (cfg.bridge_flow <= 0) { + error_message.emplace("bridge_flow", L("invalid value ") + std::to_string(cfg.bridge_flow)); + } // extruder clearance - if (cfg.extruder_clearance_radius <= 0) - return "Invalid value for --extruder-clearance-radius"; - if (cfg.extruder_clearance_height_to_rod <= 0) - return "Invalid value for --extruder-clearance-height-to-rod"; - if (cfg.extruder_clearance_height_to_lid <= 0) - return "Invalid value for --extruder-clearance-height-to-lid"; + if (cfg.extruder_clearance_radius <= 0) { + error_message.emplace("extruder_clearance_radius", L("invalid value ") + std::to_string(cfg.extruder_clearance_radius)); + } + if (cfg.extruder_clearance_height_to_rod <= 0) { + error_message.emplace("extruder_clearance_height_to_rod", L("invalid value ") + std::to_string(cfg.extruder_clearance_height_to_rod)); + } + if (cfg.extruder_clearance_height_to_lid <= 0) { + error_message.emplace("extruder_clearance_height_to_lid", L("invalid value ") + std::to_string(cfg.extruder_clearance_height_to_lid)); + } // --extrusion-multiplier for (double em : cfg.filament_flow_ratio.values) - if (em <= 0) - return "Invalid value for --filament-flow-ratio"; + if (em <= 0) { + error_message.emplace("filament_flow_ratio", L("invalid value ") + cfg.filament_flow_ratio.serialize()); + break; + } // --spiral-vase - if (cfg.spiral_mode) { + //for non-cli case, we will popup dialog for spiral mode correction + if (cfg.spiral_mode && under_cli) { // Note that we might want to have more than one perimeter on the bottom // solid layers. - if (cfg.wall_loops > 1) - return "Can't make more than one perimeter when spiral vase mode is enabled"; - else if (cfg.wall_loops < 1) - return "Can't make less than one perimeter when spiral vase mode is enabled"; - if (cfg.sparse_infill_density > 0) - return "Spiral vase mode can only print hollow objects, so you need to set Fill density to 0"; - if (cfg.top_shell_layers > 0) - return "Spiral vase mode is not compatible with top solid layers"; - if (cfg.enable_support || cfg.enforce_support_layers > 0) - return "Spiral vase mode is not compatible with support"; + if (cfg.wall_loops != 1) { + error_message.emplace("wall_loops", L("Invalid value when spiral vase mode is enabled: ") + std::to_string(cfg.wall_loops)); + //return "Can't make more than one perimeter when spiral vase mode is enabled"; + //return "Can't make less than one perimeter when spiral vase mode is enabled"; + } + + if (cfg.sparse_infill_density > 0) { + error_message.emplace("sparse_infill_density", L("Invalid value when spiral vase mode is enabled: ") + std::to_string(cfg.sparse_infill_density)); + //return "Spiral vase mode can only print hollow objects, so you need to set Fill density to 0"; + } + + if (cfg.top_shell_layers > 0) { + error_message.emplace("top_shell_layers", L("Invalid value when spiral vase mode is enabled: ") + std::to_string(cfg.top_shell_layers)); + //return "Spiral vase mode is not compatible with top solid layers"; + } + + if (cfg.enable_support ) { + error_message.emplace("enable_support", L("Invalid value when spiral vase mode is enabled: ") + std::to_string(cfg.enable_support)); + //return "Spiral vase mode is not compatible with support"; + } + if (cfg.enforce_support_layers > 0) { + error_message.emplace("enforce_support_layers", L("Invalid value when spiral vase mode is enabled: ") + std::to_string(cfg.enforce_support_layers)); + //return "Spiral vase mode is not compatible with support"; + } } // extrusion widths @@ -4706,8 +4787,10 @@ std::string validate(const FullPrintConfig &cfg) "initial_layer_line_width" }; for (size_t i = 0; i < sizeof(widths) / sizeof(widths[i]); ++ i) { std::string key(widths[i]); - if (cfg.get_abs_value(key) > 2.5 * max_nozzle_diameter) - return std::string("Too Large line width: ") + key; + if (cfg.get_abs_value(key) > 2.5 * max_nozzle_diameter) { + error_message.emplace(key, L("too large line width ") + std::to_string(cfg.get_abs_value(key))); + //return std::string("Too Large line width: ") + key; + } } } @@ -4750,12 +4833,15 @@ std::string validate(const FullPrintConfig &cfg) break; default:; } - if (out_of_range) - return std::string("Value out of range: " + opt_key); + if (out_of_range) { + if (error_message.find(opt_key) == error_message.end()) + error_message.emplace(opt_key, opt->serialize() + L(" not in range ") +"[" + std::to_string(optdef->min) + "," + std::to_string(optdef->max) + "]"); + //return std::string("Value out of range: " + opt_key); + } } // The configuration is valid. - return ""; + return error_message; } // Declare and initialize static caches of StaticPrintConfig derived classes. @@ -5127,6 +5213,26 @@ Points get_bed_shape(const PrintConfig &cfg) Points get_bed_shape(const SLAPrinterConfig &cfg) { return to_points(cfg.printable_area.values); } +Polygon get_bed_shape_with_excluded_area(const PrintConfig& cfg) +{ + Polygon bed_poly; + bed_poly.points = get_bed_shape(cfg); + + Points excluse_area_points = to_points(cfg.bed_exclude_area.values); + Polygons exclude_polys; + Polygon exclude_poly; + for (int i = 0; i < excluse_area_points.size(); i++) { + auto pt = excluse_area_points[i]; + exclude_poly.points.emplace_back(pt); + if (i % 4 == 3) { // exclude areas are always rectangle + exclude_polys.push_back(exclude_poly); + exclude_poly.points.clear(); + } + } + auto tmp = diff({ bed_poly }, exclude_polys); + if (!tmp.empty()) bed_poly = tmp[0]; + return bed_poly; +} } // namespace Slic3r #include diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 7532843067..77b3df5a59 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -18,7 +18,7 @@ #include "libslic3r.h" #include "Config.hpp" - +#include "Polygon.hpp" #include #include #include @@ -78,6 +78,7 @@ enum class WallInfillOrder { enum class PrintSequence { ByLayer, ByObject, + ByDefault, Count, }; @@ -207,6 +208,15 @@ enum NozzleType { ntCount }; +// BBS +enum ZHopType { + zhtAuto = 0, + zhtNormal, + zhtSlope, + zhtSpiral, + zhtCount +}; + static std::string bed_type_to_gcode_string(const BedType type) { std::string type_str; @@ -368,15 +378,16 @@ public: void normalize_fdm(int used_filaments = 0); void normalize_fdm_1(); //return the changed param set - t_config_option_keys normalize_fdm_2(int used_filaments = 0); + t_config_option_keys normalize_fdm_2(int num_objects, int used_filaments = 0); void set_num_extruders(unsigned int num_extruders); // BBS void set_num_filaments(unsigned int num_filaments); + //BBS // Validate the PrintConfig. Returns an empty string on success, otherwise an error message is returned. - std::string validate(); + std::map validate(bool under_cli = false); // Verify whether the opt_key has not been obsoleted or renamed. // Both opt_key and value may be modified by handle_legacy(). @@ -842,7 +853,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, retraction_length)) ((ConfigOptionFloats, retract_length_toolchange)) ((ConfigOptionFloats, z_hop)) - ((ConfigOptionEnum, z_lift_type)) + // BBS + ((ConfigOptionEnumsGeneric, z_hop_types)) ((ConfigOptionFloats, retract_restart_extra)) ((ConfigOptionFloats, retract_restart_extra_toolchange)) ((ConfigOptionFloats, retraction_speed)) @@ -978,6 +990,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( // BBS: not in any preset, calculated before slicing ((ConfigOptionBool, has_prime_tower)) ((ConfigOptionFloat, nozzle_volume)) + ((ConfigOptionPoints, start_end_points)) ((ConfigOptionEnum, timelapse_type)) ((ConfigOptionPoints, thumbnails)) // BBS: move from PrintObjectConfig @@ -994,7 +1007,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE0( ) // Validate the FullPrintConfig. Returns an empty string on success, otherwise an error message is returned. -std::string validate(const FullPrintConfig &config); +std::map validate(const FullPrintConfig &config, bool under_cli = false); PRINT_CONFIG_CLASS_DEFINE( SLAPrintConfig, @@ -1282,6 +1295,7 @@ private: Points get_bed_shape(const DynamicPrintConfig &cfg); Points get_bed_shape(const PrintConfig &cfg); Points get_bed_shape(const SLAPrinterConfig &cfg); +Slic3r::Polygon get_bed_shape_with_excluded_area(const PrintConfig& cfg); // ModelConfig is a wrapper around DynamicPrintConfig with an addition of a timestamp. // Each change of ModelConfig is tracked by assigning a new timestamp from a global counter. diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 1c388631e0..49ddaa98af 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -91,7 +91,6 @@ PrintObject::~PrintObject() if (m_shared_regions && -- m_shared_regions->m_ref_cnt == 0) delete m_shared_regions; clear_layers(); clear_support_layers(); - clear_tree_support_layers(); } PrintBase::ApplyStatus PrintObject::set_instances(PrintInstances &&instances) @@ -410,11 +409,49 @@ void PrintObject::ironing() } } +// BBS +void PrintObject::clear_overhangs_for_lift() +{ + if (!m_shared_object) { + for (Layer* l : m_layers) + l->loverhangs.clear(); + } +} + +static const float g_min_overhang_percent_for_lift = 0.3f; + +void PrintObject::detect_overhangs_for_lift() +{ + if (this->set_started(posDetectOverhangsForLift)) { + const float min_overlap = m_config.line_width * g_min_overhang_percent_for_lift; + size_t num_layers = this->layer_count(); + size_t num_raft_layers = m_slicing_params.raft_layers(); + + m_print->set_status(78, L("Detect overhangs for auto-lift")); + + this->clear_overhangs_for_lift(); + + tbb::spin_mutex layer_storage_mutex; + tbb::parallel_for(tbb::blocked_range(num_raft_layers + 1, num_layers), + [this, min_overlap](const tbb::blocked_range& range) + { + for (size_t layer_id = range.begin(); layer_id < range.end(); ++layer_id) { + Layer& layer = *m_layers[layer_id]; + Layer& lower_layer = *layer.lower_layer; + + ExPolygons overhangs = diff_ex(layer.lslices, offset_ex(lower_layer.lslices, scale_(min_overlap))); + layer.loverhangs = std::move(offset2_ex(overhangs, -0.1f * scale_(m_config.line_width), 0.1f * scale_(m_config.line_width))); + } + }); + + this->set_done(posDetectOverhangsForLift); + } +} + void PrintObject::generate_support_material() { if (this->set_started(posSupportMaterial)) { this->clear_support_layers(); - this->clear_tree_support_layers(); if ((this->has_support() && m_layers.size() > 1) || (this->has_raft() && ! m_layers.empty())) { m_print->set_status(50, L("Generating support")); @@ -483,16 +520,6 @@ void PrintObject::simplify_extrusion_path() } ); m_print->throw_if_canceled(); - tbb::parallel_for( - tbb::blocked_range(0, m_tree_support_layers.size()), - [this](const tbb::blocked_range& range) { - for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { - m_print->throw_if_canceled(); - m_tree_support_layers[layer_idx]->simplify_support_extrusion_path(); - } - } - ); - m_print->throw_if_canceled(); BOOST_LOG_TRIVIAL(debug) << "Simplify extrusion path of support in parallel - end"; this->set_done(posSimplifySupportPath); } @@ -564,19 +591,6 @@ Layer* PrintObject::add_layer(int id, coordf_t height, coordf_t print_z, coordf_ return m_layers.back(); } -// BBS -const TreeSupportLayer* PrintObject::get_tree_support_layer_at_printz(coordf_t print_z, coordf_t epsilon) const -{ - coordf_t limit = print_z - epsilon; - auto it = Slic3r::lower_bound_by_predicate(m_tree_support_layers.begin(), m_tree_support_layers.end(), [limit](const TreeSupportLayer* layer) { return layer->print_z < limit; }); - return (it == m_tree_support_layers.end() || (*it)->print_z > print_z + epsilon) ? nullptr : *it; -} - -TreeSupportLayer* PrintObject::get_tree_support_layer_at_printz(coordf_t print_z, coordf_t epsilon) -{ - return const_cast(std::as_const(*this).get_tree_support_layer_at_printz(print_z, epsilon)); -} - const SupportLayer* PrintObject::get_support_layer_at_printz(coordf_t print_z, coordf_t epsilon) const { coordf_t limit = print_z - epsilon; @@ -589,12 +603,17 @@ SupportLayer* PrintObject::get_support_layer_at_printz(coordf_t print_z, coordf_ return const_cast(std::as_const(*this).get_support_layer_at_printz(print_z, epsilon)); } -void PrintObject::clear_tree_support_layers() +void PrintObject::clear_support_layers() { if (!m_shared_object) { - for (TreeSupportLayer* l : m_tree_support_layers) + for (SupportLayer* l : m_support_layers) delete l; - m_tree_support_layers.clear(); + m_support_layers.clear(); + for (auto l : m_layers) { + l->sharp_tails.clear(); + l->sharp_tails_height.clear(); + l->cantilevers.clear(); + } } } @@ -614,19 +633,11 @@ std::shared_ptr PrintObject::alloc_tree_support_preview_cache() return m_tree_support_preview_cache; } -TreeSupportLayer* PrintObject::add_tree_support_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z) +SupportLayer* PrintObject::add_tree_support_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z) { - m_tree_support_layers.emplace_back(new TreeSupportLayer(id, this, height, print_z, slice_z)); - return m_tree_support_layers.back(); -} - -void PrintObject::clear_support_layers() -{ - if (!m_shared_object) { - for (Layer *l : m_support_layers) - delete l; - m_support_layers.clear(); - } + m_support_layers.emplace_back(new SupportLayer(id, 0, this, height, print_z, slice_z)); + m_support_layers.back()->support_type = stInnerTree; + return m_support_layers.back(); } SupportLayer* PrintObject::add_support_layer(int id, int interface_id, coordf_t height, coordf_t print_z) @@ -717,7 +728,14 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "support_top_z_distance" || opt_key == "support_bottom_z_distance" || opt_key == "xy_hole_compensation" - || opt_key == "xy_contour_compensation") { + || opt_key == "xy_contour_compensation" + //BBS: [Arthur] the following params affect bottomBridge surface type detection + || opt_key == "support_type" + || opt_key == "bridge_no_support" + || opt_key == "max_bridge_length" + || opt_key == "support_interface_top_layers" + || opt_key == "support_critical_regions_only" + ) { steps.emplace_back(posSlice); } else if (opt_key == "enable_support") { steps.emplace_back(posSupportMaterial); @@ -762,9 +780,23 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "tree_support_branch_angle" || opt_key == "tree_support_wall_count") { steps.emplace_back(posSupportMaterial); - } else if (opt_key == "bottom_shell_layers") { + } else if ( + opt_key == "bottom_shell_layers" + || opt_key == "top_shell_layers") { + steps.emplace_back(posPrepareInfill); - if (m_print->config().spiral_mode) { + + const auto *old_shell_layers = old_config.option(opt_key); + const auto *new_shell_layers = new_config.option(opt_key); + assert(old_shell_layers && new_shell_layers); + + bool value_changed = (old_shell_layers->value == 0 && new_shell_layers->value > 0) || + (old_shell_layers->value > 0 && new_shell_layers->value == 0); + + if (value_changed && this->object_extruders().size() > 1) { + steps.emplace_back(posSlice); + } + else if (m_print->config().spiral_mode && opt_key == "bottom_shell_layers") { // Changing the number of bottom layers when a spiral vase is enabled requires re-slicing the object again. // Otherwise, holes in the bottom layers could be filled, as is reported in GH #5528. steps.emplace_back(posSlice); @@ -773,7 +805,6 @@ bool PrintObject::invalidate_state_by_config_options( opt_key == "interface_shells" || opt_key == "infill_combination" || opt_key == "bottom_shell_thickness" - || opt_key == "top_shell_layers" || opt_key == "top_shell_thickness" || opt_key == "minimum_sparse_infill_area" || opt_key == "sparse_infill_filament" @@ -971,9 +1002,17 @@ void PrintObject::detect_surfaces_type() [this, region_id, interface_shells, &surfaces_new](const tbb::blocked_range& range) { // If we have soluble support material, don't bridge. The overhang will be squished against a soluble layer separating // the support from the print. - SurfaceType surface_type_bottom_other = - (this->has_support() && m_config.support_top_z_distance.value == 0) ? - stBottom : stBottomBridge; + // BBS: the above logic only applys for normal(auto) support. Complete logic: + // 1. has support, top z distance=0 (soluble material), auto support + // 2. for normal(auto), bridge_no_support is off + // 3. for tree(auto), interface top layers=0, max bridge length=0, support_critical_regions_only=false (only in this way the bridge is fully supported) + bool bottom_is_fully_supported = this->has_support() && m_config.support_top_z_distance.value == 0 && is_auto(m_config.support_type.value); + if (m_config.support_type.value == stNormalAuto) + bottom_is_fully_supported &= !m_config.bridge_no_support.value; + else if (m_config.support_type.value == stTreeAuto) { + bottom_is_fully_supported &= (m_config.support_interface_top_layers.value > 0 && m_config.max_bridge_length.value == 0 && m_config.support_critical_regions_only.value==false); + } + SurfaceType surface_type_bottom_other = bottom_is_fully_supported ? stBottom : stBottomBridge; for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) { m_print->throw_if_canceled(); // BOOST_LOG_TRIVIAL(trace) << "Detecting solid surfaces for region " << region_id << " and layer " << layer->print_z; @@ -2389,7 +2428,7 @@ void PrintObject::_generate_support_material() support_material.generate(*this); TreeSupport tree_support(*this, m_slicing_params); - tree_support.generate_support_areas(); + tree_support.generate(); } // BBS @@ -2545,6 +2584,7 @@ template void PrintObject::remove_bridges_from_contacts( SupportNecessaryType PrintObject::is_support_necessary() { +#if 0 static const double super_overhang_area_threshold = SQ(scale_(5.0)); double threshold_rad = (m_config.support_threshold_angle.value < EPSILON ? 30 : m_config.support_threshold_angle.value + 1) * M_PI / 180.; @@ -2627,7 +2667,16 @@ SupportNecessaryType PrintObject::is_support_necessary() if (!exceed_overhang.empty()) return LargeOverhang; } - +#else + TreeSupport tree_support(*this, m_slicing_params); + tree_support.support_type = SupportType::stTreeAuto; // need to set support type to fully utilize the power of feature detection + tree_support.detect_overhangs(); + this->clear_support_layers(); + if (tree_support.has_sharp_tails) + return SharpTail; + else if (tree_support.has_cantilever) + return LargeOverhang; +#endif return NoNeedSupp; } @@ -2820,10 +2869,6 @@ static void project_triangles_to_slabs(ConstLayerPtrsAdaptor layers, const index void PrintObject::project_and_append_custom_facets( bool seam, EnforcerBlockerType type, std::vector& out) const { - // BBS: Approve adding enforcer support on vertical faces - SlabSlicingConfig config; - config.isVertical = type == EnforcerBlockerType::ENFORCER ? true : false; - for (const ModelVolume* mv : this->model_object()->volumes) if (mv->is_model_part()) { const indexed_triangle_set custom_facets = seam @@ -2837,7 +2882,7 @@ void PrintObject::project_and_append_custom_facets( else { std::vector projected; // Support blockers or enforcers. Project downward facing painted areas upwards to their respective slicing plane. - slice_mesh_slabs(custom_facets, zs_from_layers(this->layers()), this->trafo_centered() * mv->get_matrix(), nullptr, &projected, [](){}, config); + slice_mesh_slabs(custom_facets, zs_from_layers(this->layers()), this->trafo_centered() * mv->get_matrix(), nullptr, &projected, [](){}); // Merge these projections with the output, layer by layer. assert(! projected.empty()); assert(out.empty() || out.size() == projected.size()); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 5fc7df89c5..79ebd09790 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -458,6 +458,151 @@ static std::vector> slices_to_regions( return slices_by_region; } +//BBS: justify whether a volume is connected to another one +bool doesVolumeIntersect(VolumeSlices& vs1, VolumeSlices& vs2) +{ + if (vs1.volume_id == vs2.volume_id) return true; + if (vs1.slices.size() != vs2.slices.size()) return false; + + for (int i = 0; i != vs1.slices.size(); ++i) { + + if (vs1.slices[i].empty()) continue; + if (!vs2.slices[i].empty() && !intersection_ex(vs1.slices[i], vs2.slices[i]).empty()) return true; + if (i + 1 != vs2.slices.size() && !vs2.slices[i + 1].empty()) { + if (!intersection_ex(vs1.slices[i], vs2.slices[i + 1]).empty()) return true; + } + if (i - 1 >= 0 && !vs2.slices[i - 1].empty()) { + if (!intersection_ex(vs1.slices[i], vs2.slices[i - 1]).empty()) return true; + } + } + return false; +} + +//BBS: grouping the volumes of an object according to their connection relationship +bool groupingVolumes(std::vector objSliceByVolume, std::vector& groups, double resolution, int firstLayerReplacedBy) +{ + std::vector groupIndex(objSliceByVolume.size(), -1); + double offsetValue = 0.05 / SCALING_FACTOR; + + for (int i = 0; i != objSliceByVolume.size(); ++i) { + for (int j = 0; j != objSliceByVolume[i].slices.size(); ++j) { + objSliceByVolume[i].slices[j] = offset_ex(objSliceByVolume[i].slices[j], offsetValue); + for (ExPolygon& poly_ex : objSliceByVolume[i].slices[j]) + poly_ex.douglas_peucker(resolution); + } + } + + for (int i = 0; i != objSliceByVolume.size(); ++i) { + if (groupIndex[i] < 0) { + groupIndex[i] = i; + } + for (int j = i + 1; j != objSliceByVolume.size(); ++j) { + if (doesVolumeIntersect(objSliceByVolume[i], objSliceByVolume[j])) { + if (groupIndex[j] < 0) groupIndex[j] = groupIndex[i]; + if (groupIndex[j] != groupIndex[i]) { + int retain = std::min(groupIndex[i], groupIndex[j]); + int cover = std::max(groupIndex[i], groupIndex[j]); + for (int k = 0; k != objSliceByVolume.size(); ++k) { + if (groupIndex[k] == cover) groupIndex[k] = retain; + } + } + } + + } + } + + std::vector groupVector{}; + for (int gi : groupIndex) { + bool exist = false; + for (int gv : groupVector) { + if (gv == gi) { + exist = true; + break; + } + } + if (!exist) groupVector.push_back(gi); + } + + // group volumes and their slices according to the grouping Vector + groups.clear(); + + for (int gv : groupVector) { + groupedVolumeSlices gvs; + gvs.groupId = gv; + for (int i = 0; i != objSliceByVolume.size(); ++i) { + if (groupIndex[i] == gv) { + gvs.volume_ids.push_back(objSliceByVolume[i].volume_id); + append(gvs.slices, objSliceByVolume[i].slices[firstLayerReplacedBy]); + } + } + + // the slices of a group should be unioned + gvs.slices = offset_ex(union_ex(gvs.slices), -offsetValue); + for (ExPolygon& poly_ex : gvs.slices) + poly_ex.douglas_peucker(resolution); + + groups.push_back(gvs); + } + return true; +} + +//BBS: filter the members of "objSliceByVolume" such that only "model_part" are included +std::vector findPartVolumes(const std::vector& objSliceByVolume, ModelVolumePtrs model_volumes) { + std::vector outPut; + for (const auto& vs : objSliceByVolume) { + for (const auto& mv : model_volumes) { + if (vs.volume_id == mv->id() && mv->is_model_part()) outPut.push_back(vs); + } + } + return outPut; +} + +void applyNegtiveVolumes(ModelVolumePtrs model_volumes, const std::vector& objSliceByVolume, std::vector& groups, double resolution) { + ExPolygons negTotal; + for (const auto& vs : objSliceByVolume) { + for (const auto& mv : model_volumes) { + if (vs.volume_id == mv->id() && mv->is_negative_volume()) { + if (vs.slices.size() > 0) { + append(negTotal, vs.slices.front()); + } + } + } + } + + for (auto& g : groups) { + g.slices = diff_ex(g.slices, negTotal); + for (ExPolygon& poly_ex : g.slices) + poly_ex.douglas_peucker(resolution); + } +} + +void reGroupingLayerPolygons(std::vector& gvss, ExPolygons eps) +{ + std::vector epsIndex; + epsIndex.resize(eps.size(), -1); + for (int ie = 0; ie != eps.size(); ie++) { + for (int iv = 0; iv != gvss.size(); iv++) { + auto clipedExPolys = diff_ex(eps[ie], gvss[iv].slices); + double area = 0; + for (const auto& ce : clipedExPolys) { + area += ce.area(); + } + if (eps[ie].area() > 0 && area / eps[ie].area() < 0.3) { + epsIndex[ie] = iv; + break; + } + } + } + + for (int iv = 0; iv != gvss.size(); iv++) + gvss[iv].slices.clear(); + + for (int ie = 0; ie != eps.size(); ie++) { + if (epsIndex[ie] >= 0) + gvss[epsIndex[ie]].slices.push_back(eps[ie]); + } +} + std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std::function &throw_if_canceled) { std::string error_msg;//BBS @@ -567,6 +712,21 @@ std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std //BBS if(error_msg.empty() && !buggy_layers.empty()) error_msg = L("The model has too many empty layers."); + + // BBS: first layer slices are sorted by volume group, if the first layer is empty and replaced by the 2nd layer +// the later will be stored in "object->firstLayerObjGroupsMod()" + int firstLayerReplacedBy = 0; + if (!buggy_layers.empty() && buggy_layers.front() == 0) + firstLayerReplacedBy = 1; + + const auto scaled_resolution = scaled(object->print()->config().resolution.value); + auto partsObjSliceByVolume = findPartVolumes(object->firstLayerObjSliceMod(), object->model_object()->volumes); + groupingVolumes(partsObjSliceByVolume, object->firstLayerObjGroupsMod(), scaled_resolution, firstLayerReplacedBy); + applyNegtiveVolumes(object->model_object()->volumes, object->firstLayerObjSliceMod(), object->firstLayerObjGroupsMod(), scaled_resolution); + + // BBS: the actual first layer slices stored in layers are re-sorted by volume group and will be used to generate brim + reGroupingLayerPolygons(object->firstLayerObjGroupsMod(), layers.front()->lslices); + return error_msg; } @@ -616,7 +776,7 @@ void PrintObject::slice() } }); if (m_layers.empty()) - throw Slic3r::SlicingError("No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n"); + throw Slic3r::SlicingError(L("No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n")); // BBS this->set_done(posSlice); @@ -749,127 +909,7 @@ static inline void apply_mm_segmentation(PrintObject &print_object, ThrowOnCance }); } -//BBS: justify whether a volume is connected to another one -bool doesVolumeIntersect(VolumeSlices& vs1, VolumeSlices& vs2) -{ - if (vs1.volume_id == vs2.volume_id) return true; - if (vs1.slices.size() != vs2.slices.size()) return false; - for (int i = 0; i != vs1.slices.size(); ++i) { - - if (vs1.slices[i].empty()) continue; - if (!vs2.slices[i].empty() && !intersection_ex(vs1.slices[i], vs2.slices[i]).empty()) return true; - if (i + 1 != vs2.slices.size() && !vs2.slices[i + 1].empty()) { - if (!intersection_ex(vs1.slices[i], vs2.slices[i + 1]).empty()) return true; - } - if (i - 1 >= 0 && !vs2.slices[i - 1].empty()) { - if (!intersection_ex(vs1.slices[i], vs2.slices[i - 1]).empty()) return true; - } - } - return false; -} - -//BBS: grouping the volumes of an object according to their connection relationship -bool groupingVolumes(std::vector objSliceByVolume, std::vector& groups, double resolution) -{ - int existGroups = 0; - std::vector groupIndex(objSliceByVolume.size(), -1); - - double offsetValue = 0.15 / SCALING_FACTOR; - - for (int i = 0; i != objSliceByVolume.size(); ++i) { - for (int j = 0; j != objSliceByVolume[i].slices.size(); ++j) { - objSliceByVolume[i].slices[j] = offset_ex(objSliceByVolume[i].slices[j], offsetValue); - for (ExPolygon& poly_ex : objSliceByVolume[i].slices[j]) - poly_ex.douglas_peucker(resolution); - } - } - - for (int i = 0; i != objSliceByVolume.size(); ++i) { - if (groupIndex[i] < 0) { - groupIndex[i] = i; - ++existGroups; - } - for (int j = i + 1; j != objSliceByVolume.size(); ++j) { - if (doesVolumeIntersect(objSliceByVolume[i], objSliceByVolume[j])) { - if (groupIndex[j] < 0) groupIndex[j] = groupIndex[i]; - if (groupIndex[j] != groupIndex[i]) { - int retain = std::min(groupIndex[i], groupIndex[j]); - int cover = std::max(groupIndex[i], groupIndex[j]); - for (int k = 0; k != objSliceByVolume.size(); ++k) { - if (groupIndex[k] == cover) groupIndex[k] = retain; - } - --existGroups; - } - } - - } - } - - std::vector groupVector{}; - for (int gi : groupIndex) { - bool exist = false; - for (int gv : groupVector) { - if (gv == gi) { - exist = true; - break; - } - } - if (!exist) groupVector.push_back(gi); - } - - // group volumes and their slices according to the grouping Vector - groups.clear(); - - for (int gv : groupVector) { - groupedVolumeSlices gvs; - gvs.groupId = gv; - for (int i = 0; i != objSliceByVolume.size(); ++i) { - if (groupIndex[i] == gv) { - gvs.volume_ids.push_back(objSliceByVolume[i].volume_id); - append(gvs.slices, objSliceByVolume[i].slices.front()); - } - } - - // the slices of a group should be unioned - gvs.slices = offset_ex(union_ex(gvs.slices), -offsetValue); - for (ExPolygon& poly_ex : gvs.slices) - poly_ex.douglas_peucker(resolution); - - groups.push_back(gvs); - } - return true; -} - -//BBS: filter the members of "objSliceByVolume" such that only "model_part" are included -std::vector findPartVolumes(const std::vector& objSliceByVolume, ModelVolumePtrs model_volumes) { - std::vector outPut; - for (const auto& vs : objSliceByVolume) { - for (const auto& mv : model_volumes) { - if (vs.volume_id == mv->id() && mv->is_model_part()) outPut.push_back(vs); - } - } - return outPut; -} - -void applyNegtiveVolumes(ModelVolumePtrs model_volumes, const std::vector& objSliceByVolume, std::vector& groups, double resolution) { - ExPolygons negTotal; - for (const auto& vs : objSliceByVolume) { - for (const auto& mv : model_volumes) { - if (vs.volume_id == mv->id() && mv->is_negative_volume()) { - if (vs.slices.size() > 0) { - append(negTotal, vs.slices.front()); - } - } - } - } - - for (auto& g : groups) { - g.slices = diff_ex(g.slices, negTotal); - for (ExPolygon& poly_ex : g.slices) - poly_ex.douglas_peucker(resolution); - } -} // 1) Decides Z positions of the layers, // 2) Initializes layers and their regions // 3) Slices the object meshes @@ -897,14 +937,8 @@ void PrintObject::slice_volumes() for (const std::unique_ptr &pr : m_shared_regions->all_regions) layer->m_regions.emplace_back(new LayerRegion(layer, pr.get())); } - // BBS: first layer slices are sorted by volume - std::vector slice_zs = zs_from_layers(m_layers); - if (!slice_zs.empty()) { - firstLayerObjSliceByVolume = slice_volumes_inner( - print->config(), this->config(), this->trafo_centered(), - this->model_object()->volumes, m_shared_regions->layer_ranges, {slice_zs.front()}, throw_on_cancel_callback); - } + std::vector slice_zs = zs_from_layers(m_layers); std::vector objSliceByVolume; if (!slice_zs.empty()) { objSliceByVolume = slice_volumes_inner( @@ -913,10 +947,11 @@ void PrintObject::slice_volumes() } //BBS: "model_part" volumes are grouded according to their connections - const auto scaled_resolution = scaled(print->config().resolution.value); - std::vector objSliceByVolumeParts = findPartVolumes(objSliceByVolume, this->model_object()->volumes); - groupingVolumes(objSliceByVolumeParts, firstLayerObjSliceByGroups, scaled_resolution); - applyNegtiveVolumes(this->model_object()->volumes, objSliceByVolume, firstLayerObjSliceByGroups, scaled_resolution); + //const auto scaled_resolution = scaled(print->config().resolution.value); + //firstLayerObjSliceByVolume = findPartVolumes(objSliceByVolume, this->model_object()->volumes); + //groupingVolumes(objSliceByVolumeParts, firstLayerObjSliceByGroups, scaled_resolution); + //applyNegtiveVolumes(this->model_object()->volumes, objSliceByVolume, firstLayerObjSliceByGroups, scaled_resolution); + firstLayerObjSliceByVolume = objSliceByVolume; std::vector> region_slices = slices_to_regions(print->config(), *this, this->model_object()->volumes, *m_shared_regions, slice_zs, @@ -949,10 +984,10 @@ void PrintObject::slice_volumes() // If XY Size compensation is also enabled, notify the user that XY Size compensation // would not be used because the object is multi-material painted. if (m_config.xy_hole_compensation.value != 0.f || m_config.xy_contour_compensation.value != 0.f) { - //this->active_step_add_warning( - // PrintStateBase::WarningLevel::CRITICAL, - // L("An object has enabled XY Size compensation which will not be used because it is also multi-material painted.\nXY Size " - // "compensation cannot be combined with multi-material painting.")); + this->active_step_add_warning( + PrintStateBase::WarningLevel::CRITICAL, + L("An object's XY size compensation will not be used because it is also color-painted.\nXY Size " + "compensation can not be combined with color-painting.")); BOOST_LOG_TRIVIAL(info) << "xy compensation will not work for object " << this->model_object()->name << " for multi filament."; } diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index e40040fa05..dc86831d64 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1482,7 +1482,7 @@ static const double length_thresh_well_supported = scale_(6); // min: 6mm static const double area_thresh_well_supported = SQ(length_thresh_well_supported); // min: 6x6=36mm^2 static const double sharp_tail_xy_gap = 0.2f; static const double no_overlap_xy_gap = 0.2f; -static const double sharp_tail_max_support_height = 8.f; +static const double sharp_tail_max_support_height = 16.f; // Tuple: overhang_polygons, contact_polygons, enforcer_polygons, no_interface_offset // no_interface_offset: minimum of external perimeter widths @@ -1598,7 +1598,7 @@ static inline Polygons detect_overhangs( // Check whether this is a sharp tail region. // Should use lower_layer_expolys without any offset. Otherwise, it may missing sharp tails near the main body. if (intersection_ex({ expoly }, lower_layer_expolys).empty()) { - is_sharp_tail = expoly.area() < area_thresh_well_supported; + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*fw).empty(); break; } @@ -1646,7 +1646,8 @@ static inline Polygons detect_overhangs( // 2.4 if the area grows fast than threshold, it get connected to other part or // it has a sharp slop and will be auto supported. ExPolygons new_overhang_expolys = diff_ex({ expoly }, lower_layer_sharptails); - if (!offset_ex(new_overhang_expolys, -5.0 * fw).empty()) { + Point size_diff = get_extents(new_overhang_expolys).size() - get_extents(lower_layer_sharptails).size(); + if (size_diff.both_comp(Point(scale_(5),scale_(5)),">") || !offset_ex(new_overhang_expolys, -5.0 * fw).empty()) { is_sharp_tail = false; break; } diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 138ce8735b..44068c2e39 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -27,7 +27,7 @@ #define TAU (2.0 * M_PI) #define NO_INDEX (std::numeric_limits::max()) -//#define SUPPORT_TREE_DEBUG_TO_SVG +// #define SUPPORT_TREE_DEBUG_TO_SVG namespace Slic3r { @@ -285,7 +285,7 @@ static void draw_layer_mst svg.draw(spanning_tree.vertices(), "black", coord_t(scale_(0.1))); } -static void draw_two_overhangs_to_svg(TreeSupportLayer* ts_layer, const ExPolygons& overhangs1, const ExPolygons& overhangs2) +static void draw_two_overhangs_to_svg(SupportLayer* ts_layer, const ExPolygons& overhangs1, const ExPolygons& overhangs2) { if (overhangs1.empty() && overhangs2.empty()) return; @@ -300,7 +300,7 @@ static void draw_two_overhangs_to_svg(TreeSupportLayer* ts_layer, const ExPolygo svg.draw(union_ex(overhangs2), "red"); } -static void draw_polylines(TreeSupportLayer* ts_layer, Polylines& polylines) +static void draw_polylines(SupportLayer* ts_layer, Polylines& polylines) { if (polylines.empty()) return; @@ -698,32 +698,41 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p ipConcentric : (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; - is_slim = is_tree_slim(m_object_config->support_type, m_object_config->support_style); - MAX_BRANCH_RADIUS = is_slim ? 5.0 : 10.0; + support_type = m_object_config->support_type; + is_slim = is_tree_slim(support_type, m_object_config->support_style); + MAX_BRANCH_RADIUS = 10.0; tree_support_branch_diameter_angle = 5.0;//is_slim ? 10.0 : 5.0; // by default tree support needs no infill, unless it's tree hybrid which contains normal nodes. with_infill = support_pattern != smpNone && support_pattern != smpDefault; + const PrintConfig& print_config = m_object->print()->config(); + m_machine_border.contour = get_bed_shape_with_excluded_area(print_config); + Vec3d plate_offset = m_object->print()->get_plate_origin(); + // align with the centered object in current plate (may not be the 1st plate, so need to add the plate offset) + m_machine_border.translate(Point(scale_(plate_offset(0)), scale_(plate_offset(1))) - m_object->instances().front().shift); +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + SVG svg("SVG/machine_boarder.svg", m_object->bounding_box()); + if (svg.is_opened()) svg.draw(m_machine_border, "yellow"); +#endif } #define SUPPORT_SURFACES_OFFSET_PARAMETERS ClipperLib::jtSquare, 0. -void TreeSupport::detect_object_overhangs() +void TreeSupport::detect_overhangs() { // overhangs are already detected - if (m_object->tree_support_layer_count() >= m_object->layer_count()) + if (m_object->support_layer_count() >= m_object->layer_count()) return; // Clear and create Tree Support Layers - m_object->clear_tree_support_layers(); + m_object->clear_support_layers(); m_object->clear_tree_support_preview_cache(); create_tree_support_layers(); - m_ts_data = m_object->alloc_tree_support_preview_cache(); - m_ts_data->is_slim = is_slim; + const PrintObjectConfig& config = m_object->config(); - SupportType stype = config.support_type.value; - const coordf_t radius_sample_resolution = m_ts_data->m_radius_sample_resolution; + SupportType stype = support_type; + const coordf_t radius_sample_resolution = g_config_tree_support_collision_resolution; const coordf_t extrusion_width = config.line_width.value; const coordf_t extrusion_width_scaled = scale_(extrusion_width); const coordf_t max_bridge_length = scale_(config.max_bridge_length.value); @@ -732,7 +741,7 @@ void TreeSupport::detect_object_overhangs() const int enforce_support_layers = config.enforce_support_layers.value; const double area_thresh_well_supported = SQ(scale_(6)); const double length_thresh_well_supported = scale_(6); - static const double sharp_tail_max_support_height = 8.f; + static const double sharp_tail_max_support_height = 16.f; // a region is considered well supported if the number of layers below it exceeds this threshold const int thresh_layers_below = 10 / config.layer_height; double obj_height = m_object->size().z(); @@ -922,9 +931,9 @@ void TreeSupport::detect_object_overhangs() float accum_height = layer->height; do { // 1. nothing below - // check whether this is a sharp tail region + // this is a sharp tail region if it's small but non-ignorable if (intersection_ex({expoly}, lower_polys).empty()) { - is_sharp_tail = expoly.area() < area_thresh_well_supported; + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*extrusion_width_scaled).empty(); break; } @@ -968,7 +977,7 @@ void TreeSupport::detect_object_overhangs() // 2.4 if the area grows fast than threshold, it get connected to other part or // it has a sharp slop and will be auto supported. ExPolygons new_overhang_expolys = diff_ex({expoly}, lower_layer_sharptails); - if (!offset_ex(new_overhang_expolys, -5.0 * extrusion_width_scaled).empty()) { + if ((get_extents(new_overhang_expolys).size()-get_extents(lower_layer_sharptails).size()).both_comp(Point(scale_(5),scale_(5)),">") || !offset_ex(new_overhang_expolys, -5.0 * extrusion_width_scaled).empty()) { is_sharp_tail = false; break; } @@ -982,6 +991,9 @@ void TreeSupport::detect_object_overhangs() layer->sharp_tails.push_back(expoly); layer->sharp_tails_height.insert({ &expoly, accum_height }); append(overhang_areas, overhang); + + if (!overhang.empty()) + has_sharp_tails = true; #ifdef SUPPORT_TREE_DEBUG_TO_SVG SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); if (svg.is_opened()) svg.draw(overhang, "yellow"); @@ -992,11 +1004,13 @@ void TreeSupport::detect_object_overhangs() } - if (bridge_no_support && overhang_areas.size()>0) { - m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, true); + if (max_bridge_length > 0 && overhang_areas.size()>0) { + // do not break bridge for normal part in TreeHybrid + bool break_bridge = !(config.support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); + m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, break_bridge); } - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); for (ExPolygon& poly : overhang_areas) { if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) ts_layer->overhang_areas.emplace_back(poly); @@ -1146,9 +1160,9 @@ void TreeSupport::detect_object_overhangs() if (m_object->print()->canceled()) break; - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); + auto layer = m_object->get_layer(layer_nr); if (support_critical_regions_only) { - auto layer = m_object->get_layer(layer_nr); auto lower_layer = layer->lower_layer; if (lower_layer == nullptr) ts_layer->overhang_areas = layer->sharp_tails; @@ -1164,7 +1178,7 @@ void TreeSupport::detect_object_overhangs() } for (auto &area : ts_layer->overhang_areas) { - ts_layer->overhang_types.emplace(&area, TreeSupportLayer::Detected); + ts_layer->overhang_types.emplace(&area, SupportLayer::Detected); } // enforcers if (layer_nr < enforcers.size()) { @@ -1175,15 +1189,16 @@ void TreeSupport::detect_object_overhangs() enforcer = offset(enforcer, 0.1 * extrusion_width_scaled); for (const Polygon& poly : enforcer) { ts_layer->overhang_areas.emplace_back(poly); - ts_layer->overhang_types.emplace(&ts_layer->overhang_areas.back(), TreeSupportLayer::Enforced); + ts_layer->overhang_types.emplace(&ts_layer->overhang_areas.back(), SupportLayer::Enforced); } } if (!ts_layer->overhang_areas.empty()) has_overhangs = true; + if (!layer->cantilevers.empty()) has_cantilever = true; } #ifdef SUPPORT_TREE_DEBUG_TO_SVG - for (const TreeSupportLayer* layer : m_object->tree_support_layers()) { + for (const SupportLayer* layer : m_object->support_layers()) { if (layer->overhang_areas.empty()) continue; @@ -1220,9 +1235,9 @@ void TreeSupport::create_tree_support_layers() } for (Layer *layer : m_object->layers()) { - TreeSupportLayer* ts_layer = m_object->add_tree_support_layer(layer->id(), layer->height, layer->print_z, layer->slice_z); + SupportLayer* ts_layer = m_object->add_tree_support_layer(layer->id(), layer->height, layer->print_z, layer->slice_z); if (ts_layer->id() > m_raft_layers) { - TreeSupportLayer* lower_layer = m_object->get_tree_support_layer(ts_layer->id() - 1); + SupportLayer* lower_layer = m_object->get_support_layer(ts_layer->id() - 1); lower_layer->upper_layer = ts_layer; ts_layer->lower_layer = lower_layer; } @@ -1434,7 +1449,7 @@ void TreeSupport::generate_toolpaths() const coordf_t branch_radius = object_config.tree_support_branch_diameter.value / 2; const coordf_t branch_radius_scaled = scale_(branch_radius); - if (m_object->tree_support_layers().empty()) + if (m_object->support_layers().empty()) return; // calculate fill areas for raft layers @@ -1446,8 +1461,8 @@ void TreeSupport::generate_toolpaths() } } - if (m_object->tree_support_layer_count() > m_raft_layers) { - const TreeSupportLayer *ts_layer = m_object->get_tree_support_layer(m_raft_layers); + if (m_object->support_layer_count() > m_raft_layers) { + const SupportLayer *ts_layer = m_object->get_support_layer(m_raft_layers); for (const ExPolygon expoly : ts_layer->floor_areas) raft_areas.push_back(expoly); for (const ExPolygon expoly : ts_layer->roof_areas) @@ -1462,7 +1477,7 @@ void TreeSupport::generate_toolpaths() if (m_raft_layers > 0) { ExtrusionRole raft_contour_er = m_slicing_params.base_raft_layers > 0 ? erSupportMaterial : erSupportMaterialInterface; - TreeSupportLayer *ts_layer = m_object->tree_support_layers().front(); + SupportLayer *ts_layer = m_object->support_layers().front(); Flow flow = m_object->print()->brim_flow(); Polygons loops; @@ -1476,7 +1491,7 @@ void TreeSupport::generate_toolpaths() } for (size_t layer_nr = 0; layer_nr < m_slicing_params.base_raft_layers; layer_nr++) { - TreeSupportLayer *ts_layer = m_object->get_tree_support_layer(layer_nr); + SupportLayer *ts_layer = m_object->get_support_layer(layer_nr); coordf_t expand_offset = (layer_nr == 0 ? 0. : -1.); Flow support_flow = layer_nr == 0 ? m_object->print()->brim_flow() : Flow(support_extrusion_width, ts_layer->height, nozzle_diameter); @@ -1496,7 +1511,7 @@ void TreeSupport::generate_toolpaths() layer_nr < m_slicing_params.base_raft_layers + m_slicing_params.interface_raft_layers; layer_nr++) { - TreeSupportLayer *ts_layer = m_object->get_tree_support_layer(layer_nr); + SupportLayer *ts_layer = m_object->get_support_layer(layer_nr); coordf_t expand_offset = (layer_nr == 0 ? 0. : -1.); Flow support_flow(support_extrusion_width, ts_layer->height, nozzle_diameter); @@ -1528,7 +1543,7 @@ void TreeSupport::generate_toolpaths() // generate tree support tool paths tbb::parallel_for( - tbb::blocked_range(m_raft_layers, m_object->tree_support_layer_count()), + tbb::blocked_range(m_raft_layers, m_object->support_layer_count()), [&](const tbb::blocked_range& range) { for (size_t layer_id = range.begin(); layer_id < range.end(); layer_id++) { @@ -1537,7 +1552,7 @@ void TreeSupport::generate_toolpaths() m_object->print()->set_status(70, (boost::format(_L("Support: generate toolpath at layer %d")) % layer_id).str()); - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_id); + SupportLayer* ts_layer = m_object->get_support_layer(layer_id); Flow support_flow(support_extrusion_width, ts_layer->height, nozzle_diameter); coordf_t support_spacing = object_config.support_base_pattern_spacing.value + support_flow.spacing(); coordf_t support_density = std::min(1., support_flow.spacing() / support_spacing); @@ -1548,14 +1563,14 @@ void TreeSupport::generate_toolpaths() ExPolygon& poly = *area_group.area; ExPolygons polys; FillParams fill_params; - if (area_group.type != TreeSupportLayer::BaseType) { + if (area_group.type != SupportLayer::BaseType) { // interface if (layer_id == 0) { Flow flow = m_raft_layers == 0 ? m_object->print()->brim_flow() : support_flow; make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, wall_count, flow, - area_group.type == TreeSupportLayer::RoofType ? erSupportMaterialInterface : erSupportMaterial); + area_group.type == SupportLayer::RoofType ? erSupportMaterialInterface : erSupportMaterial); polys = std::move(offset_ex(poly, -flow.scaled_spacing())); - } else if (area_group.type == TreeSupportLayer::Roof1stLayer) { + } else if (area_group.type == SupportLayer::Roof1stLayer) { polys = std::move(offset_ex(poly, 0.5*support_flow.scaled_width())); } else { @@ -1564,7 +1579,7 @@ void TreeSupport::generate_toolpaths() fill_params.density = interface_density; fill_params.dont_adjust = true; } - if (area_group.type == TreeSupportLayer::Roof1stLayer) { + if (area_group.type == SupportLayer::Roof1stLayer) { // roof_1st_layer fill_params.density = interface_density; // Note: spacing means the separation between two lines as if they are tightly extruded @@ -1578,13 +1593,13 @@ void TreeSupport::generate_toolpaths() ts_layer->support_fills.entities.push_back(temp_support_fills); else delete temp_support_fills; - } else if (area_group.type == TreeSupportLayer::FloorType) { + } else if (area_group.type == SupportLayer::FloorType) { // floor_areas fill_params.density = bottom_interface_density; filler_interface->spacing = m_support_material_interface_flow.spacing(); fill_expolygons_generate_paths(ts_layer->support_fills.entities, std::move(polys), filler_interface.get(), fill_params, erSupportMaterialInterface, m_support_material_interface_flow); - } else if (area_group.type == TreeSupportLayer::RoofType) { + } else if (area_group.type == SupportLayer::RoofType) { // roof_areas fill_params.density = interface_density; filler_interface->spacing = m_support_material_interface_flow.spacing(); @@ -1886,7 +1901,7 @@ Polygons TreeSupport::contact_nodes_to_polygon(const std::vector& contact } -void TreeSupport::generate_support_areas() +void TreeSupport::generate() { bool tree_support_enable = m_object_config->enable_support.value && is_tree(m_object_config->support_type.value); if (!tree_support_enable) @@ -1899,9 +1914,14 @@ void TreeSupport::generate_support_areas() // Generate overhang areas profiler.stage_start(STAGE_DETECT_OVERHANGS); m_object->print()->set_status(55, _L("Support: detect overhangs")); - detect_object_overhangs(); + detect_overhangs(); profiler.stage_finish(STAGE_DETECT_OVERHANGS); + if (!has_overhangs) return; + + m_ts_data = m_object->alloc_tree_support_preview_cache(); + m_ts_data->is_slim = is_slim; + // Generate contact points of tree support profiler.stage_start(STAGE_GENERATE_CONTACT_NODES); m_object->print()->set_status(56, _L("Support: generate contact points")); @@ -2071,7 +2091,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no break; const std::vector& curr_layer_nodes = contact_nodes[layer_nr]; - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); assert(ts_layer != nullptr); // skip if current layer has no points. This fixes potential crash in get_collision (see jira BBL001-355) @@ -2201,18 +2221,20 @@ void TreeSupport::draw_circles(const std::vector>& contact_no //roof_areas = std::move(diff_ex(roof_areas, avoid_region_interface)); //roof_1st_layer = std::move(diff_ex(roof_1st_layer, avoid_region_interface)); roof_areas = avoid_object_remove_extra_small_parts(roof_areas, avoid_region_interface); + roof_areas = intersection_ex(roof_areas, m_machine_border); roof_1st_layer = avoid_object_remove_extra_small_parts(roof_1st_layer, avoid_region_interface); // roof_1st_layer and roof_areas may intersect, so need to subtract roof_areas from roof_1st_layer roof_1st_layer = std::move(diff_ex(roof_1st_layer, roof_areas)); + roof_1st_layer = intersection_ex(roof_1st_layer, m_machine_border); // let supports touch objects when brim is on auto avoid_region = m_ts_data->get_collision((layer_nr == 0 && has_brim) ? config.brim_object_gap : m_ts_data->m_xy_distance, layer_nr); - // base_areas = std::move(diff_ex(base_areas, avoid_region)); base_areas = avoid_object_remove_extra_small_parts(base_areas, avoid_region); base_areas = std::move(diff_ex(base_areas, roof_areas)); base_areas = std::move(diff_ex(base_areas, roof_1st_layer)); base_areas = std::move(diff_ex(base_areas, roof_gap_areas)); + base_areas = intersection_ex(base_areas, m_machine_border); if (SQUARE_SUPPORT) { // simplify support contours @@ -2247,10 +2269,10 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } } auto &area_groups = ts_layer->area_groups; - for (auto &area : ts_layer->base_areas) area_groups.emplace_back(&area, TreeSupportLayer::BaseType, max_layers_above_base); - for (auto &area : ts_layer->roof_areas) area_groups.emplace_back(&area, TreeSupportLayer::RoofType, max_layers_above_roof); - for (auto &area : ts_layer->floor_areas) area_groups.emplace_back(&area, TreeSupportLayer::FloorType, 10000); - for (auto &area : ts_layer->roof_1st_layer) area_groups.emplace_back(&area, TreeSupportLayer::Roof1stLayer, max_layers_above_roof1); + for (auto &area : ts_layer->base_areas) area_groups.emplace_back(&area, SupportLayer::BaseType, max_layers_above_base); + for (auto &area : ts_layer->roof_areas) area_groups.emplace_back(&area, SupportLayer::RoofType, max_layers_above_roof); + for (auto &area : ts_layer->floor_areas) area_groups.emplace_back(&area, SupportLayer::FloorType, 10000); + for (auto &area : ts_layer->roof_1st_layer) area_groups.emplace_back(&area, SupportLayer::Roof1stLayer, max_layers_above_roof1); for (auto &area_group : area_groups) { auto& expoly = area_group.area; @@ -2275,7 +2297,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no for (int layer_nr = 1; layer_nr < m_object->layer_count(); layer_nr++) { if (print->canceled()) break; const std::vector& curr_layer_nodes = contact_nodes[layer_nr]; - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); assert(ts_layer != nullptr); // skip if current layer has no points. This fixes potential crash in get_collision (see jira BBL001-355) @@ -2287,10 +2309,10 @@ void TreeSupport::draw_circles(const std::vector>& contact_no int layer_nr_lower = layer_nr - 1; for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { - if (!m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; + if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } - TreeSupportLayer* lower_layer = m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers); - ExPolygons& base_areas_lower = m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers)->base_areas; + SupportLayer* lower_layer = m_object->get_support_layer(layer_nr_lower + m_raft_layers); + ExPolygons& base_areas_lower = m_object->get_support_layer(layer_nr_lower + m_raft_layers)->base_areas; ExPolygons overhang; @@ -2324,7 +2346,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no printZ_to_lightninglayer[lower_layer->print_z] = overhangs.size() - 1; #ifdef SUPPORT_TREE_DEBUG_TO_SVG - draw_two_overhangs_to_svg(m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers), base_areas_lower, to_expolygons(overhangs.back())); + draw_two_overhangs_to_svg(m_object->get_support_layer(layer_nr_lower + m_raft_layers), base_areas_lower, to_expolygons(overhangs.back())); #endif } @@ -2364,7 +2386,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no m_object->print()->set_status(66, (boost::format(_L("Support: fix holes at layer %d")) % layer_nr).str()); const std::vector& curr_layer_nodes = contact_nodes[layer_nr]; - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); assert(ts_layer != nullptr); // skip if current layer has no points. This fixes potential crash in get_collision (see jira BBL001-355) @@ -2374,18 +2396,18 @@ void TreeSupport::draw_circles(const std::vector>& contact_no int layer_nr_lower = layer_nr - 1; for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { - if (!m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; + if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } if (layer_nr_lower < 0) continue; - auto& area_groups_lower = m_object->get_tree_support_layer(layer_nr_lower + m_raft_layers)->area_groups; + auto& area_groups_lower = m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups; for (const auto& area_group : ts_layer->area_groups) { - if (area_group.type != TreeSupportLayer::BaseType) continue; + if (area_group.type != SupportLayer::BaseType) continue; const auto& area = area_group.area; for (const auto& hole : area->holes) { // auto hole_bbox = get_extents(hole).polygon(); for (auto& area_group_lower : area_groups_lower) { - if (area_group.type != TreeSupportLayer::BaseType) continue; + if (area_group.type != SupportLayer::BaseType) continue; auto& base_area_lower = *area_group_lower.area; Point pt_on_poly, pt_on_expoly, pt_far_on_poly; // if a hole doesn't intersect with lower layer's contours, add a hole to lower layer and move it slightly to the contour @@ -2450,8 +2472,8 @@ void TreeSupport::draw_circles(const std::vector>& contact_no #endif #ifdef SUPPORT_TREE_DEBUG_TO_SVG - for (int layer_nr = m_object->layer_count() - 1; layer_nr > 0; layer_nr--) { - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + for (int layer_nr = m_object->layer_count() - 1; layer_nr >= 0; layer_nr--) { + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); ExPolygons& base_areas = ts_layer->base_areas; ExPolygons& roof_areas = ts_layer->roof_areas; ExPolygons& roof_1st_layer = ts_layer->roof_1st_layer; @@ -2466,7 +2488,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no draw_circles_layer_out.open("./SVG/layer_heights_draw_circles.txt"); if (draw_circles_layer_out.is_open()) { for (int layer_nr = m_object->layer_count() - 1; layer_nr > 0; layer_nr--) { - TreeSupportLayer* ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); ExPolygons& base_areas = ts_layer->base_areas; ExPolygons& roof_areas = ts_layer->roof_areas; ExPolygons& roof_1st_layer = ts_layer->roof_1st_layer; @@ -2477,8 +2499,8 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } #endif // SUPPORT_TREE_DEBUG_TO_SVG - TreeSupportLayerPtrs& ts_layers = m_object->tree_support_layers(); - auto iter = std::remove_if(ts_layers.begin(), ts_layers.end(), [](TreeSupportLayer* ts_layer) { return ts_layer->height < EPSILON; }); + SupportLayerPtrs& ts_layers = m_object->support_layers(); + auto iter = std::remove_if(ts_layers.begin(), ts_layers.end(), [](SupportLayer* ts_layer) { return ts_layer->height < EPSILON; }); ts_layers.erase(iter, ts_layers.end()); for (int layer_nr = 0; layer_nr < ts_layers.size(); layer_nr++) { ts_layers[layer_nr]->upper_layer = layer_nr != ts_layers.size() - 1 ? ts_layers[layer_nr + 1] : nullptr; @@ -2527,7 +2549,8 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) return move_dist; }; - std::vector> layer_heights = plan_layer_heights(contact_nodes); + m_ts_data->layer_heights = plan_layer_heights(contact_nodes); + std::vector &layer_heights = m_ts_data->layer_heights; if (layer_heights.empty()) return; std::unordered_set to_free_node_set; @@ -2547,9 +2570,10 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) for (Node *p_node : contact_nodes[layer_nr]) { layer_node_dist.emplace(p_node->dist_mm_to_top); } - if (layer_nr < m_highest_overhang_layer && layer_heights[layer_nr].second>0) { - for (auto node_dist : all_layer_node_dist[layer_nr + 1]) - layer_node_dist.emplace(node_dist + layer_heights[layer_nr].second); + size_t layer_nr_next = layer_heights[layer_nr].next_layer_nr; + if (layer_nr < m_highest_overhang_layer && layer_heights[layer_nr].height>0) { + for (auto node_dist : all_layer_node_dist[layer_nr_next]) + layer_node_dist.emplace(node_dist + layer_heights[layer_nr].height); } for (auto node_dist : layer_node_dist) { layer_radius.emplace(calc_branch_radius(branch_radius, node_dist, diameter_angle_scale_factor)); @@ -2577,14 +2601,12 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (layer_contact_nodes.empty()) continue; - int layer_nr_next = layer_nr - 1; - while (layer_nr_next>=0 && layer_heights[layer_nr_next].second < EPSILON) - layer_nr_next--; - coordf_t print_z_next = layer_heights[layer_nr_next].first; - coordf_t height_next = layer_heights[layer_nr_next].second; + int layer_nr_next = layer_heights[layer_nr].next_layer_nr; + coordf_t print_z_next = layer_heights[layer_nr_next].print_z; + coordf_t height_next = layer_heights[layer_nr_next].height; std::deque> unsupported_branch_leaves; // All nodes that are leaves on this layer that would result in unsupported ('mid-air') branches. - const Layer* ts_layer = m_object->get_tree_support_layer(layer_nr); + const Layer* ts_layer = m_object->get_support_layer(layer_nr); m_object->print()->set_status(60, (boost::format(_L("Support: propagate branches at layer %d")) % layer_nr).str()); @@ -2620,7 +2642,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (node.distance_to_top < 0) { // gap nodes do not merge or move - Node* next_node = new Node(p_node->position, p_node->distance_to_top + 1, p_node->skin_direction, p_node->support_roof_layers_below - 1, p_node->to_buildplate, p_node, + Node* next_node = new Node(p_node->position, p_node->distance_to_top + 1, layer_nr_next, p_node->support_roof_layers_below - 1, p_node->to_buildplate, p_node, print_z_next, height_next); get_max_move_dist(next_node); next_node->is_merged = false; @@ -2755,8 +2777,8 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) parent = neighbour->parent; const bool to_buildplate = !is_inside_ex(m_ts_data->get_avoidance(0, layer_nr_next), next_position); - Node * next_node = new Node(next_position, new_distance_to_top, node.skin_direction, new_support_roof_layers_below, to_buildplate, p_node, - layer_heights[layer_nr_next].first, layer_heights[layer_nr_next].second, new_dist_mm_to_top); + Node * next_node = new Node(next_position, new_distance_to_top, layer_nr_next, new_support_roof_layers_below, to_buildplate, p_node, + print_z_next, height_next, new_dist_mm_to_top); next_node->movement = next_position - node.position; get_max_move_dist(next_node); next_node->is_merged = true; @@ -2801,7 +2823,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (node.type == ePolygon) { // polygon node do not merge or move const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[layer_nr], p_node->position); - Node * next_node = new Node(p_node->position, p_node->distance_to_top + 1, p_node->skin_direction, p_node->support_roof_layers_below - 1, to_buildplate, + Node * next_node = new Node(p_node->position, p_node->distance_to_top + 1, layer_nr_next, p_node->support_roof_layers_below - 1, to_buildplate, p_node, print_z_next, height_next); next_node->max_move_dist = 0; next_node->is_merged = false; @@ -2868,13 +2890,13 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (is_line_cut_by_contour(node.position, neighbour)) continue; - if (is_slim) + if (/*is_slim*/1) sum_direction += direction * (1 / dist2_to_neighbor); else sum_direction += direction; } - if (is_slim) + if (/*is_slim*/1) move_to_neighbor_center = sum_direction; else { if (vsize2_with_unscale(sum_direction) <= max_move_distance2) { @@ -2945,7 +2967,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[layer_nr], next_layer_vertex);// !is_inside_ex(m_ts_data->get_avoidance(m_ts_data->m_xy_distance, layer_nr - 1), next_layer_vertex); - Node * next_node = new Node(next_layer_vertex, node.distance_to_top + 1, node.skin_direction, node.support_roof_layers_below - 1, to_buildplate, p_node, + Node * next_node = new Node(next_layer_vertex, node.distance_to_top + 1, layer_nr_next, node.support_roof_layers_below - 1, to_buildplate, p_node, print_z_next, height_next); next_node->movement = movement; get_max_move_dist(next_node); @@ -2974,12 +2996,17 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) { const auto& entry = unsupported_branch_leaves.back(); Node* i_node = entry.second; - for (size_t i_layer = entry.first; i_node != nullptr; ++i_layer, i_node = i_node->parent) + for (; i_node != nullptr; i_node = i_node->parent) { + size_t i_layer = i_node->obj_layer_nr; std::vector::iterator to_erase = std::find(contact_nodes[i_layer].begin(), contact_nodes[i_layer].end(), i_node); if (to_erase != contact_nodes[i_layer].end()) { - to_free_node_set.insert(*to_erase); + // update the parent-child chain + if(i_node->parent) + i_node->parent->child = i_node->child; + if(i_node->child) + i_node->child->parent = i_node->parent; contact_nodes[i_layer].erase(to_erase); to_free_node_set.insert(i_node); @@ -3191,7 +3218,7 @@ void TreeSupport::adjust_layer_heights(std::vector>& contact_ } } -std::vector> TreeSupport::plan_layer_heights(std::vector>& contact_nodes) +std::vector TreeSupport::plan_layer_heights(std::vector> &contact_nodes) { const PrintObjectConfig& config = m_object->config(); const PrintConfig & print_config = m_object->print()->config(); @@ -3205,21 +3232,19 @@ std::vector> TreeSupport::plan_layer_heights(std:: } const size_t support_roof_layers = config.support_interface_top_layers.value; const int z_distance_top_layers = round_up_divide(scale_(z_distance_top), scale_(layer_height)) + 1; - std::vector> layer_heights(contact_nodes.size(), std::pair(0.0, 0.0)); + std::vector layer_heights(contact_nodes.size()); std::vector bounds; if (!config.tree_support_adaptive_layer_height || layer_height == max_layer_height || !print_config.independent_support_layer_height) { for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { - layer_heights[layer_nr].first = m_object->get_layer(layer_nr)->print_z; - layer_heights[layer_nr].second = m_object->get_layer(layer_nr)->height; + layer_heights[layer_nr] = {m_object->get_layer(layer_nr)->print_z, m_object->get_layer(layer_nr)->height, layer_nr > 0 ? size_t(layer_nr - 1) : 0}; } return layer_heights; } bounds.push_back(0); // Keep first layer still - layer_heights[0].first = m_object->get_layer(0)->print_z; - layer_heights[0].second = m_object->get_layer(0)->height; + layer_heights[0] = {m_object->get_layer(0)->print_z, m_object->get_layer(0)->height, 0}; // Collect top contact layers for (int layer_nr = 1; layer_nr < contact_nodes.size(); layer_nr++) { @@ -3227,8 +3252,8 @@ std::vector> TreeSupport::plan_layer_heights(std:: for (int i = 0; i < support_roof_layers + z_distance_top_layers + 1; i++) { if (layer_nr - i > 0) { bounds.push_back(layer_nr - i); - layer_heights[layer_nr - i].first = m_object->get_layer(layer_nr - i)->print_z; - layer_heights[layer_nr - i].second = m_object->get_layer(layer_nr - i)->height; + layer_heights[layer_nr - i].print_z = m_object->get_layer(layer_nr - i)->print_z; + layer_heights[layer_nr - i].height = m_object->get_layer(layer_nr - i)->height; } else { break; @@ -3259,19 +3284,29 @@ std::vector> TreeSupport::plan_layer_heights(std:: for (int layer_nr = extr1_layer_nr + 1; layer_nr < extr2_layer_nr; layer_nr++) { // if (curr_layer_nodes.empty()) continue; if (std::abs(print_z - m_object->get_layer(layer_nr)->print_z) < step / 2 + EPSILON || extr_layers_left < 1) { - layer_heights[layer_nr].first = print_z; - layer_heights[layer_nr].second = step; + layer_heights[layer_nr].print_z = print_z; + layer_heights[layer_nr].height = step; print_z += step; } else { // can't clear curr_layer_nodes, or the model will have empty layers - layer_heights[layer_nr].first = 0.0; - layer_heights[layer_nr].second = 0.0; + layer_heights[layer_nr].print_z = 0.0; + layer_heights[layer_nr].height = 0.0; extr_layers_left--; } } } + for (int i = layer_heights.size() - 1; i >= 0; i--) { + if (layer_heights[i].height < EPSILON) continue; + for (int j = i - 1; j >= 0; j--) { + if (layer_heights[j].height > EPSILON) { + layer_heights[i].next_layer_nr = j; + break; + } + } + } + #ifdef SUPPORT_TREE_DEBUG_TO_SVG // check bounds if (1) @@ -3285,7 +3320,7 @@ std::vector> TreeSupport::plan_layer_heights(std:: } } #endif - for (int i = 0; i < layer_heights.size(); i++) { BOOST_LOG_TRIVIAL(info) << "plan_layer_heights print_z, height: "<< layer_heights[i].first << " " << layer_heights[i].second << std::endl; } + for (int i = 0; i < layer_heights.size(); i++) { BOOST_LOG_TRIVIAL(info) << "plan_layer_heights print_z, height: "<< layer_heights[i].print_z << " " << layer_heights[i].height << std::endl; } return layer_heights; } @@ -3299,12 +3334,11 @@ void TreeSupport::generate_contact_points(std::vectorbounding_box(); const Point bounding_box_size = bounding_box.max - bounding_box.min; constexpr double rotate_angle = 22.0 / 180.0 * M_PI; - constexpr double thresh_big_overhang = SQ(scale_(10)); const auto center = bounding_box_middle(bounding_box); const auto sin_angle = std::sin(rotate_angle); const auto cos_angle = std::cos(rotate_angle); - const auto rotated_dims = Point( + const Point rotated_dims = Point( bounding_box_size(0) * cos_angle + bounding_box_size(1) * sin_angle, bounding_box_size(0) * sin_angle + bounding_box_size(1) * cos_angle) / 2; @@ -3346,7 +3380,7 @@ void TreeSupport::generate_contact_points(std::vectorprint()->canceled()) break; - auto ts_layer = m_object->get_tree_support_layer(layer_nr + m_raft_layers); + auto ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); const ExPolygons &overhang = ts_layer->overhang_areas; auto & curr_nodes = contact_nodes[layer_nr]; if (overhang.empty()) @@ -3359,11 +3393,11 @@ void TreeSupport::generate_contact_points(std::vector thresh_big_overhang) { + if (config.support_style.value==smsTreeHybrid && overhang_part.area() > m_support_params.thresh_big_overhang) { Point candidate = overhang_bounds.center(); if (!overhang_part.contains(candidate)) move_inside_expoly(overhang_part, candidate); - Node *contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, + Node *contact_node = new Node(candidate, -z_distance_top_layers, layer_nr, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, height, z_distance_top); contact_node->type = ePolygon; contact_node->overhang = &overhang_part; @@ -3391,7 +3425,7 @@ void TreeSupport::generate_contact_points(std::vectorget_collision(0, layer_nr), candidate)) { constexpr bool to_buildplate = true; - Node * contact_node = new Node(candidate, -z_distance_top_layers, (layer_nr) % 2, support_roof_layers + z_distance_top_layers, to_buildplate, + Node * contact_node = new Node(candidate, -z_distance_top_layers, layer_nr, support_roof_layers + z_distance_top_layers, to_buildplate, Node::NO_PARENT, print_z, height, z_distance_top); contact_node->overhang = &overhang_part; curr_nodes.emplace_back(contact_node); @@ -3405,7 +3439,7 @@ void TreeSupport::generate_contact_points(std::vectoroverhang_types[&overhang_part] == TreeSupportLayer::Detected) + if (ts_layer->overhang_types[&overhang_part] == SupportLayer::Detected) candidates = {bbox.min, bounding_box_middle(bbox), bbox.max}; else candidates = {bounding_box_middle(bbox)}; @@ -3414,13 +3448,13 @@ void TreeSupport::generate_contact_points(std::vectoroverhang = &overhang_part; curr_nodes.emplace_back(contact_node); } } - if (ts_layer->overhang_types[&overhang_part] == TreeSupportLayer::Detected) { + if (ts_layer->overhang_types[&overhang_part] == SupportLayer::Detected) { // add points at corners auto &points = overhang_part.contour.points; int nSize = points.size(); @@ -3429,7 +3463,7 @@ void TreeSupport::generate_contact_points(std::vector().normalized(); auto v2 = (pt - points[(i + 1) % nSize]).cast().normalized(); if (v1.dot(v2) > -0.7) { // angle smaller than 135 degrees - Node *contact_node = new Node(pt, -z_distance_top_layers, layer_nr % 2, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, + Node *contact_node = new Node(pt, -z_distance_top_layers, layer_nr, support_roof_layers + z_distance_top_layers, true, Node::NO_PARENT, print_z, height, z_distance_top); contact_node->overhang = &overhang_part; contact_node->is_corner = true; @@ -3437,7 +3471,7 @@ void TreeSupport::generate_contact_points(std::vectoroverhang_types[&overhang_part] == TreeSupportLayer::Enforced || is_slim){ + if(ts_layer->overhang_types[&overhang_part] == SupportLayer::Enforced || is_slim){ // remove close points in Enforcers // auto above_nodes = contact_nodes[layer_nr - 1]; if (!curr_nodes.empty() /*&& !above_nodes.empty()*/) { @@ -3487,16 +3521,6 @@ void TreeSupport::generate_contact_points(std::vector& nodes_layer, Node* p_node) @@ -3621,13 +3645,18 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke // if the layer at 2N below the current one but we won't exceed our limit unless there are N*N uncalculated layers // below our current one. constexpr auto max_recursion_depth = 100; + size_t layer_nr_next = layer_nr; + for (int i = 0; i < max_recursion_depth && layer_nr_next>0; i++) { + layer_nr_next = layer_heights[layer_nr_next].next_layer_nr; + } // Check if we would exceed the recursion limit by trying to process this layer - if (layer_nr >= max_recursion_depth && m_avoidance_cache.find({radius, layer_nr - max_recursion_depth}) == m_avoidance_cache.end()) { + if (layer_nr >= max_recursion_depth && m_avoidance_cache.find({radius, layer_nr_next}) == m_avoidance_cache.end()) { // Force the calculation of the layer `max_recursion_depth` below our current one, ignoring the result. - get_avoidance(radius, layer_nr - max_recursion_depth); + get_avoidance(radius, layer_nr_next); } - ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr - 1), scale_(-m_max_move))); + layer_nr_next = layer_heights[layer_nr].next_layer_nr; + ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr_next), scale_(-m_max_move))); const ExPolygons &collision = get_collision(radius, layer_nr); avoidance_areas.insert(avoidance_areas.end(), collision.begin(), collision.end()); avoidance_areas = std::move(union_ex(avoidance_areas)); diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index b725b84228..bb7d1ef470 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -21,6 +21,15 @@ namespace Slic3r class PrintObject; class TreeSupport; +struct LayerHeightData +{ + coordf_t print_z = 0; + coordf_t height = 0; + size_t next_layer_nr = 0; + LayerHeightData() = default; + LayerHeightData(coordf_t z, coordf_t h, size_t next_layer) : print_z(z), height(h), next_layer_nr(next_layer) {} +}; + /*! * \brief Lazily generates tree guidance volumes. * @@ -79,6 +88,8 @@ public: Polygons get_contours(size_t layer_nr) const; Polygons get_contours_with_holes(size_t layer_nr) const; + std::vector layer_heights; + private: /*! * \brief Convenience typedef for the keys to the caches @@ -114,11 +125,6 @@ private: */ const ExPolygons& calculate_avoidance(const RadiusLayerPair& key) const; - /*! - * \brief Polygons representing the limits of the printable area of the - * machine - */ - ExPolygon m_machine_border; public: bool is_slim = false; @@ -195,9 +201,9 @@ public: * \param storage The data storage where the mesh data is gotten from and * where the resulting support areas are stored. */ - void generate_support_areas(); + void generate(); - void detect_object_overhangs(); + void detect_overhangs(); enum NodeType { eCircle, @@ -215,7 +221,7 @@ public: Node() : distance_to_top(0) , position(Point(0, 0)) - , skin_direction(false) + , obj_layer_nr(0) , support_roof_layers_below(0) , support_floor_layers_above(0) , to_buildplate(true) @@ -224,11 +230,11 @@ public: , height(0.0) {} - Node(const Point position, const int distance_to_top, const bool skin_direction, const int support_roof_layers_below, const bool to_buildplate, Node* parent, + Node(const Point position, const int distance_to_top, const int obj_layer_nr, const int support_roof_layers_below, const bool to_buildplate, Node* parent, coordf_t print_z_, coordf_t height_, coordf_t dist_mm_to_top_=0) : distance_to_top(distance_to_top) , position(position) - , skin_direction(skin_direction) + , obj_layer_nr(obj_layer_nr) , support_roof_layers_below(support_roof_layers_below) , support_floor_layers_above(0) , to_buildplate(to_buildplate) @@ -292,6 +298,7 @@ public: */ int support_roof_layers_below; int support_floor_layers_above; + int obj_layer_nr; /*! * \brief Whether to try to go towards the build plate. @@ -356,11 +363,15 @@ public: InfillPattern interface_fill_pattern; InfillPattern contact_fill_pattern; bool with_sheath; + const double thresh_big_overhang = SQ(scale_(10)); }; int avg_node_per_layer = 0; float nodes_angle = 0; bool has_overhangs = false; + bool has_sharp_tails = false; + bool has_cantilever = false; + SupportType support_type; std::unique_ptr generator; std::unordered_map printZ_to_lightninglayer; @@ -388,6 +399,12 @@ private: bool with_infill = false; + /*! + * \brief Polygons representing the limits of the printable area of the + * machine + */ + ExPolygon m_machine_border; + /*! * \brief Draws circles around each node of the tree into the final support. * @@ -423,7 +440,7 @@ private: * */ - std::vector> plan_layer_heights(std::vector>& contact_nodes); + std::vector plan_layer_heights(std::vector> &contact_nodes); /*! * \brief Creates points where support contacts the model. * diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 63b739e8e2..e605cdcfe4 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -753,9 +753,7 @@ inline std::pair slice_slabs_make_lines( const std::vector &zs, bool top, bool bottom, - const ThrowOnCancel throw_on_cancel_fn, - // BBS: solve conflicts (see declaration) and most elegant way I can get - SlabSlicingConfig config) + const ThrowOnCancel throw_on_cancel_fn) { std::pair out; SlabLines &lines_top = out.first; @@ -774,7 +772,7 @@ inline std::pair slice_slabs_make_lines( tbb::parallel_for( tbb::blocked_range(0, int(indices.size())), - [&vertices, &indices, &face_neighbors, &face_edge_ids, num_edges, &face_orientation, &zs, top, bottom, &lines_top, &lines_bottom, &lines_mutex_top, &lines_mutex_bottom, throw_on_cancel_fn, &config] + [&vertices, &indices, &face_neighbors, &face_edge_ids, num_edges, &face_orientation, &zs, top, bottom, &lines_top, &lines_bottom, &lines_mutex_top, &lines_mutex_bottom, throw_on_cancel_fn] (const tbb::blocked_range &range) { for (int face_idx = range.begin(); face_idx < range.end(); ++ face_idx) { if ((face_idx & 0x0ffff) == 0) @@ -793,7 +791,7 @@ inline std::pair slice_slabs_make_lines( slice_facet_with_slabs(vertices, indices, face_idx, neighbors, edge_ids, num_edges, zs, lines_top, lines_mutex_top); } // BBS: add vertical faces option - if (bottom && (fo == FaceOrientation::Down || (config.isVertical && fo == FaceOrientation::Vertical) || fo == FaceOrientation::Degenerate)) { + if (bottom && (fo == FaceOrientation::Down || fo == FaceOrientation::Degenerate)) { Vec3i neighbors = face_neighbors[face_idx]; // Reset neighborship of this triangle in case the other triangle is oriented backwards from this one. for (int i = 0; i < 3; ++ i) @@ -1898,8 +1896,7 @@ void slice_mesh_slabs( const Transform3d &trafo, std::vector *out_top, std::vector *out_bottom, - std::function throw_on_cancel, - SlabSlicingConfig config) + std::function throw_on_cancel) { BOOST_LOG_TRIVIAL(debug) << "slice_mesh_slabs to polygons"; @@ -1978,7 +1975,7 @@ void slice_mesh_slabs( std::vector face_edge_ids = its_face_edge_ids(mesh, face_neighbors, true, &num_edges); std::pair lines = slice_slabs_make_lines( vertices_transformed, mesh.indices, face_neighbors, face_edge_ids, num_edges, face_orientation, zs, - out_top != nullptr, out_bottom != nullptr, throw_on_cancel, config); + out_top != nullptr, out_bottom != nullptr, throw_on_cancel); throw_on_cancel(); diff --git a/src/libslic3r/TriangleMeshSlicer.hpp b/src/libslic3r/TriangleMeshSlicer.hpp index 603e95e78e..1a8b643629 100644 --- a/src/libslic3r/TriangleMeshSlicer.hpp +++ b/src/libslic3r/TriangleMeshSlicer.hpp @@ -46,19 +46,6 @@ struct MeshSlicingParamsEx : public MeshSlicingParams double resolution { 0 }; }; -// BBS: MusangKing - NEW: add paint-on support on vertical-faces -// this SlabSlicingConfig aiming to distinguish if slice_slabs_make_lines() outputs lines by slab_slicing on vertical faces -// e.g., for support enforcer operation: isVertical = true; for other color painting operations: isVertical = false (default). -// solve conflicts STUDIO-1183/970/1285 -struct SlabSlicingConfig -{ - SlabSlicingConfig() - : isVertical(false) - {} - - bool isVertical; -}; - // All the following slicing functions shall produce consistent results with the same mesh, same transformation matrix and slicing parameters. // Namely, slice_mesh_slabs() shall produce consistent results with slice_mesh() and slice_mesh_ex() in the sense, that projections made by // slice_mesh_slabs() shall fall onto slicing planes produced by slice_mesh(). @@ -120,9 +107,7 @@ void slice_mesh_slabs( const Transform3d &trafo, std::vector *out_top, std::vector *out_bottom, - std::function throw_on_cancel, - // BBS: MusangKing - SlabSlicingConfig config = SlabSlicingConfig()); + std::function throw_on_cancel); // Project mesh upwards pointing surfaces / downwards pointing surfaces into 2D polygons. void project_mesh( diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 2bbb075d84..fcb818daa9 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -34,6 +34,7 @@ #define CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE -15 #define CLI_3MF_NEW_MACHINE_NOT_SUPPORTED -16 #define CLI_PROCESS_NOT_COMPATIBLE -17 +#define CLI_INVALID_VALUES_IN_3MF -18 #define CLI_NO_SUITABLE_OBJECTS -50 diff --git a/src/libslic3r/libslic3r_version.h.in b/src/libslic3r/libslic3r_version.h.in index d05746b8e8..78809f1f6d 100644 --- a/src/libslic3r/libslic3r_version.h.in +++ b/src/libslic3r/libslic3r_version.h.in @@ -6,6 +6,7 @@ #define SLIC3R_VERSION "@SLIC3R_VERSION@" #define SoftFever_VERSION "@SoftFever_VERSION@" #define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@" +#define SLIC3R_BUILD_TIME "@SLIC3R_BUILD_TIME@" //#define SLIC3R_RC_VERSION "@SLIC3R_VERSION@" #define BBL_RELEASE_TO_PUBLIC @BBL_RELEASE_TO_PUBLIC@ #define BBL_INTERNAL_TESTING @BBL_INTERNAL_TESTING@ diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index eddfdc6af2..c466e02d78 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -28,6 +28,8 @@ set(SLIC3R_GUI_SOURCES GUI/Widgets/SideMenuPopup.cpp GUI/Widgets/DropDown.cpp GUI/Widgets/DropDown.hpp + GUI/Widgets/PopupWindow.cpp + GUI/Widgets/PopupWindow.hpp GUI/Widgets/Label.cpp GUI/Widgets/Label.hpp GUI/Widgets/Scrollbar.cpp @@ -205,6 +207,8 @@ set(SLIC3R_GUI_SOURCES GUI/GUI_ObjectTableSettings.hpp GUI/MeshUtils.cpp GUI/MeshUtils.hpp + GUI/TickCode.cpp + GUI/TickCode.hpp GUI/Tab.cpp GUI/Tab.hpp GUI/ParamsDialog.cpp @@ -273,12 +277,14 @@ set(SLIC3R_GUI_SOURCES GUI/RemovableDriveManager.hpp GUI/SendSystemInfoDialog.cpp GUI/SendSystemInfoDialog.hpp - GUI/SetBedTypeDialog.cpp - GUI/SetBedTypeDialog.hpp + GUI/PlateSettingsDialog.cpp + GUI/PlateSettingsDialog.hpp GUI/ImGuiWrapper.hpp GUI/ImGuiWrapper.cpp GUI/DeviceManager.hpp GUI/DeviceManager.cpp + GUI/HttpServer.hpp + GUI/HttpServer.cpp Config/Snapshot.cpp Config/Snapshot.hpp Config/Version.cpp @@ -364,6 +370,8 @@ set(SLIC3R_GUI_SOURCES GUI/PublishDialog.hpp GUI/RecenterDialog.cpp GUI/RecenterDialog.hpp + GUI/PrivacyUpdateDialog.cpp + GUI/PrivacyUpdateDialog.hpp GUI/BonjourDialog.cpp GUI/BonjourDialog.hpp GUI/BindDialog.cpp @@ -476,6 +484,10 @@ endif () add_library(libslic3r_gui STATIC ${SLIC3R_GUI_SOURCES}) target_include_directories(libslic3r_gui PRIVATE Utils) +if (WIN32) + target_include_directories(libslic3r_gui PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/WebView2/include) +endif() + source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index e8786bf86f..5cbb412e42 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -390,6 +390,8 @@ std::array GLVolume::MODEL_NEGTIVE_COL = {0.3f, 0.3f, 0.3f, 0.4f}; std::array GLVolume::SUPPORT_ENFORCER_COL = {0.3f, 0.3f, 1.0f, 0.4f}; std::array GLVolume::SUPPORT_BLOCKER_COL = {1.0f, 0.3f, 0.3f, 0.4f}; +std::array GLVolume::MODEL_HIDDEN_COL = {0.f, 0.f, 0.f, 0.3f}; + std::array, 5> GLVolume::MODEL_COLOR = { { { 1.0f, 1.0f, 0.0f, 1.f }, { 1.0f, 0.5f, 0.5f, 1.f }, @@ -430,6 +432,7 @@ GLVolume::GLVolume(float r, float g, float b, float a) , selected(false) , disabled(false) , printable(true) + , visible(true) , is_active(true) , zoom_to_volumes(true) , shader_outside_printer_detection_enabled(false) @@ -521,6 +524,14 @@ void GLVolume::set_render_color() render_color[2] = UNPRINTABLE_COLOR[2]; render_color[3] = UNPRINTABLE_COLOR[3]; } + + //BBS set invisible color + if (!visible) { + render_color[0] = MODEL_HIDDEN_COL[0]; + render_color[1] = MODEL_HIDDEN_COL[1]; + render_color[2] = MODEL_HIDDEN_COL[2]; + render_color[3] = MODEL_HIDDEN_COL[3]; + } } std::array color_from_model_volume(const ModelVolume& model_volume) @@ -684,6 +695,9 @@ void GLVolume::render(bool with_outline) const break; ModelObject* mo = model_objects[object_idx()]; + if (volume_idx() >= mo->volumes.size()) + break; + ModelVolume* mv = mo->volumes[volume_idx()]; if (mv->mmu_segmentation_facets.empty()) break; @@ -1149,7 +1163,7 @@ int GLVolumeCollection::load_wipe_tower_preview( std::vector> extruder_colors = get_extruders_colors(); std::vector> colors; GUI::PartPlateList& ppl = GUI::wxGetApp().plater()->get_partplate_list(); - std::vector plate_extruders = ppl.get_plate(plate_idx)->get_extruders(); + std::vector plate_extruders = ppl.get_plate(plate_idx)->get_extruders(true); TriangleMesh wipe_tower_shell = make_cube(width, depth, height); for (int extruder_id : plate_extruders) { if (extruder_id <= extruder_colors.size()) diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 23ef575cb5..86c93a47a7 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -269,6 +269,7 @@ public: static std::array MODEL_NEGTIVE_COL; static std::array SUPPORT_ENFORCER_COL; static std::array SUPPORT_BLOCKER_COL; + static std::array MODEL_HIDDEN_COL; static void update_render_colors(); static void load_render_colors(); @@ -286,6 +287,7 @@ public: GLVolume(float r = 1.f, float g = 1.f, float b = 1.f, float a = 1.f); GLVolume(const std::array& rgba) : GLVolume(rgba[0], rgba[1], rgba[2], rgba[3]) {} + virtual ~GLVolume() = default; // BBS protected: @@ -363,6 +365,8 @@ public: bool disabled : 1; // Is this object printable? bool printable : 1; + // Is this object visible(in assemble view)? + bool visible : 1; // Whether or not this volume is active for rendering bool is_active : 1; // Whether or not to use this volume when applying zoom_to_volumes() diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 8b499a0257..7a7eba8674 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -121,12 +121,13 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) m_sizer_filament->Add(m_comboBox_filament, 1, wxALIGN_CENTER, 0); - m_readonly_filament = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, wxTE_READONLY); + m_readonly_filament = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, wxTE_READONLY | wxRIGHT); m_readonly_filament->SetBorderColor(StateColor(std::make_pair(0xDBDBDB, (int)StateColor::Focused), std::make_pair(0x009688, (int)StateColor::Hovered), std::make_pair(0xDBDBDB, (int)StateColor::Normal))); - m_readonly_filament->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto& e) { - ; - }); + m_readonly_filament->SetFont(::Label::Body_14); + m_readonly_filament->SetLabelColor(AMS_MATERIALS_SETTING_GREY800); + m_readonly_filament->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto& e) {}); + m_readonly_filament->GetTextCtrl()->Hide(); m_sizer_filament->Add(m_readonly_filament, 1, wxALIGN_CENTER, 0); m_readonly_filament->Hide(); @@ -367,6 +368,13 @@ void AMSMaterialsSetting::enable_confirm_button(bool en) else { m_comboBox_filament->Show(en); m_readonly_filament->Show(!en); + + if ( !is_virtual_tray() ) { + m_tip_readonly->SetLabelText(_L("Setting AMS slot information while printing is not supported")); + } + else { + m_tip_readonly->SetLabelText(_L("Setting Virtual slot information while printing is not supported")); + } m_tip_readonly->Show(!en); } } @@ -376,7 +384,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) wxString k_text = m_input_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_input_n_val->GetTextCtrl()->GetValue(); - if (is_virtual_tray()) { + if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); @@ -478,8 +486,12 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } // set filament - if (!is_virtual_tray()) { - obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { + if (is_virtual_tray()) { + obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } else { + obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } } // set k / n value @@ -548,7 +560,10 @@ void AMSMaterialsSetting::update_widgets() { // virtual tray if (is_virtual_tray()) { - m_panel_normal->Hide(); + if (obj && obj->is_support_filament_edit_virtual_tray) + m_panel_normal->Show(); + else + m_panel_normal->Hide(); m_panel_kn->Show(); } else if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { m_panel_normal->Show(); @@ -583,7 +598,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); - if (is_virtual_tray()) { + if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { m_button_confirm->Show(); update(); Layout(); @@ -609,7 +624,8 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_panel_SN->Show(); m_comboBox_filament->Hide(); m_readonly_filament->Show(); - m_readonly_filament->GetTextCtrl()->SetLabel("Bambu " + filament); + //m_readonly_filament->GetTextCtrl()->SetLabel("Bambu " + filament); + m_readonly_filament->SetLabel("Bambu " + filament); m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); @@ -712,6 +728,31 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) if (preset_bundle) { for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { + + //check is it in the filament blacklist + bool in_blacklist = false; + std::string action; + std::string info; + std::string filamnt_type; + it->get_filament_type(filamnt_type); + + if (it->vendor) { + DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); + } + + if (in_blacklist) { + if (action == "prohibition") { + MessageDialog msg_wingow(nullptr, info, _L("Error"), wxICON_WARNING | wxOK); + msg_wingow.ShowModal(); + m_comboBox_filament->SetSelection(m_filament_selection); + return; + } + else if (action == "warning") { + MessageDialog msg_wingow(nullptr, info, _L("Warning"), wxICON_INFORMATION | wxOK); + msg_wingow.ShowModal(); + } + } + // ) if nozzle_temperature_range is found ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); if (opt_min) { @@ -742,6 +783,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } if (!found_filament_type) m_filament_type = ""; + + break; } } } @@ -751,6 +794,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) if (m_input_nozzle_max->GetTextCtrl()->GetValue().IsEmpty()) { m_input_nozzle_max->GetTextCtrl()->SetValue("220"); } + + m_filament_selection = evt.GetSelection(); } void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 46c0ea1459..a98140ae40 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -98,13 +98,14 @@ protected: TextInput* m_input_k_val; wxStaticText* m_n_param; TextInput* m_input_n_val; + int m_filament_selection; #ifdef __APPLE__ wxComboBox *m_comboBox_filament; #else ComboBox *m_comboBox_filament; #endif - TextInput* m_readonly_filament; + TextInput* m_readonly_filament; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index 84529f0310..b1377aa665 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -53,9 +53,9 @@ void AMSSetting::create() m_sizer_Insert_material_tip->Add(0, 0, 0, wxLEFT, 10); // tip line1 - m_tip_Insert_material_line1 = new wxStaticText(m_panel_body, wxID_ANY, - _L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_Insert_material_line1 = new Label(m_panel_body, + _L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds.") + ); m_tip_Insert_material_line1->SetFont(::Label::Body_13); m_tip_Insert_material_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); @@ -64,9 +64,9 @@ void AMSSetting::create() m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line1, 0, wxEXPAND, 0); // tip line2 - m_tip_Insert_material_line2 = new wxStaticText(m_panel_body, wxID_ANY, - _L("Note: if new filament is inserted during printing, the AMS will not automatically read any information until printing is completed."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_Insert_material_line2 = new Label(m_panel_body, + _L("Note: if new filament is inserted during printing, the AMS will not automatically read any information until printing is completed.") + ); m_tip_Insert_material_line2->SetFont(::Label::Body_13); m_tip_Insert_material_line2->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line2->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); @@ -75,10 +75,9 @@ void AMSSetting::create() m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line2, 0, wxEXPAND | wxTOP, 8); // tip line2 - m_tip_Insert_material_line3 = - new wxStaticText(m_panel_body, wxID_ANY, - _L("When inserting a new filament, the AMS will not automatically read its information, leaving it blank for you to enter manually."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_Insert_material_line3 = new Label(m_panel_body, + _L("When inserting a new filament, the AMS will not automatically read its information, leaving it blank for you to enter manually.") + ); m_tip_Insert_material_line3->SetFont(::Label::Body_13); m_tip_Insert_material_line3->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line3->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); @@ -109,18 +108,18 @@ void AMSSetting::create() // tip line m_sizer_starting_tip_inline = new wxBoxSizer(wxVERTICAL); - m_tip_starting_line1 = new wxStaticText(m_panel_body, wxID_ANY, - _L("The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute.The reading process will roll filament spools."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_starting_line1 = new Label(m_panel_body, + _L("The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute.The reading process will roll filament spools.") + ); m_tip_starting_line1->SetFont(::Label::Body_13); m_tip_starting_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_starting_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_starting_line1->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_starting_tip_inline->Add(m_tip_starting_line1, 0, wxEXPAND, 0); - m_tip_starting_line2 = new wxStaticText(m_panel_body, wxID_ANY, - _L("The AMS will not automatically read information from inserted filament during startup and will continue to use the information recorded before the last shutdown."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_starting_line2 = new Label(m_panel_body, + _L("The AMS will not automatically read information from inserted filament during startup and will continue to use the information recorded before the last shutdown.") + ); m_tip_starting_line2->SetFont(::Label::Body_13); m_tip_starting_line2->SetForegroundColour(AMS_SETTING_GREY700); m_tip_starting_line2->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); @@ -148,9 +147,9 @@ void AMSSetting::create() // tip line m_sizer_remain_inline = new wxBoxSizer(wxVERTICAL); - m_tip_remain_line1 = new wxStaticText(m_panel_body, wxID_ANY, - _L("The AMS will estimate Bambu filament's remaining capacity after the filament info is updated. During printing, remaining capacity will be updated automatically."), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_remain_line1 = new Label(m_panel_body, + _L("The AMS will estimate Bambu filament's remaining capacity after the filament info is updated. During printing, remaining capacity will be updated automatically.") + ); m_tip_remain_line1->SetFont(::Label::Body_13); m_tip_remain_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_remain_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); @@ -178,9 +177,9 @@ void AMSSetting::create() // tip line m_sizer_switch_filament_inline = new wxBoxSizer(wxVERTICAL); - m_tip_switch_filament_line1 = new wxStaticText(m_panel_body, wxID_ANY, - _L("AMS will continue to another spool with the same properties of filament automatically when current filament runs out"), - wxDefaultPosition, wxDefaultSize, 0); + m_tip_switch_filament_line1 = new Label(m_panel_body, + _L("AMS will continue to another spool with the same properties of filament automatically when current filament runs out") + ); m_tip_switch_filament_line1->SetFont(::Label::Body_13); m_tip_switch_filament_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_switch_filament_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 1f49d5973e..0b227de29a 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -49,22 +49,22 @@ protected: wxPanel * m_panel_body; CheckBox * m_checkbox_Insert_material_auto_read; wxStaticText *m_title_Insert_material_auto_read; - wxStaticText *m_tip_Insert_material_line1; - wxStaticText *m_tip_Insert_material_line2; - wxStaticText *m_tip_Insert_material_line3; + Label* m_tip_Insert_material_line1; + Label* m_tip_Insert_material_line2; + Label* m_tip_Insert_material_line3; CheckBox * m_checkbox_starting_auto_read; wxStaticText *m_title_starting_auto_read; - wxStaticText *m_tip_starting_line1; - wxStaticText *m_tip_starting_line2; + Label* m_tip_starting_line1; + Label* m_tip_starting_line2; CheckBox * m_checkbox_remain; wxStaticText *m_title_remain; - wxStaticText *m_tip_remain_line1; + Label* m_tip_remain_line1; CheckBox* m_checkbox_switch_filament; wxStaticText* m_title_switch_filament; - wxStaticText* m_tip_switch_filament_line1; + Label* m_tip_switch_filament_line1; wxStaticText *m_tip_ams_img; Button * m_button_auto_demarcate; diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 5e4407e33c..a57870e69e 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -257,6 +257,13 @@ AboutDialog::AboutDialog() version->SetBackgroundColour(wxColour("#009688")); vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); +#if BBL_INTERNAL_TESTING + wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME)); + wxStaticText* build_time_text = new wxStaticText(this, wxID_ANY, build_time, wxDefaultPosition, wxDefaultSize); + build_time_text->SetForegroundColour(wxColour("#FFFFFE")); + build_time_text->SetBackgroundColour(wxColour("#00AF42")); + vesizer->Add(build_time_text, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); +#endif vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5)); } diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 9fde6ac49d..0c2c2dfd4f 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -207,11 +207,11 @@ void MaterialItem::doRender(wxDC &dc) } AmsMapingPopup::AmsMapingPopup(wxWindow *parent) - :wxPopupTransientWindow(parent, wxBORDER_NONE) + : PopupWindow(parent, wxBORDER_NONE) { - SetSize(wxSize(FromDIP(300), -1)); - SetMinSize(wxSize(FromDIP(300), -1)); - SetMaxSize(wxSize(FromDIP(300), -1)); + SetSize(wxSize(FromDIP(252), -1)); + SetMinSize(wxSize(FromDIP(252), -1)); + SetMaxSize(wxSize(FromDIP(252), -1)); Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this); @@ -243,21 +243,36 @@ void MaterialItem::doRender(wxDC &dc) title_panel->Fit(); m_sizer_list = new wxBoxSizer(wxVERTICAL); + for (auto i = 0; i < AMS_TOTAL_COUNT; i++) { + auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); + /*auto ams_mapping_item_container = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_mapping_container", this, 78), wxDefaultPosition, + wxSize(FromDIP(230), FromDIP(78)), 0);*/ + auto ams_mapping_item_container = new MappingContainer(this); + ams_mapping_item_container->SetSizer(sizer_mapping_list); + ams_mapping_item_container->Layout(); + //ams_mapping_item_container->Hide(); + m_amsmapping_container_sizer_list.push_back(sizer_mapping_list); + m_amsmapping_container_list.push_back(ams_mapping_item_container); + m_sizer_list->Add(ams_mapping_item_container, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, FromDIP(5)); + } m_warning_text = new wxStaticText(this, wxID_ANY, wxEmptyString); m_warning_text->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00)); m_warning_text->SetFont(::Label::Body_12); auto cant_not_match_tip = _L("Note: Only the AMS slots loaded with the same material type can be selected."); m_warning_text->SetLabel(format_text(cant_not_match_tip)); - m_warning_text->SetMinSize(wxSize(FromDIP(280), FromDIP(-1))); - m_warning_text->Wrap(FromDIP(280)); + m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1))); + m_warning_text->Wrap(FromDIP(248)); m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); m_sizer_main->Add(m_sizer_list, 0, wxEXPAND | wxALL, FromDIP(0)); - m_sizer_main->Add(m_warning_text, 0, wxEXPAND | wxALL, FromDIP(10)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizer_main->Add(m_warning_text, 0, wxEXPAND | wxALL, FromDIP(6)); SetSizer(m_sizer_main); Layout(); + Fit(); } wxString AmsMapingPopup::format_text(wxString &m_msg) @@ -315,15 +330,29 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) void AmsMapingPopup::update_ams_data(std::map amsList) { m_has_unmatch_filament = false; - m_mapping_item_list.clear(); - if (m_amsmapping_sizer_list.size() > 0) { - for (wxBoxSizer *bz : m_amsmapping_sizer_list) { bz->Clear(true); } - m_amsmapping_sizer_list.clear(); + //m_mapping_item_list.clear(); + + for (auto& ams_container : m_amsmapping_container_list) { + ams_container->Hide(); + } + + + for (wxWindow *mitem : m_mapping_item_list) { + mitem->Destroy(); + mitem = nullptr; + } + m_mapping_item_list.clear(); + + if (m_amsmapping_container_sizer_list.size() > 0) { + for (wxBoxSizer *siz : m_amsmapping_container_sizer_list) { + siz->Clear(true); + } } std::map::iterator ams_iter; BOOST_LOG_TRIVIAL(trace) << "ams_mapping total count " << amsList.size(); + int m_amsmapping_container_list_index = 0; for (ams_iter = amsList.begin(); ams_iter != amsList.end(); ams_iter++) { @@ -355,7 +384,10 @@ void AmsMapingPopup::update_ams_data(std::map amsList) tray_datas.push_back(td); } - add_ams_mapping(tray_datas); + + m_amsmapping_container_list[m_amsmapping_container_list_index]->Show(); + add_ams_mapping(tray_datas, m_amsmapping_container_list[m_amsmapping_container_list_index], m_amsmapping_container_sizer_list[m_amsmapping_container_list_index]); + m_amsmapping_container_list_index++; } @@ -406,40 +438,38 @@ std::vector AmsMapingPopup::parse_ams_mapping(std::map tray_data) +void AmsMapingPopup::add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer) { - auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); - + sizer->Add(0,0,0,wxLEFT,FromDIP(6)); for (auto i = 0; i < tray_data.size(); i++) { - wxBoxSizer *sizer_mapping_item = new wxBoxSizer(wxVERTICAL); // set number - auto number = new wxStaticText(this, wxID_ANY, wxGetApp().transition_tridid(tray_data[i].id), wxDefaultPosition, wxDefaultSize, 0); + /* auto number = new wxStaticText(this, wxID_ANY, wxGetApp().transition_tridid(tray_data[i].id), wxDefaultPosition, wxDefaultSize, 0); number->SetFont(::Label::Body_13); number->SetForegroundColour(wxColour(0X6B, 0X6B, 0X6B)); - number->Wrap(-1); + number->Wrap(-1);*/ // set button - MappingItem *m_filament_name = new MappingItem(this); - m_filament_name->SetSize(wxSize(FromDIP(62), FromDIP(22))); - m_filament_name->SetMinSize(wxSize(FromDIP(62), FromDIP(22))); - m_filament_name->SetMaxSize(wxSize(FromDIP(62), FromDIP(22))); - //m_filament_name->SetCornerRadius(5); - m_filament_name->SetFont(::Label::Body_12); - m_mapping_item_list.push_back(m_filament_name); - + MappingItem *m_mapping_item = new MappingItem(container); + m_mapping_item->SetSize(wxSize(FromDIP(68 * 0.7), FromDIP(100 * 0.6))); + m_mapping_item->SetMinSize(wxSize(FromDIP(68 * 0.7), FromDIP(100 * 0.6))); + m_mapping_item->SetMaxSize(wxSize(FromDIP(68 * 0.7), FromDIP(100 * 0.6))); + //m_mapping_item->SetCornerRadius(5); + m_mapping_item->SetFont(::Label::Body_12); + m_mapping_item_list.push_back(m_mapping_item); + if (tray_data[i].type == NORMAL) { if (is_match_material(tray_data[i].filament_type)) { - m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + m_mapping_item->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); } else { - m_filament_name->set_data(wxColour(0xEE,0xEE,0xEE), tray_data[i].name, tray_data[i], true); + m_mapping_item->set_data(wxColour(0xEE,0xEE,0xEE), tray_data[i].name, tray_data[i], true); m_has_unmatch_filament = true; } - m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { if (!is_match_material(tray_data[i].filament_type)) return; - m_filament_name->send_event(m_current_filament_id); + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } @@ -447,29 +477,30 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) // temp if (tray_data[i].type == EMPTY) { - m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "-", tray_data[i]); - m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { - m_filament_name->send_event(m_current_filament_id); + m_mapping_item->set_data(wxColour(0xCE, 0xCE, 0xCE), "-", tray_data[i]); + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } // third party if (tray_data[i].type == THIRD) { - m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data[i]); - m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { - m_filament_name->send_event(m_current_filament_id); + m_mapping_item->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data[i]); + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } - sizer_mapping_item->Add(number, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_mapping_item->Add(m_filament_name, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_mapping_list->Add(sizer_mapping_item, 0, wxALL, FromDIP(5)); - m_amsmapping_sizer_list.push_back(sizer_mapping_list); + //sizer_mapping_item->Add(number, 0, wxALIGN_CENTER_HORIZONTAL, 0); + //sizer_mapping_item->Add(m_mapping_item, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_mapping_item->set_tray_index(wxGetApp().transition_tridid(tray_data[i].id)); + sizer->Add(0,0,0,wxRIGHT,FromDIP(6)); + sizer->Add(m_mapping_item, 0, wxTOP, FromDIP(1)); } - m_sizer_list->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + } void AmsMapingPopup::OnDismiss() @@ -479,7 +510,7 @@ void AmsMapingPopup::OnDismiss() bool AmsMapingPopup::ProcessLeftDown(wxMouseEvent &event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } void AmsMapingPopup::paintEvent(wxPaintEvent &evt) @@ -514,7 +545,7 @@ void MappingItem::send_event(int fliament_id) wxString param = wxString::Format("%d|%d|%d|%s|%d", m_coloul.Red(), m_coloul.Green(), m_coloul.Blue(), number, fliament_id); event.SetString(param); event.SetEventObject(this->GetParent()->GetParent()); - wxPostEvent(this->GetParent()->GetParent(), event); + wxPostEvent(this->GetParent()->GetParent()->GetParent(), event); } void MappingItem::msw_rescale() @@ -551,7 +582,7 @@ void MappingItem::render(wxDC &dc) #endif // materials name - dc.SetFont(::Label::Body_12); + dc.SetFont(::Label::Head_13); auto txt_colour = m_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); txt_colour = m_unmatch ? wxColour(0xCE, 0xCE, 0xCE) : txt_colour; @@ -563,8 +594,15 @@ void MappingItem::render(wxDC &dc) m_name = m_name.substr(0, 3) + "." + m_name.substr(m_name.length() - 1); }*/ - auto txt_size = dc.GetTextExtent(m_name); - dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, (GetSize().y - txt_size.y) / 2)); + auto txt_size = dc.GetTextExtent(m_tray_index); + auto top = (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2 + FromDIP(8); + dc.DrawText(m_tray_index, wxPoint((GetSize().x - txt_size.x) / 2, top)); + + + top += txt_size.y + FromDIP(7); + dc.SetFont(::Label::Body_12); + txt_size = dc.GetTextExtent(m_name); + dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, top)); } void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool unmatch) @@ -582,21 +620,32 @@ void MappingItem::doRender(wxDC &dc) { dc.SetPen(m_coloul); dc.SetBrush(wxBrush(m_coloul)); - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y,5); - if (m_coloul == *wxWHITE) { - dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC),1)); -#ifdef __APPLE__ - dc.DrawRoundedRectangle(1, 1, GetSize().x - 1, GetSize().y - 1, 5); -#else - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 5); -#endif // __APPLE__ + dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); - - } +// if (m_coloul == *wxWHITE) { +// dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC), 1)); +//#ifdef __APPLE__ +// dc.DrawRectangle(1, 1, GetSize().x - 1, GetSize().y - 1); +//#else +// dc.DrawRectangle(0, 0, tray_size.x, tray_size.y); +//#endif // __APPLE__ +// } + + wxColour side_colour = wxColour(0xE4E4E4); + + dc.SetPen(side_colour); + dc.SetBrush(wxBrush(side_colour)); +#ifdef __APPLE__ + dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); +#else + dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); +#endif // __APPLE__ } AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) - :wxPopupTransientWindow(parent, wxBORDER_NONE) + :PopupWindow(parent, wxBORDER_NONE) { SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); @@ -696,11 +745,11 @@ void AmsMapingTipPopup::paintEvent(wxPaintEvent &evt) void AmsMapingTipPopup::OnDismiss() {} bool AmsMapingTipPopup::ProcessLeftDown(wxMouseEvent &event) { - return wxPopupTransientWindow::ProcessLeftDown(event); } + return PopupWindow::ProcessLeftDown(event); } AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) - :wxPopupTransientWindow(parent, wxBORDER_NONE) + :PopupWindow(parent, wxBORDER_NONE) { SetBackgroundColour(*wxWHITE); @@ -727,7 +776,7 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) m_staticText1->SetFont(::Label::Head_13); - m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represent humidity is high, red represent humidity is too high.(Hygrometer: lower the better, The bars: higher the better)")); + m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represent humidity is high, red represent humidity is too high.(Hygrometer: lower the better.)")); m_staticText2->SetFont(::Label::Body_13); m_staticText2->SetSize(wxSize(FromDIP(360), -1)); m_staticText2->SetMinSize(wxSize(FromDIP(360), -1)); @@ -740,7 +789,7 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) m_staticText3->SetFont(::Label::Head_13); - m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant. (Higher is better)")); + m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant.(The bars: higher the better.)")); m_staticText4->SetFont(::Label::Body_13); m_staticText4->SetSize(wxSize(FromDIP(360), -1)); m_staticText4->SetMinSize(wxSize(FromDIP(360), -1)); @@ -766,9 +815,9 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 34); m_button_confirm = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_confirm->SetBackgroundColor(btn_bg_green); - m_button_confirm->SetBorderColor(wxColour(0, 150, 136)); + m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); m_button_confirm->SetTextColor(wxColour(0xFFFFFE)); m_button_confirm->SetSize(wxSize(FromDIP(72), FromDIP(24))); m_button_confirm->SetMinSize(wxSize(FromDIP(72), FromDIP(24))); @@ -814,11 +863,11 @@ void AmsHumidityTipPopup::paintEvent(wxPaintEvent& evt) void AmsHumidityTipPopup::OnDismiss() {} bool AmsHumidityTipPopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } AmsTutorialPopup::AmsTutorialPopup(wxWindow* parent) -:wxPopupTransientWindow(parent, wxBORDER_NONE) +:PopupWindow(parent, wxBORDER_NONE) { Bind(wxEVT_PAINT, &AmsTutorialPopup::paintEvent, this); SetBackgroundColour(*wxWHITE); @@ -916,12 +965,12 @@ void AmsTutorialPopup::paintEvent(wxPaintEvent& evt) void AmsTutorialPopup::OnDismiss() {} bool AmsTutorialPopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } AmsIntroducePopup::AmsIntroducePopup(wxWindow* parent) -:wxPopupTransientWindow(parent, wxBORDER_NONE) +:PopupWindow(parent, wxBORDER_NONE) { Bind(wxEVT_PAINT, &AmsIntroducePopup::paintEvent, this); SetBackgroundColour(*wxWHITE); @@ -1001,8 +1050,60 @@ void AmsIntroducePopup::paintEvent(wxPaintEvent& evt) void AmsIntroducePopup::OnDismiss() {} bool AmsIntroducePopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } +MappingContainer::MappingContainer(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + Bind(wxEVT_PAINT, &MappingContainer::paintEvent, this); + + ams_mapping_item_container = create_scaled_bitmap("ams_mapping_container", this, 78); + + SetMinSize(wxSize(FromDIP(230), FromDIP(78))); + SetMaxSize(wxSize(FromDIP(230), FromDIP(78))); +} + +MappingContainer::~MappingContainer() +{ +} + + +void MappingContainer::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void MappingContainer::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void MappingContainer::doRender(wxDC& dc) +{ + dc.DrawBitmap(ams_mapping_item_container, 0, 0); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index c4abe83cc3..06fadaa82a 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -34,6 +34,7 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" #include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" #include #include @@ -41,6 +42,7 @@ namespace Slic3r { namespace GUI { #define MATERIAL_ITEM_SIZE wxSize(FromDIP(64), FromDIP(34)) #define MATERIAL_ITEM_REAL_SIZE wxSize(FromDIP(62), FromDIP(32)) +#define MAPPING_ITEM_REAL_SIZE wxSize(FromDIP(48), FromDIP(45)) #define AMS_TOTAL_COUNT 4 enum TrayType { @@ -95,8 +97,11 @@ public: MappingItem(wxWindow *parent); ~MappingItem(); - void update_data(TrayData data); - void send_event(int fliament_id); + void update_data(TrayData data); + void send_event(int fliament_id); + void set_tray_index(wxString t_index) {m_tray_index = t_index;}; + + wxString m_tray_index; wxColour m_coloul; wxString m_name; TrayData m_tray_data; @@ -109,7 +114,18 @@ public: void doRender(wxDC &dc); }; -class AmsMapingPopup : public wxPopupTransientWindow +class MappingContainer : public wxPanel +{ +public: + wxBitmap ams_mapping_item_container; + MappingContainer(wxWindow* parent); + ~MappingContainer(); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); +}; + +class AmsMapingPopup : public PopupWindow { public: AmsMapingPopup(wxWindow *parent); @@ -118,7 +134,8 @@ public: wxStaticText * m_warning_text{nullptr}; std::vector m_materials_list; - std::vector m_amsmapping_sizer_list; + std::vector m_amsmapping_container_sizer_list; + std::vector m_amsmapping_container_list; std::vector m_mapping_item_list; bool m_has_unmatch_filament {false}; @@ -130,7 +147,7 @@ public: void update_materials_list(std::vector list); void set_tag_texture(std::string texture); void update_ams_data(std::map amsList); - void add_ams_mapping(std::vector tray_data); + void add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer); void set_current_filament_id(int id){m_current_filament_id = id;}; int get_current_filament_id(){return m_current_filament_id;}; bool is_match_material(std::string material); @@ -141,7 +158,7 @@ public: std::vector parse_ams_mapping(std::map amsList); }; -class AmsMapingTipPopup : public wxPopupTransientWindow +class AmsMapingTipPopup : public PopupWindow { public: AmsMapingTipPopup(wxWindow *parent); @@ -161,7 +178,7 @@ public: wxStaticText * m_tip_disable_ams; }; -class AmsHumidityTipPopup : public wxPopupTransientWindow +class AmsHumidityTipPopup : public PopupWindow { public: AmsHumidityTipPopup(wxWindow* parent); @@ -181,7 +198,7 @@ public: Button* m_button_confirm; }; -class AmsTutorialPopup : public wxPopupTransientWindow +class AmsTutorialPopup : public PopupWindow { public: Label* text_title; @@ -203,7 +220,7 @@ public: }; -class AmsIntroducePopup : public wxPopupTransientWindow +class AmsIntroducePopup : public PopupWindow { public: bool is_enable_ams = {false}; diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index ac91d86196..f94ee1170c 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -492,6 +492,7 @@ void AuFile::on_set_cover() thumbnail_img.SaveFile(encode_path(middle_img_path.c_str())); } + wxGetApp().plater()->set_plater_dirty(true); auto evt = wxCommandEvent(EVT_AUXILIARY_UPDATE_COVER); evt.SetString(s_default_folders[m_type]); evt.SetEventObject(m_parent); @@ -1099,26 +1100,26 @@ void AuxiliaryPanel::update_all_cover() wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); wxBoxSizer *m_sizer_designer = new wxBoxSizer(wxHORIZONTAL); - auto m_text_designer = new wxStaticText(this, wxID_ANY, _L("Author"), wxDefaultPosition, wxSize(120, -1), 0); + auto m_text_designer = new wxStaticText(this, wxID_ANY, _L("Author"), wxDefaultPosition, wxSize(180, -1), 0); m_text_designer->Wrap(-1); m_text_designer->SetForegroundColour(*wxBLACK); m_sizer_designer->Add(m_text_designer, 0, wxALIGN_CENTER, 0); m_input_designer = new ::TextInput(this, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(450), FromDIP(30)), wxTE_PROCESS_ENTER); m_input_designer->GetTextCtrl()->SetFont(::Label::Body_14); - m_input_designer->GetTextCtrl()->SetSize(wxSize(FromDIP(450), FromDIP(22))); + m_input_designer->GetTextCtrl()->SetSize(wxSize(FromDIP(450), -1)); m_sizer_designer->Add(m_input_designer, 0, wxALIGN_CENTER, 0); wxBoxSizer *m_sizer_model_name = new wxBoxSizer(wxHORIZONTAL); - auto m_text_model_name = new wxStaticText(this, wxID_ANY, _L("Model Name"), wxDefaultPosition, wxSize(120, -1), 0); + auto m_text_model_name = new wxStaticText(this, wxID_ANY, _L("Model Name"), wxDefaultPosition, wxSize(180, -1), 0); m_text_model_name->SetForegroundColour(*wxBLACK); m_text_model_name->Wrap(-1); m_sizer_model_name->Add(m_text_model_name, 0, wxALIGN_CENTER, 0); m_imput_model_name = new ::TextInput(this, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition,wxSize(FromDIP(450),FromDIP(30)), wxTE_PROCESS_ENTER); m_imput_model_name->GetTextCtrl()->SetFont(::Label::Body_14); - m_imput_model_name->GetTextCtrl()->SetSize(wxSize(FromDIP(450), FromDIP(22))); + m_imput_model_name->GetTextCtrl()->SetSize(wxSize(FromDIP(450), -1)); m_sizer_model_name->Add(m_imput_model_name, 0, wxALIGN_CENTER, 0); /* @@ -1224,8 +1225,8 @@ void DesignerPanel::update_info() void DesignerPanel::msw_rescale() { - m_input_designer->GetTextCtrl()->SetSize(wxSize(FromDIP(450), FromDIP(22))); - m_imput_model_name->GetTextCtrl()->SetSize(wxSize(FromDIP(450), FromDIP(22))); + m_input_designer->GetTextCtrl()->SetSize(wxSize(FromDIP(450), -1)); + m_imput_model_name->GetTextCtrl()->SetSize(wxSize(FromDIP(450), -1)); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index 16d58c9398..e3dd7f9869 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -119,7 +119,8 @@ void BBLStatusBarSend::set_range(int val) void BBLStatusBarSend::clear_percent() { - set_percent_text(wxEmptyString); + //set_percent_text(wxEmptyString); + m_cancelbutton->Hide(); } void BBLStatusBarSend::show_progress(bool show) @@ -235,6 +236,7 @@ void BBLStatusBarSend::set_status_text(const wxString& txt) wxString str; format_text(m_status_text, m_self->FromDIP(280), txt, str); m_status_text->SetLabelText(str); + m_self->Layout(); //if (is_english_text(str)) m_status_text->Wrap(m_self->FromDIP(280)); } @@ -279,6 +281,7 @@ bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percen void BBLStatusBarSend::reset() { + m_cancelbutton->Show(); set_status_text(""); m_was_cancelled = false; set_progress(0); diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 8d90aedd57..ceb1652ac3 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -263,7 +263,7 @@ void BBLTopbar::Init(wxFrame* parent) m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE); m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap); this->EnableTool(m_publish_item->GetId(), false); - this->AddSpacer(FromDIP(12)); + this->AddSpacer(FromDIP(4)); /*wxBitmap model_store_bitmap = create_scaled_bitmap("topbar_store", nullptr, TOPBAR_ICON_SIZE); m_model_store_item = this->AddTool(ID_MODEL_STORE, "", model_store_bitmap); @@ -271,12 +271,12 @@ void BBLTopbar::Init(wxFrame* parent) */ //this->AddSeparator(); - this->AddSpacer(FromDIP(6)); + this->AddSpacer(FromDIP(4)); wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); - this->AddSpacer(FromDIP(6)); + this->AddSpacer(FromDIP(4)); maximize_bitmap = create_scaled_bitmap("topbar_max", nullptr, TOPBAR_ICON_SIZE); window_bitmap = create_scaled_bitmap("topbar_win", nullptr, TOPBAR_ICON_SIZE); @@ -287,7 +287,7 @@ void BBLTopbar::Init(wxFrame* parent) maximize_btn = this->AddTool(wxID_MAXIMIZE_FRAME, "", maximize_bitmap); } - this->AddSpacer(FromDIP(6)); + this->AddSpacer(FromDIP(4)); wxBitmap close_bitmap = create_scaled_bitmap("topbar_close", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* close_btn = this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 5e9fe0f96f..7a32c3d239 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -185,14 +185,9 @@ std::string BackgroundSlicingProcess::output_filepath_for_project(const boost::f // from the G-code generator. void BackgroundSlicingProcess::process_fff() { - assert(m_print == m_fff_print); - PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - - m_fff_print->is_BBL_printer() = - preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset( - &preset_bundle); - - + assert(m_print == m_fff_print); + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + m_fff_print->is_BBL_printer() = preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle); //BBS: add the logic to process from an existed gcode file if (m_print->finished()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: skip slicing, to process previous gcode file")%__LINE__; diff --git a/src/slic3r/GUI/BonjourDialog.cpp b/src/slic3r/GUI/BonjourDialog.cpp index 516b1ab4a5..123f456770 100644 --- a/src/slic3r/GUI/BonjourDialog.cpp +++ b/src/slic3r/GUI/BonjourDialog.cpp @@ -16,6 +16,7 @@ #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/I18N.hpp" #include "slic3r/Utils/Bonjour.hpp" +#include "Widgets/Button.hpp" namespace Slic3r { @@ -60,6 +61,8 @@ BonjourDialog::BonjourDialog(wxWindow *parent, Slic3r::PrinterTechnology tech) , timer_state(0) , tech(tech) { + SetBackgroundColour(*wxWHITE); + const int em = GUI::wxGetApp().em_unit(); list->SetMinSize(wxSize(80 * em, 30 * em)); @@ -78,10 +81,39 @@ BonjourDialog::BonjourDialog(wxWindow *parent, Slic3r::PrinterTechnology tech) vsizer->Add(list, 1, wxEXPAND | wxALL, em); - wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); - button_sizer->Add(new wxButton(this, wxID_OK, "OK"), 0, wxALL, em); - button_sizer->Add(new wxButton(this, wxID_CANCEL, "Cancel"), 0, wxALL, em); - // ^ Note: The Ok/Cancel labels are translated by wxWidgets + + auto button_sizer = new wxBoxSizer(wxHORIZONTAL); + + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + auto m_button_ok = new Button(this, _L("OK")); + m_button_ok->SetBackgroundColor(btn_bg_green); + m_button_ok->SetBorderColor(*wxWHITE); + m_button_ok->SetTextColor(*wxWHITE); + m_button_ok->SetFont(Label::Body_12); + m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetCornerRadius(FromDIP(12)); + + m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { this->EndModal(wxID_OK); }); + + auto m_button_cancel = new Button(this, _L("Cancel")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetCornerRadius(FromDIP(12)); + + m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { this->EndModal(wxID_CANCEL); }); + + button_sizer->AddStretchSpacer(); + button_sizer->Add(m_button_ok, 0, wxALL, FromDIP(5)); + button_sizer->Add(m_button_cancel, 0, wxALL, FromDIP(5)); vsizer->Add(button_sizer, 0, wxALIGN_CENTER); SetSizerAndFit(vsizer); diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 0a68e6de34..cdb4e521ee 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -33,7 +33,7 @@ CalibrationDialog::CalibrationDialog(Plater *plater) auto body_panel = new wxPanel(this, wxID_ANY); body_panel->SetBackgroundColour(*wxWHITE); - auto cali_left_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(303), FromDIP(243))); + auto cali_left_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(303), -1)); cali_left_panel->SetBackgroundColor(BG_COLOR); cali_left_panel->SetBorderColor(BG_COLOR); @@ -73,9 +73,7 @@ CalibrationDialog::CalibrationDialog(Plater *plater) cali_left_sizer->Add(0, 0, 0, wxTOP, FromDIP(5)); auto cali_left_text_body = - new wxStaticText(cali_left_panel, wxID_ANY, - _L("The calibration program detects the status of your device automatically to minimize deviation.\nIt keeps the device performing optimally."), - wxDefaultPosition, wxSize(FromDIP(260), -1), 0); + new Label(cali_left_panel, _L("The calibration program detects the status of your device automatically to minimize deviation.\nIt keeps the device performing optimally.")); cali_left_text_body->Wrap(FromDIP(260)); cali_left_text_body->SetForegroundColour(wxColour(0x6B, 0x6B, 0x6B)); cali_left_text_body->SetBackgroundColour(BG_COLOR); @@ -174,7 +172,6 @@ CalibrationDialog::CalibrationDialog(Plater *plater) Fit(); m_calibration_btn->Bind(wxEVT_LEFT_DOWN, &CalibrationDialog::on_start_calibration, this); - wxGetApp().UpdateDlgDarkUI(this); } CalibrationDialog::~CalibrationDialog() {} @@ -296,7 +293,10 @@ void CalibrationDialog::update_machine_obj(MachineObject *obj) { m_obj = obj; } bool CalibrationDialog::Show(bool show) { - if (show) { CentreOnParent(); } + if (show) { + wxGetApp().UpdateDlgDarkUI(this); + CentreOnParent(); + } return DPIDialog::Show(show); } diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index b8fae5ca91..fbf0450a96 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -12,9 +12,9 @@ namespace Slic3r { namespace GUI { -wxIMPLEMENT_CLASS(CameraPopup, wxPopupTransientWindow); +wxIMPLEMENT_CLASS(CameraPopup, PopupWindow); -wxBEGIN_EVENT_TABLE(CameraPopup, wxPopupTransientWindow) +wxBEGIN_EVENT_TABLE(CameraPopup, PopupWindow) EVT_MOUSE_EVENTS(CameraPopup::OnMouse ) EVT_SIZE(CameraPopup::OnSize) EVT_SET_FOCUS(CameraPopup::OnSetFocus ) @@ -24,10 +24,12 @@ wxEND_EVENT_TABLE() wxDEFINE_EVENT(EVT_VCAMERA_SWITCH, wxMouseEvent); wxDEFINE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent); +#define CAMERAPOPUP_CLICK_INTERVAL 20 + const wxColour TEXT_COL = wxColour(43, 52, 54); CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) - : wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), + : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), m_obj(obj) { #ifdef __WINDOWS__ @@ -84,10 +86,26 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) main_sizer->Add(top_sizer, 0, wxALL, FromDIP(10)); auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en"); - vcamera_guide_link = new wxHyperlinkCtrl(m_panel, wxID_ANY, _L("Show \"Live Video\" guide page."), - url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + auto text = _L("Show \"Live Video\" guide page."); + + wxBoxSizer* link_sizer = new wxBoxSizer(wxVERTICAL); + vcamera_guide_link = new Label(m_panel, text); + vcamera_guide_link->Wrap(-1); + vcamera_guide_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); + auto text_size = vcamera_guide_link->GetTextExtent(text); + vcamera_guide_link->Bind(wxEVT_LEFT_DOWN, [this, url](wxMouseEvent& e) {wxLaunchDefaultBrowser(url); }); + + link_underline = new wxPanel(m_panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + link_underline->SetBackgroundColour(wxColour(0x1F, 0x8E, 0xEA)); + link_underline->SetSize(wxSize(text_size.x, 1)); + link_underline->SetMinSize(wxSize(text_size.x, 1)); + vcamera_guide_link->Hide(); - main_sizer->Add(vcamera_guide_link, 0, wxALL, FromDIP(15)); + link_underline->Hide(); + link_sizer->Add(vcamera_guide_link, 0, wxALL, 0); + link_sizer->Add(link_underline, 0, wxALL, 0); + + main_sizer->Add(link_sizer, 0, wxALL, FromDIP(15)); m_panel->SetSizer(main_sizer); m_panel->Layout(); @@ -105,6 +123,10 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) m_panel->Bind(wxEVT_LEFT_UP, &CameraPopup::OnLeftUp, this); #endif //APPLE + this->Bind(wxEVT_TIMER, &CameraPopup::stop_interval, this); + m_interval_timer = new wxTimer(); + m_interval_timer->SetOwner(this); + check_func_supported(); wxGetApp().UpdateDarkUIWin(this); } @@ -141,7 +163,9 @@ void CameraPopup::Popup(wxWindow *WXUNUSED(focus)) wxSize win_size = this->GetSize(); curr_position.x -= win_size.x; this->SetPosition(curr_position); - wxPopupTransientWindow::Popup(); + + if (!m_is_in_interval) + PopupWindow::Popup(); } wxWindow* CameraPopup::create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int padding_left) @@ -225,10 +249,12 @@ void CameraPopup::sync_vcamera_state(bool show_vcamera) if (is_vcamera_show) { m_switch_vcamera->SetValue(true); vcamera_guide_link->Show(); + link_underline->Show(); } else { m_switch_vcamera->SetValue(false); vcamera_guide_link->Hide(); + link_underline->Hide(); } rescale(); @@ -248,12 +274,15 @@ void CameraPopup::check_func_supported() if (m_obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_CAMERA) && m_obj->has_ipcam) { m_text_vcamera->Show(); m_switch_vcamera->Show(); - if (is_vcamera_show) + if (is_vcamera_show) { vcamera_guide_link->Show(); + link_underline->Show(); + } } else { m_text_vcamera->Hide(); m_switch_vcamera->Hide(); vcamera_guide_link->Hide(); + link_underline->Hide(); } allow_alter_resolution = (m_obj->is_function_supported(PrinterFunction::FUNC_ALTER_RESOLUTION) && m_obj->has_ipcam); @@ -318,7 +347,7 @@ void CameraPopup::rescale() m_panel->Layout(); main_sizer->Fit(m_panel); SetClientSize(m_panel->GetSize()); - wxPopupTransientWindow::Update(); + PopupWindow::Update(); } void CameraPopup::OnLeftUp(wxMouseEvent &event) @@ -367,18 +396,31 @@ void CameraPopup::OnLeftUp(wxMouseEvent &event) } } +void CameraPopup::start_interval() +{ + m_interval_timer->Start(CAMERAPOPUP_CLICK_INTERVAL); + m_is_in_interval = true; +} + +void CameraPopup::stop_interval(wxTimerEvent& event) +{ + m_is_in_interval = false; + m_interval_timer->Stop(); +} + void CameraPopup::OnDismiss() { - wxPopupTransientWindow::OnDismiss(); + PopupWindow::OnDismiss(); + this->start_interval(); } bool CameraPopup::ProcessLeftDown(wxMouseEvent &event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } bool CameraPopup::Show(bool show) { - return wxPopupTransientWindow::Show(show); + return PopupWindow::Show(show); } void CameraPopup::OnSize(wxSizeEvent &event) diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index f5a7833c9e..bab08850cd 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -13,6 +13,7 @@ #include #include "Widgets/SwitchButton.hpp" #include "Widgets/RadioBox.hpp" +#include "Widgets/PopupWindow.hpp" namespace Slic3r { namespace GUI { @@ -20,13 +21,13 @@ namespace GUI { wxDECLARE_EVENT(EVT_VCAMERA_SWITCH, wxMouseEvent); wxDECLARE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent); -class CameraPopup : public wxPopupTransientWindow +class CameraPopup : public PopupWindow { public: CameraPopup(wxWindow *parent, MachineObject* obj = nullptr); virtual ~CameraPopup() {} - // wxPopupTransientWindow virtual methods are all overridden to log them + // PopupWindow virtual methods are all overridden to log them virtual void Popup(wxWindow *focus = NULL) wxOVERRIDE; virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE; @@ -59,6 +60,8 @@ protected: private: MachineObject* m_obj { nullptr }; + wxTimer* m_interval_timer{nullptr}; + bool m_is_in_interval{ false }; wxStaticText* m_text_recording; SwitchButton* m_switch_recording; wxStaticText* m_text_vcamera; @@ -70,10 +73,13 @@ private: std::vector resolution_rbtns; std::vector resolution_texts; CameraResolution curr_sel_resolution = RESOLUTION_1080P; - wxHyperlinkCtrl* vcamera_guide_link { nullptr }; + Label* vcamera_guide_link { nullptr }; + wxPanel* link_underline{ nullptr }; bool is_vcamera_show = false; bool allow_alter_resolution = false; + void start_interval(); + void stop_interval(wxTimerEvent& event); void OnMouse(wxMouseEvent &event); void OnSize(wxSizeEvent &event); void OnSetFocus(wxFocusEvent &event); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index e592857ed1..fe36cd16d7 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -430,6 +430,19 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con m_support_material_overhangs_queried = false; } + if (config->opt_bool("enable_support")) { + auto support_type = config->opt_enum("support_type"); + auto support_style = config->opt_enum("support_style"); + std::set enum_set_normal = {0, 1, 2}; + std::set enum_set_tree = {0, 3, 4, 5}; + auto & set = is_tree(support_type) ? enum_set_tree : enum_set_normal; + if (set.find(support_style) == set.end()) { + DynamicPrintConfig new_conf = *config; + new_conf.set_key_value("support_style", new ConfigOptionEnum(smsDefault)); + apply(config, &new_conf); + } + } + if (config->option("sparse_infill_density")->value == 100) { std::string sparse_infill_pattern = config->option>("sparse_infill_pattern")->serialize(); const auto &top_fill_pattern_values = config->def()->get("top_surface_pattern")->enum_values; @@ -480,6 +493,17 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } } } + + if (config->opt_enum("print_sequence") == PrintSequence::ByObject && config->opt_int("skirt_height") > 1 && config->opt_int("skirt_loops") > 0) { + const wxString msg_text = _(L("While printing by Object, the extruder may collide skirt.\nThus, reset the skirt layer to 1 to avoid that.")); + MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); + DynamicPrintConfig new_conf = *config; + is_msg_dlg_already_exist = true; + dialog.ShowModal(); + new_conf.set_key_value("skirt_height", new ConfigOptionInt(1)); + apply(config, &new_conf); + is_msg_dlg_already_exist = false; + } } void ConfigManipulation::apply_null_fff_config(DynamicPrintConfig *config, std::vector const &keys, std::map const &configs) diff --git a/src/slic3r/GUI/ConnectPrinter.cpp b/src/slic3r/GUI/ConnectPrinter.cpp index 05f11cdc39..0ceeb5d444 100644 --- a/src/slic3r/GUI/ConnectPrinter.cpp +++ b/src/slic3r/GUI/ConnectPrinter.cpp @@ -148,7 +148,7 @@ void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event) } } if (m_obj) { - m_obj->set_access_code(code.ToStdString()); + m_obj->set_user_access_code(code.ToStdString()); wxGetApp().getDeviceManager()->set_selected_machine(m_obj->dev_id); } EndModal(wxID_OK); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 79eefdde90..926242061c 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -136,6 +136,32 @@ wxColour AmsTray::get_color() return AmsTray::decode_color(color); } +void AmsTray::reset() +{ + tag_uid = ""; + setting_id = ""; + filament_setting_id = ""; + type = ""; + sub_brands = ""; + color = ""; + weight = ""; + diameter = ""; + temp = ""; + time = ""; + bed_temp_type = ""; + bed_temp = ""; + nozzle_temp_max = ""; + nozzle_temp_min = ""; + xcam_info = ""; + uuid = ""; + k = 0.0f; + n = 0.0f; + is_bbl = false; + hold_count = 0; + remain = 0; +} + + bool AmsTray::is_tray_info_ready() { if (color.empty()) @@ -302,6 +328,11 @@ std::string MachineObject::get_printer_thumbnail_img_str() return "printer_thumbnail"; } +std::string MachineObject::get_ftp_folder() +{ + return DeviceManager::get_ftp_folder(printer_type); +} + void MachineObject::set_access_code(std::string code) { this->access_code = code; @@ -518,6 +549,10 @@ Ams *MachineObject::get_curr_Ams() AmsTray *MachineObject::get_curr_tray() { + if (m_tray_now.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { + return &vt_tray; + } + Ams* curr_ams = get_curr_Ams(); if (!curr_ams) return nullptr; @@ -639,17 +674,6 @@ bool MachineObject::is_support_ams_mapping_version(std::string module, std::stri return result; } -bool MachineObject::is_only_support_cloud_print() -{ - auto ap_ver_it = module_vers.find("rv1126"); - if (ap_ver_it != module_vers.end()) { - if (ap_ver_it->second.sw_ver > "00.00.12.61") { - return false; - } - } - return true; -} - static float calc_color_distance(wxColour c1, wxColour c2) { float lab[2][3]; @@ -1229,7 +1253,7 @@ void MachineObject::parse_state_changed_event() { // parse calibration done if (last_mc_print_stage != mc_print_stage) { - if (mc_print_stage == 1 && boost::contains(m_gcode_file, "auto_cali_for_user.gcode")) { + if (mc_print_stage == 1 && boost::contains(m_gcode_file, "auto_cali_for_user")) { calibration_done = true; } else { calibration_done = false; @@ -1322,6 +1346,7 @@ bool MachineObject::is_recording() void MachineObject::parse_version_func() { auto ota_version = module_vers.find("ota"); + auto esp32_version = module_vers.find("esp32"); if (printer_type == "BL-P001" || printer_type == "BL-P002") { if (ota_version != module_vers.end()) { @@ -1348,9 +1373,13 @@ void MachineObject::parse_version_func() } } else if (printer_type == "C11") { local_use_ssl = true; + is_cloud_print_only = true; if (ota_version != module_vers.end()) { is_support_send_to_sdcard = ota_version->second.sw_ver.compare("01.02.00.00") >= 0; } + if (esp32_version != module_vers.end()) { + ams_support_auto_switch_filament_flag = esp32_version->second.sw_ver.compare("00.03.11.50") >= 0; + } } } @@ -1533,20 +1562,10 @@ int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp std::string gcode = ""; if (tray_index == 255) { - // unload gcode - gcode = "M620 S255\nM104 S250\nG28 X\nG91\nG1 Z3.0 F1200\nG90\n" - "G1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM109 S250\nG1 X120 F12000\n" - "G1 X20 Y50 F12000\nG1 Y-3\nT255\nM104 S0\nG1 X165 F5000\nG1 Y245\n" - "G91\nG1 Z-3.0 F1200\nG90\nM621 S255\n"; + gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); } else { - // load gcode - gcode = "M620 S[next_extruder]\nM104 S250\nG28 X\nG91\n\nG1 Z3.0 F1200\nG90\n" - "G1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM109 S250\nG1 X120 F12000\nG1 X20 Y50 F12000\nG1 Y-3" - "\nT[next_extruder]\nG1 X54 F12000\nG1 Y265\nM400\nM106 P1 S0\nG92 E0\nG1 E40 F200\nM400" - "\nM109 S[new_filament_temp]\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM400\nM106 P1 S0\nG1 X70 F9000" - "\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000\nG1 X70 F6000\nG1 X100 F5000\nG1 X70 F15000" - "\nG1 X100 F5000\nG1 X70 F15000\nG1 X165 F5000\nG1 Y245\nG91\nG1 Z-3.0 F1200\nG90\nM621 S[next_extruder]\n"; - + // include VIRTUAL_TRAY_ID + gcode = DeviceManager::load_gcode(printer_type, "ams_load.gcode"); boost::replace_all(gcode, "[next_extruder]", std::to_string(tray_index)); boost::replace_all(gcode, "[new_filament_temp]", std::to_string(new_temp)); } @@ -1649,7 +1668,7 @@ int MachineObject::command_ams_select_tray(std::string tray_id) int MachineObject::command_ams_control(std::string action) { //valid actions - if (action == "resume" || action == "reset" || action == "pause") { + if (action == "resume" || action == "reset" || action == "pause" || action == "done") { json j; j["print"]["command"] = "ams_control"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -1840,6 +1859,22 @@ int MachineObject::command_unload_filament() j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); return this->publish_json(j.dump()); } + else if (printer_type == "C11") { + std::string gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); + if (gcode.empty()) { + return -1; + } + + json j; + j["print"]["command"] = "gcode_line"; + j["print"]["param"] = gcode; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + + if (m_agent) + j["print"]["user_id"] = m_agent->get_user_id(); + + return this->publish_json(j.dump()); + } else { json j; j["print"]["command"] = "unload_filament"; @@ -2040,6 +2075,9 @@ void MachineObject::reset() last_mc_print_stage = -1; m_new_ver_list_exist = false; extruder_axis_status = LOAD; + nozzle_diameter = 0.0f; + + vt_tray.reset(); subtask_ = nullptr; @@ -2056,7 +2094,7 @@ int MachineObject::connect(bool is_anonymous) std::string password; if (!is_anonymous) { username = "bblp"; - password = access_code; + password = get_access_code(); } if (m_agent) { try { @@ -2624,6 +2662,19 @@ int MachineObject::parse_json(std::string payload) } #pragma endregion + try { + if (jj.contains("nozzle_diameter")) { + if (jj["nozzle_diameter"].is_number_float()) { + nozzle_diameter = jj["nozzle_diameter"].get(); + } else if (jj["nozzle_diameter"].is_string()) { + nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + } + } + } + catch(...) { + ; + } + #pragma region upgrade try { if (jj.contains("upgrade_state")) { @@ -2656,29 +2707,36 @@ int MachineObject::parse_json(std::string payload) this->command_get_version(); }); } - upgrade_display_state = jj["upgrade_state"]["dis_state"].get(); + if (upgrade_display_hold_count > 0) + upgrade_display_hold_count--; + else + upgrade_display_state = jj["upgrade_state"]["dis_state"].get(); } else { - //BBS compatibility with old version - if (upgrade_status == "DOWNLOADING" - || upgrade_status == "FLASHING" - || upgrade_status == "UPGRADE_REQUEST" - || upgrade_status == "PRE_FLASH_START" - || upgrade_status == "PRE_FLASH_SUCCESS") { - upgrade_display_state = (int)UpgradingDisplayState::UpgradingInProgress; - } - else if (upgrade_status == "UPGRADE_SUCCESS" - || upgrade_status == "DOWNLOAD_FAIL" - || upgrade_status == "FLASH_FAIL" - || upgrade_status == "PRE_FLASH_FAIL" - || upgrade_status == "UPGRADE_FAIL") { - upgrade_display_state = (int)UpgradingDisplayState::UpgradingFinished; - } + if (upgrade_display_hold_count > 0) + upgrade_display_hold_count--; else { - if (upgrade_new_version) { - upgrade_display_state = (int)UpgradingDisplayState::UpgradingAvaliable; + //BBS compatibility with old version + if (upgrade_status == "DOWNLOADING" + || upgrade_status == "FLASHING" + || upgrade_status == "UPGRADE_REQUEST" + || upgrade_status == "PRE_FLASH_START" + || upgrade_status == "PRE_FLASH_SUCCESS") { + upgrade_display_state = (int)UpgradingDisplayState::UpgradingInProgress; + } + else if (upgrade_status == "UPGRADE_SUCCESS" + || upgrade_status == "DOWNLOAD_FAIL" + || upgrade_status == "FLASH_FAIL" + || upgrade_status == "PRE_FLASH_FAIL" + || upgrade_status == "UPGRADE_FAIL") { + upgrade_display_state = (int)UpgradingDisplayState::UpgradingFinished; } else { - upgrade_display_state = (int)UpgradingDisplayState::UpgradingUnavaliable; + if (upgrade_new_version) { + upgrade_display_state = (int)UpgradingDisplayState::UpgradingAvaliable; + } + else { + upgrade_display_state = (int)UpgradingDisplayState::UpgradingUnavaliable; + } } } } @@ -3130,6 +3188,89 @@ int MachineObject::parse_json(std::string payload) vt_tray.n = jj["vt_tray"]["n"].get(); } ams_support_virtual_tray = true; + + if (vt_tray.hold_count > 0) { + vt_tray.hold_count--; + } else { + if (jj["vt_tray"].contains("tag_uid")) + vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); + else + vt_tray.tag_uid = "0"; + if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { + vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); + std::string type = jj["vt_tray"]["tray_type"].get(); + if (vt_tray.setting_id == "GFS00") { + vt_tray.type = "PLA-S"; + } + else if (vt_tray.setting_id == "GFS01") { + vt_tray.type = "PA-S"; + } + else { + vt_tray.type = type; + } + } + else { + vt_tray.setting_id = ""; + vt_tray.type = ""; + } + if (jj["vt_tray"].contains("tray_sub_brands")) + vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); + else + vt_tray.sub_brands = ""; + if (jj["vt_tray"].contains("tray_weight")) + vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); + else + vt_tray.weight = ""; + if (jj["vt_tray"].contains("tray_diameter")) + vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); + else + vt_tray.diameter = ""; + if (jj["vt_tray"].contains("tray_temp")) + vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); + else + vt_tray.temp = ""; + if (jj["vt_tray"].contains("tray_time")) + vt_tray.time = jj["vt_tray"]["tray_time"].get(); + else + vt_tray.time = ""; + if (jj["vt_tray"].contains("bed_temp_type")) + vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); + else + vt_tray.bed_temp_type = ""; + if (jj["vt_tray"].contains("bed_temp")) + vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); + else + vt_tray.bed_temp = ""; + if (jj["vt_tray"].contains("nozzle_temp_max")) + vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); + else + vt_tray.nozzle_temp_max = ""; + if (jj["vt_tray"].contains("nozzle_temp_min")) + vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); + else + vt_tray.nozzle_temp_min = ""; + if (jj["vt_tray"].contains("xcam_info")) + vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); + else + vt_tray.xcam_info = ""; + if (jj["vt_tray"].contains("tray_uuid")) + vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); + else + vt_tray.uuid = "0"; + if (jj["vt_tray"].contains("tray_color")) { + auto color = jj["vt_tray"]["tray_color"].get(); + vt_tray.update_color_from_str(color); + } + else { + vt_tray.color = ""; + } + if (jj["vt_tray"].contains("remain")) { + vt_tray.remain = jj["vt_tray"]["remain"].get(); + } + else { + vt_tray.remain = -1; + } + } } else { ams_support_virtual_tray = false; } @@ -3159,24 +3300,39 @@ int MachineObject::parse_json(std::string payload) if (jj["ams_id"].is_number()) { int ams_id = jj["ams_id"].get(); - auto ams_it = amsList.find(std::to_string(ams_id)); - if (ams_it != amsList.end()) { - int tray_id = jj["tray_id"].get(); - auto tray_it = ams_it->second->trayList.find(std::to_string(tray_id)); - if (tray_it != ams_it->second->trayList.end()) { - BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; - tray_it->second->nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); - tray_it->second->nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); - tray_it->second->type = jj["tray_type"].get(); - tray_it->second->color = jj["tray_color"].get(); - tray_it->second->setting_id = jj["tray_info_idx"].get(); - // delay update - tray_it->second->set_hold_count(); - } else { - BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in trayList, tray_id=" << tray_id; - } + int tray_id = 0; + if (jj.contains("tray_id")) { + tray_id = jj["tray_id"].get(); + } + if (ams_id == 255 && tray_id == VIRTUAL_TRAY_ID) { + BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; + vt_tray.nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); + vt_tray.nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); + vt_tray.type = jj["tray_type"].get(); + vt_tray.color = jj["tray_color"].get(); + vt_tray.setting_id = jj["tray_info_idx"].get(); + // delay update + vt_tray.set_hold_count(); } else { - BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in amsList, ams_id=" << ams_id; + auto ams_it = amsList.find(std::to_string(ams_id)); + if (ams_it != amsList.end()) { + tray_id = jj["tray_id"].get(); + auto tray_it = ams_it->second->trayList.find(std::to_string(tray_id)); + if (tray_it != ams_it->second->trayList.end()) { + BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; + tray_it->second->nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); + tray_it->second->nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); + tray_it->second->type = jj["tray_type"].get(); + tray_it->second->color = jj["tray_color"].get(); + tray_it->second->setting_id = jj["tray_info_idx"].get(); + // delay update + tray_it->second->set_hold_count(); + } else { + BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in trayList, tray_id=" << tray_id; + } + } else { + BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in amsList, ams_id=" << ams_id; + } } } } else if (jj["command"].get() == "xcam_control_set") { @@ -3336,6 +3492,21 @@ int MachineObject::parse_json(std::string payload) } } catch (...) {} + // upgrade + try { + if (j.contains("upgrade")) { + if (j["upgrade"].contains("command")) { + if (j["upgrade"]["command"].get() == "upgrade_confirm") { + this->upgrade_display_state == UpgradingInProgress; + upgrade_display_hold_count = HOLD_COUNT_MAX; + BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; + } + } + } + } + catch (...) { + ; + } // event info try { @@ -3645,6 +3816,7 @@ void DeviceManager::on_machine_alive(std::string json_str) AppConfig* config = Slic3r::GUI::wxGetApp().app_config; if (config) { obj->set_access_code(Slic3r::GUI::wxGetApp().app_config->get("access_code", dev_id)); + obj->set_user_access_code(Slic3r::GUI::wxGetApp().app_config->get("user_access_code", dev_id)); } localMachineList.insert(std::make_pair(dev_id, obj)); @@ -3789,6 +3961,18 @@ bool DeviceManager::set_selected_machine(std::string dev_id) BOOST_LOG_TRIVIAL(info) << "set_selected_machine=" << dev_id; auto my_machine_list = get_my_machine_list(); auto it = my_machine_list.find(dev_id); + + // disconnect last + auto last_selected = my_machine_list.find(selected_machine); + if (last_selected != my_machine_list.end()) { + if (last_selected->second->connection_type() == "lan") { + if (last_selected->second->is_connecting()) + return false; + m_agent->disconnect_printer(); + } + } + + // connect curr if (it != my_machine_list.end()) { if (selected_machine == dev_id) { if (it->second->connection_type() != "lan") { @@ -3815,7 +3999,6 @@ bool DeviceManager::set_selected_machine(std::string dev_id) it->second->reset_update_time(); } } else { - m_agent->disconnect_printer(); it->second->reset(); it->second->connect(); it->second->set_lan_mode_connection_state(true); @@ -4007,6 +4190,7 @@ void DeviceManager::load_last_machine() } json DeviceManager::function_table = json::object(); +json DeviceManager::filaments_blacklist = json::object(); std::string DeviceManager::parse_printer_type(std::string type_str) { @@ -4036,6 +4220,20 @@ std::string DeviceManager::get_printer_display_name(std::string type_str) return ""; } +std::string DeviceManager::get_ftp_folder(std::string type_str) +{ + if (DeviceManager::function_table.contains("printers")) { + for (auto printer : DeviceManager::function_table["printers"]) { + if (printer.contains("model_id") && printer["model_id"].get() == type_str) { + if (printer.contains("ftp_folder")) { + return printer["ftp_folder"].get(); + } + } + } + } + return ""; +} + std::string DeviceManager::get_printer_thumbnail_img(std::string type_str) { if (DeviceManager::function_table.contains("printers")) { @@ -4115,4 +4313,96 @@ bool DeviceManager::load_functional_config(std::string config_file) return true; } +bool DeviceManager::load_filaments_blacklist_config(std::string config_file) +{ + filaments_blacklist = json::object(); + std::ifstream json_file(config_file.c_str()); + + try { + if (json_file.is_open()) { + json_file >> filaments_blacklist; + return true; + } + else { + BOOST_LOG_TRIVIAL(error) << "load filaments blacklist config failed, file = " << config_file; + } + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "load filaments blacklist config failed, file = " << config_file; + return false; + } + return true; +} + +void DeviceManager::check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info) +{ + in_blacklist = false; + + if (filaments_blacklist.contains("blacklist")) { + for (auto prohibited_filament : filaments_blacklist["blacklist"]) { + + std::string vendor; + std::string type; + std::string action; + std::string description; + + if (prohibited_filament.contains("vendor") && + prohibited_filament.contains("type") && + prohibited_filament.contains("action") && + prohibited_filament.contains("description")) + { + vendor = prohibited_filament["vendor"].get(); + type = prohibited_filament["type"].get(); + action = prohibited_filament["action"].get(); + description = prohibited_filament["description"].get(); + } + else { + return; + } + + std::transform(vendor.begin(), vendor.end(), vendor.begin(), ::tolower); + std::transform(tag_vendor.begin(), tag_vendor.end(), tag_vendor.begin(), ::tolower); + std::transform(tag_type.begin(), tag_type.end(), tag_type.begin(), ::tolower); + std::transform(type.begin(), type.end(), type.begin(), ::tolower); + + //third party + if (vendor == "third party") { + if ("bambulab" != vendor && tag_type == type) { + in_blacklist = true; + ac = action; + info = description; + return; + } + } + else { + if (vendor == tag_vendor && tag_type == type) { + in_blacklist = true; + ac = action; + info = description; + return; + } + } + } + } +} + +std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_file) +{ + std::string gcode_full_path = Slic3r::resources_dir() + "/printers/" + gcode_file; + std::ifstream gcode(encode_path(gcode_full_path.c_str()).c_str()); + try { + std::stringstream gcode_str; + if (gcode.is_open()) { + gcode_str << gcode.rdbuf(); + gcode.close(); + return gcode_str.str(); + } + } catch(...) { + BOOST_LOG_TRIVIAL(error) << "load gcode file failed, file = " << gcode_file << ", path = " << gcode_full_path; + } + + + return ""; +} + } // namespace Slic3r diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index cadfef4187..13c066f945 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -178,6 +178,8 @@ public: if (digit1 == -1 || digit2 == -1) break; ret[j] = float(digit1 * 16 + digit2); } + } else { + return wxColour(255, 255, 255); } return wxColour(ret[0], ret[1], ret[2]); } @@ -216,6 +218,8 @@ public: void update_color_from_str(std::string color); wxColour get_color(); + void reset(); + bool is_tray_info_ready(); bool is_unset_third_filament(); std::string get_display_filament_type(); @@ -401,15 +405,20 @@ public: std::string dev_ip; std::string dev_id; bool local_use_ssl { false }; + float nozzle_diameter { 0.0f }; std::string dev_connection_type; /* lan | cloud */ std::string connection_type() { return dev_connection_type; } void set_dev_ip(std::string ip) {dev_ip = ip;}; - bool has_access_right() { return !access_code.empty(); } + bool has_access_right() { return !get_access_code().empty(); } + std::string get_ftp_folder(); void set_access_code(std::string code); std::string get_access_code(); + void set_user_access_code(std::string code); + std::string get_user_access_code(); bool is_lan_mode_printer(); + //PRINTER_TYPE printer_type = PRINTER_3DPrinter_UKNOWN; std::string printer_type; /* model_id */ @@ -460,7 +469,7 @@ public: int ams_version = 0; std::string m_ams_id; // local ams : "0" ~ "3" std::string m_tray_id; // local tray id : "0" ~ "3" - std::string m_tray_now; // tray_now : "0" ~ "15" or "255" + std::string m_tray_now; // tray_now : "0" ~ "15" or "254", "255" std::string m_tray_tar; // tray_tar : "0" ~ "15" or "255" int extrusion_cali_hold_count = 0; @@ -484,7 +493,6 @@ public: bool can_unload_filament(); bool is_U0_firmware(); bool is_support_ams_mapping(); - bool is_only_support_cloud_print(); static bool is_support_ams_mapping_version(std::string module, std::string version); int ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id = std::vector()); @@ -530,6 +538,7 @@ public: bool upgrade_new_version { false }; bool upgrade_consistency_request { false }; int upgrade_display_state = 0; // 0 : upgrade unavailable, 1: upgrade idle, 2: upgrading, 3: upgrade_finished + int upgrade_display_hold_count = 0; PrinterFirmwareType firmware_type; // engineer|production std::string upgrade_progress; std::string upgrade_message; @@ -630,6 +639,8 @@ public: bool is_support_1080dpi {false}; bool is_support_ai_monitoring {false}; bool is_support_ams_humidity {true}; + bool is_support_filament_edit_virtual_tray {true}; + bool is_cloud_print_only {false}; /* sdcard */ MachineObject::SdcardState sdcard_state { NO_SDCARD }; @@ -827,14 +838,20 @@ public: void load_last_machine(); static json function_table; + static json filaments_blacklist; + static std::string parse_printer_type(std::string type_str); static std::string get_printer_display_name(std::string type_str); static std::string get_printer_thumbnail_img(std::string type_str); + static std::string get_ftp_folder(std::string type_str); static bool is_function_supported(std::string type_str, std::string function_name); static std::vector get_resolution_supported(std::string type_str); static bool get_bed_temperature_limit(std::string type_str, int& limit); static bool load_functional_config(std::string config_file); + static bool load_filaments_blacklist_config(std::string config_file); + static void check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info); + static std::string load_gcode(std::string type_str, std::string gcode_file); }; } // namespace Slic3r diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index 5a08a4e51d..d08afec0ab 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -65,10 +65,10 @@ void ExtrusionCalibration::create() #else m_comboBox_nozzle_dia = new ComboBox(m_step_1_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, EXTRUSION_CALIBRATION_BED_COMBOX, 0, nullptr, wxCB_READONLY); #endif - m_comboBox_nozzle_dia->AppendString("0.2"); - m_comboBox_nozzle_dia->AppendString("0.4"); - m_comboBox_nozzle_dia->AppendString("0.6"); - m_comboBox_nozzle_dia->AppendString("0.8"); + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f", 0.2)); + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f", 0.4)); + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f", 0.6)); + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f", 0.8)); select_sizer->Add(m_comboBox_nozzle_dia, 0, wxEXPAND); select_sizer->Add(0, EXTRUSION_CALIBRATION_WIDGET_GAP, 0, 0); @@ -170,10 +170,10 @@ void ExtrusionCalibration::create() m_button_cali = new Button(m_step_1_panel, _L("Start calibration")); m_btn_bg_green = StateColor(std::pair(wxColour(238, 238, 238), StateColor::Disabled), std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_cali->SetBackgroundColor(m_btn_bg_green); m_button_cali->SetFont(Label::Body_13); - m_button_cali->SetBorderColor({ std::pair(wxColour(238, 238, 238), StateColor::Disabled), std::pair(wxColour(0, 150, 136), StateColor::Enabled) }); + m_button_cali->SetBorderColor({ std::pair(wxColour(238, 238, 238), StateColor::Disabled), std::pair(wxColour(0, 174, 66), StateColor::Enabled) }); m_button_cali->SetTextColor({ std::pair(wxColour(172, 172, 172), StateColor::Disabled), std::pair(EXTRUSION_CALIBRATION_GREY200, StateColor::Enabled) }); m_button_cali->SetCornerRadius(FromDIP(12)); m_button_cali->SetMinSize(wxSize(-1, FromDIP(24))); @@ -181,9 +181,9 @@ void ExtrusionCalibration::create() m_cali_cancel = new Button(m_step_1_panel, _L("Cancel")); m_btn_bg_green = StateColor(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_cali_cancel->SetBackgroundColor(m_btn_bg_green); - m_cali_cancel->SetBorderColor(wxColour(0, 150, 136)); + m_cali_cancel->SetBorderColor(wxColour(0, 174, 66)); m_cali_cancel->SetTextColor(EXTRUSION_CALIBRATION_GREY200); m_cali_cancel->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE); m_cali_cancel->SetCornerRadius(FromDIP(12)); @@ -256,10 +256,10 @@ void ExtrusionCalibration::create() // save button m_button_save_result = new Button(m_step_2_panel, _L("Save")); m_btn_bg_green = StateColor(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_save_result->SetBackgroundColor(m_btn_bg_green); m_button_save_result->SetFont(Label::Body_13); - m_button_save_result->SetBorderColor(wxColour(0, 150, 136)); + m_button_save_result->SetBorderColor(wxColour(0, 174, 66)); m_button_save_result->SetTextColor(EXTRUSION_CALIBRATION_GREY200); m_button_save_result->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE); m_button_save_result->SetCornerRadius(FromDIP(12)); @@ -660,8 +660,6 @@ void ExtrusionCalibration::update_combobox_filaments() } for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - if (filament_it->setting_id.empty()) continue; - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); for (auto printer_str : printer_strs->values) { diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index f242ce923e..4852264200 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1021,6 +1021,9 @@ void Choice::BUILD() if (m_opt.height >= 0) size.SetHeight(m_opt.height*m_em_unit); if (m_opt.width >= 0) size.SetWidth(m_opt.width*m_em_unit); + if (m_opt.nullable) + m_last_meaningful_value = dynamic_cast(m_opt.default_value.get())->get_at(0); + choice_ctrl* temp; auto dynamic_list = dynamic_lists.find(m_opt.opt_key); if (dynamic_list != dynamic_lists.end()) @@ -1209,7 +1212,7 @@ void Choice::set_selection() void Choice::set_value(const std::string& value, bool change_event) //! Redundant? { - m_disable_change_event = !change_event; + m_disable_change_event = !change_event; size_t idx=0; for (auto el : m_opt.enum_values) @@ -1291,10 +1294,10 @@ void Choice::set_value(const boost::any& value, bool change_event) if (m_opt_id.compare("host_type") == 0 && val != 0 && m_opt.enum_values.size() > field->GetCount()) // for case, when PrusaLink isn't used as a HostType val--; - if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "sparse_infill_pattern") + if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "sparse_infill_pattern" || m_opt_id == "support_style") { std::string key; - const t_config_enum_values& map_names = ConfigOptionEnum::get_enum_values(); + const t_config_enum_values& map_names = *m_opt.enum_keys_map; for (auto it : map_names) if (val == it.second) { key = it.first; @@ -1305,6 +1308,12 @@ void Choice::set_value(const boost::any& value, bool change_event) auto it = std::find(values.begin(), values.end(), key); val = it == values.end() ? 0 : it - values.begin(); } + if (m_opt.nullable) { + if (val != ConfigOptionEnumsGenericNullable::nil_value()) + m_last_meaningful_value = value; + else + val = -1; + } field->SetSelection(val); break; } @@ -1370,9 +1379,11 @@ boost::any& Choice::get_value() // BBS if (m_opt.type == coEnum || m_opt.type == coEnums) { - if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "sparse_infill_pattern") { + if (m_opt.nullable && field->GetSelection() == -1) + m_value = ConfigOptionEnumsGenericNullable::nil_value(); + else if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "sparse_infill_pattern" || m_opt_id == "support_style") { const std::string& key = m_opt.enum_values[field->GetSelection()]; - m_value = int(ConfigOptionEnum::get_enum_values().at(key)); + m_value = int(m_opt.enum_keys_map->at(key)); } // Support ThirdPartyPrinter else if (m_opt_id.compare("host_type") == 0 && m_opt.enum_values.size() > field->GetCount()) { @@ -1404,6 +1415,20 @@ boost::any& Choice::get_value() return m_value; } +void Choice::set_last_meaningful_value() +{ + if (m_opt.nullable) { + set_value(m_last_meaningful_value, false); + on_change_field(); + } +} + +void Choice::set_na_value() +{ + dynamic_cast(window)->SetSelection(-1); + on_change_field(); +} + void Choice::enable() { dynamic_cast(window)->Enable(); } void Choice::disable() { dynamic_cast(window)->Disable(); } diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 879cbdb469..1a997a8eba 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -386,6 +386,9 @@ public: void set_values(const wxArrayString &values); boost::any& get_value() override; + void set_last_meaningful_value() override; + void set_na_value() override; + void msw_rescale() override; void enable() override ;//{ dynamic_cast(window)->Enable(); }; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 4a29d088cc..db84d4227e 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -357,7 +357,8 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he glsafe(::glDisable(GL_BLEND)); static float last_window_width = 0.0f; - static size_t last_text_length = 0; + size_t text_line = 0; + static size_t last_text_line = 0; const ImU32 text_name_clr = m_is_dark ? IM_COL32(255, 255, 255, 0.88 * 255) : IM_COL32(38, 46, 48, 255); const ImU32 text_value_clr = m_is_dark ? IM_COL32(255, 255, 255, 0.4 * 255) : IM_COL32(144, 144, 144, 255); @@ -466,6 +467,7 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he default: break; } + text_line = 2; } else { sprintf(buf, "%s%.3f", x.c_str(), position.x() - plate->get_origin().x()); @@ -485,14 +487,15 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he sprintf(buf, "%s%.0f", speed.c_str(), m_curr_move.feedrate); ImGui::PushItemWidth(item_size); imgui.text(buf); + + text_line = 1; } // force extra frame to automatically update window size float window_width = ImGui::GetWindowWidth(); - //size_t length = strlen(buf); - if (window_width != last_window_width /*|| length != last_text_length*/) { + if (window_width != last_window_width || text_line != last_text_line) { last_window_width = window_width; - //last_text_length = length; + last_text_line = text_line; #if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT imgui.set_requires_extra_frame(); #else @@ -945,7 +948,6 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode) // BBS for first layer inspection view_type_items.push_back(EViewType::FilamentId); - options_items.push_back(EMoveType::Seam); options_items.push_back(EMoveType::Travel); options_items.push_back(EMoveType::Retract); options_items.push_back(EMoveType::Unretract); @@ -953,6 +955,8 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode) if (mode == ConfigOptionMode::comDevelop) { options_items.push_back(EMoveType::Tool_change); } + //BBS: seam is not real move and extrusion, put at last line + options_items.push_back(EMoveType::Seam); } std::vector GCodeViewer::get_plater_extruder() @@ -1794,11 +1798,13 @@ void GCodeViewer::update_layers_slider_mode() } void GCodeViewer::update_marker_curr_move() { - auto it = std::find_if(m_gcode_result->moves.begin(), m_gcode_result->moves.end(), [this](auto move) { - return move.gcode_id == static_cast(m_sequential_view.gcode_ids[m_sequential_view.current.last]); - }); - - m_sequential_view.marker.update_curr_move(*it); + if ((int)m_last_result_id != -1) { + auto it = std::find_if(m_gcode_result->moves.begin(), m_gcode_result->moves.end(), [this](auto move) { + return move.gcode_id == static_cast(m_sequential_view.gcode_ids[m_sequential_view.current.last]); + }); + if (it != m_gcode_result->moves.end()) + m_sequential_view.marker.update_curr_move(*it); + } } bool GCodeViewer::is_toolpath_move_type_visible(EMoveType type) const @@ -3080,6 +3086,13 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result, const } m_plater_extruder = plater_extruder; + // replace layers for spiral vase mode + if (!gcode_result.spiral_vase_layers.empty()) { + m_layers.reset(); + for (const auto& layer : gcode_result.spiral_vase_layers) { + m_layers.append(layer.first, { layer.second.first, layer.second.second }); + } + } // set layers z range if (!m_layers.empty()) @@ -3325,11 +3338,13 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool const bool top_layer_only = true; - SequentialView::Endpoints global_endpoints = { m_moves_count , 0 }; + //BBS + SequentialView::Endpoints global_endpoints = { m_sequential_view.gcode_ids.size() , 0 }; SequentialView::Endpoints top_layer_endpoints = global_endpoints; SequentialView* sequential_view = const_cast(&m_sequential_view); if (top_layer_only || !keep_sequential_current_first) sequential_view->current.first = 0; - if (!keep_sequential_current_last) sequential_view->current.last = m_moves_count; + //BBS + if (!keep_sequential_current_last) sequential_view->current.last = m_sequential_view.gcode_ids.size(); // first pass: collect visible paths and update sequential view data std::vector> paths; @@ -3403,15 +3418,11 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool // update current sequential position sequential_view->current.first = !top_layer_only && keep_sequential_current_first ? std::clamp(sequential_view->current.first, global_endpoints.first, global_endpoints.last) : global_endpoints.first; if (global_endpoints.last == 0) { - m_no_render_path = true; + m_no_render_path = true; + sequential_view->current.last = global_endpoints.last; } else { m_no_render_path = false; - } - - if (!m_no_render_path) { sequential_view->current.last = keep_sequential_current_last ? std::clamp(sequential_view->current.last, global_endpoints.first, global_endpoints.last) : global_endpoints.last; - } else { - sequential_view->current.last = sequential_view->current.first; } // get the world position from the vertex buffer @@ -4125,6 +4136,214 @@ void GCodeViewer::render_shells() // glsafe(::glDepthMask(GL_TRUE)); } +//BBS +void GCodeViewer::render_all_plates_stats(const std::vector& gcode_result_list, bool show /*= true*/) const { + if (!show) + return; + for (auto gcode_result : gcode_result_list) { + if (gcode_result->moves.size() == 0) + return; + } + ImGuiWrapper& imgui = *wxGetApp().imgui(); + + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0, 10.0 * m_scale)); + ImGui::PushStyleColor(ImGuiCol_Separator, ImVec4(1.0f, 1.0f, 1.0f, 0.6f)); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, ImVec4(0.42f, 0.42f, 0.42f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(340.f * m_scale * imgui.scaled(1.0f / 15.0f), 0)); + + ImGui::SetNextWindowPos(ImGui::GetMainViewport()->GetCenter(), 0, ImVec2(0.5f, 0.5f)); + ImGui::Begin(_L("Statistics of All Plates").c_str(), nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + + std::vector filament_diameters = gcode_result_list.front()->filament_diameters; + std::vector filament_densities = gcode_result_list.front()->filament_densities; + std::vector filament_colors = decode_colors(wxGetApp().plater()->get_extruder_colors_from_plater_config(gcode_result_list.back())); + + bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; + float window_padding = 4.0f * m_scale; + const float icon_size = ImGui::GetTextLineHeight() * 0.7; + std::vector offsets; + std::map volume_of_extruders_all_plates; // map + std::map flushed_volume_of_extruders_all_plates; // map + std::vector model_used_filaments_m_all_plates; + std::vector model_used_filaments_g_all_plates; + std::vector flushed_filaments_m_all_plates; + std::vector flushed_filaments_g_all_plates; + float total_time_all_plates = 0.0f; + bool show_detailed_statistics_page = false; + + auto max_width = [](const std::vector& items, const std::string& title, float extra_size = 0.0f) { + float ret = ImGui::CalcTextSize(title.c_str()).x; + for (const std::string& item : items) { + ret = std::max(ret, extra_size + ImGui::CalcTextSize(item.c_str()).x); + } + return ret; + }; + auto calculate_offsets = [max_width, window_padding](const std::vector>>& title_columns, float extra_size = 0.0f) { + const ImGuiStyle& style = ImGui::GetStyle(); + std::vector offsets; + offsets.push_back(max_width(title_columns[0].second, title_columns[0].first, extra_size) + 3.0f * style.ItemSpacing.x + style.WindowPadding.x); + for (size_t i = 1; i < title_columns.size() - 1; i++) + offsets.push_back(offsets.back() + max_width(title_columns[i].second, title_columns[i].first) + style.ItemSpacing.x); + if (title_columns.back().first == _u8L("Display")) + offsets.back() = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding; + + float average_col_width = ImGui::GetWindowWidth() / static_cast(title_columns.size()); + std::vector ret; + ret.push_back(0); + for (size_t i = 1; i < title_columns.size(); i++) { + ret.push_back(std::max(offsets[i - 1], i * average_col_width)); + } + + return ret; + }; + auto append_item = [icon_size, &imgui, imperial_units, &window_padding, &draw_list, this](const Color& color, const std::vector>& columns_offsets) + { + // render icon + ImVec2 pos = ImVec2(ImGui::GetCursorScreenPos().x + window_padding * 3, ImGui::GetCursorScreenPos().y); + + draw_list->AddRectFilled({ pos.x + 1.0f * m_scale, pos.y + 3.0f * m_scale }, { pos.x + icon_size - 1.0f * m_scale, pos.y + icon_size + 1.0f * m_scale }, + ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f })); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(20.0 * m_scale, 6.0 * m_scale)); + + // render selectable + ImGui::Dummy({ 0.0, 0.0 }); + ImGui::SameLine(); + + // render column item + { + float dummy_size = ImGui::GetStyle().ItemSpacing.x + icon_size; + ImGui::SameLine(dummy_size); + imgui.text(columns_offsets[0].first); + + for (auto i = 1; i < columns_offsets.size(); i++) { + ImGui::SameLine(columns_offsets[i].second); + imgui.text(columns_offsets[i].first); + } + } + + ImGui::PopStyleVar(1); + }; + auto append_headers = [&imgui](const std::vector>& title_offsets) { + for (size_t i = 0; i < title_offsets.size(); i++) { + ImGui::SameLine(title_offsets[i].second); + imgui.bold_text(title_offsets[i].first); + } + ImGui::Separator(); + }; + auto get_used_filament_from_volume = [this, imperial_units, &filament_diameters, &filament_densities](double volume, int extruder_id) { + double koef = imperial_units ? 1.0 / GizmoObjectManipulation::in_to_mm : 0.001; + std::pair ret = { koef * volume / (PI * sqr(0.5 * filament_diameters[extruder_id])), + volume * filament_densities[extruder_id] * 0.001 }; + return ret; + }; + + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + // title and item data + { + PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); + for (auto plate : plate_list.get_nonempty_plate_list()) + { + auto plate_print_statistics = plate->get_slice_result()->print_statistics; + auto plate_extruders = plate->get_extruders(true); + for (size_t extruder_id : plate_extruders) { + extruder_id -= 1; + if (plate_print_statistics.volumes_per_extruder.find(extruder_id) == plate_print_statistics.volumes_per_extruder.end()) + continue; + double volume = plate_print_statistics.volumes_per_extruder.at(extruder_id); + volume_of_extruders_all_plates[extruder_id] += volume; + if (plate_print_statistics.flush_per_filament.find(extruder_id) == plate_print_statistics.flush_per_filament.end()) + flushed_volume_of_extruders_all_plates[extruder_id] = 0; + else { + double flushed_volume = plate_print_statistics.flush_per_filament.at(extruder_id); + flushed_volume_of_extruders_all_plates[extruder_id] += flushed_volume; + } + } + const PrintEstimatedStatistics::Mode& plate_time_mode = plate_print_statistics.modes[static_cast(m_time_estimate_mode)]; + total_time_all_plates += plate_time_mode.time; + } + + for (auto it = volume_of_extruders_all_plates.begin(); it != volume_of_extruders_all_plates.end(); it++) { + auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(it->second, it->first); + model_used_filaments_m_all_plates.push_back(model_used_filament_m); + model_used_filaments_g_all_plates.push_back(model_used_filament_g); + } + for (auto it = flushed_volume_of_extruders_all_plates.begin(); it != flushed_volume_of_extruders_all_plates.end(); it++) { + auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(it->second, it->first); + if (flushed_filament_m != 0.0 || flushed_filament_g != 0.0) + show_detailed_statistics_page = true; + flushed_filaments_m_all_plates.push_back(flushed_filament_m); + flushed_filaments_g_all_plates.push_back(flushed_filament_g); + } + + char buff[64]; + double longest_str = 0.0; + for (auto i : model_used_filaments_g_all_plates) { + if (i > longest_str) + longest_str = i; + } + ::sprintf(buff, "%.2f", longest_str); + offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), {buff}}, {_u8L("Flushed"), {buff}}, /*{_u8L("Tower"), total_filaments},*/ {_u8L("Total"), {buff}} }, icon_size); + + if (!show_detailed_statistics_page) + append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[2]} }); + else + append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, /*{_u8L("Tower"), offsets[3]},*/ {_u8L("Total"), offsets[3]} });// to add Tower + } + + // item + { + size_t i = 0; + for (auto it = volume_of_extruders_all_plates.begin(); it != volume_of_extruders_all_plates.end(); it++) { + if (i < model_used_filaments_m_all_plates.size() && i < model_used_filaments_g_all_plates.size()) { + std::vector> columns_offsets; + columns_offsets.push_back({ std::to_string(it->first + 1), offsets[0] }); + + char buf[64]; + if (show_detailed_statistics_page) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i]); + columns_offsets.push_back({ buf, offsets[1] }); + + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m_all_plates[i], flushed_filaments_g_all_plates[i]); + columns_offsets.push_back({ buf, offsets[2] }); + + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i] + flushed_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i]); + columns_offsets.push_back({ buf, offsets[3] }); + } + else { + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i]); + columns_offsets.push_back({ buf, offsets[2] }); + } + + append_item(filament_colors[it->first], columns_offsets); + } + i++; + } + + ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1)); + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + imgui.title(_u8L("Total Time Estimation")); + + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + imgui.text(_u8L("Total time") + ":"); + ImGui::SameLine(); + imgui.text(short_time(get_time_dhms(total_time_all_plates))); + } + ImGui::End(); + ImGui::PopStyleColor(6); + ImGui::PopStyleVar(3); + return; +} + void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canvas_height, int right_margin) { if (!m_legend_enabled) @@ -4283,8 +4502,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv const float step_size = range.step_size(); for (int i = static_cast(Range_Colors.size()) - 1; i >= 0; --i) { append_range_item(i, range.get_value_at_step(i), decimals); - - } } }; @@ -4376,6 +4593,11 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return (it != time_mode.roles_times.end()) ? std::make_pair(it->second, it->second / time_mode.time) : std::make_pair(0.0f, 0.0f); }; + auto move_time_and_percent = [time_mode](EMoveType move_type) { + auto it = std::find_if(time_mode.moves_times.begin(), time_mode.moves_times.end(), [move_type](const std::pair& item) { return move_type == item.first; }); + return (it != time_mode.moves_times.end()) ? std::make_pair(it->second, it->second / time_mode.time) : std::make_pair(0.0f, 0.0f); + }; + auto used_filament_per_role = [this, imperial_units](ExtrusionRole role) { auto it = m_print_statistics.used_filaments_per_role.find(role); if (it == m_print_statistics.used_filaments_per_role.end()) @@ -4385,6 +4607,14 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return std::make_pair(it->second.first * koef, it->second.second); }; + // get used filament (meters and grams) from used volume in respect to the active extruder + auto get_used_filament_from_volume = [this, imperial_units](double volume, int extruder_id) { + double koef = imperial_units ? 1.0 / GizmoObjectManipulation::in_to_mm : 0.001; + std::pair ret = { koef * volume / (PI * sqr(0.5 * m_filament_diameters[extruder_id])), + volume * m_filament_densities[extruder_id] * 0.001 }; + return ret; + }; + //BBS display Color Scheme ImGui::Dummy({ window_padding, window_padding }); ImGui::Dummy({ window_padding, window_padding }); @@ -4449,7 +4679,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector offsets; std::vector labels; std::vector times; + std::string travel_time; std::vector percents; + std::string travel_percent; std::vector model_used_filaments_m; std::vector model_used_filaments_g; double total_model_used_filament_m = 0, total_model_used_filament_g = 0; @@ -4462,13 +4694,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv double koef = imperial_units ? GizmoObjectManipulation::in_to_mm : 1000.0; double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1; - // get used filament (meters and grams) from used volume in respect to the active extruder - auto get_used_filament_from_volume = [this, imperial_units](double volume, int extruder_id) { - double koef = imperial_units ? 1.0 / GizmoObjectManipulation::in_to_mm : 0.001; - std::pair ret = { koef * volume / (PI * sqr(0.5 * m_filament_diameters[extruder_id])), - volume * m_filament_densities[extruder_id] * 0.001 }; - return ret; - }; // extrusion paths section -> title ImGui::Dummy({ window_padding, window_padding }); @@ -4496,6 +4721,17 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } } + //BBS: get travel time and percent + { + auto [time, percent] = move_time_and_percent(EMoveType::Travel); + travel_time = (time > 0.0f) ? short_time(get_time_dhms(time)) : ""; + if (percent == 0) + ::sprintf(buffer, "0%%"); + else + percent > 0.001 ? ::sprintf(buffer, "%.1f%%", percent * 100) : ::sprintf(buffer, "<0.1%%"); + travel_percent = buffer; + } + offsets = calculate_offsets({ {_u8L("Line Type"), labels}, {_u8L("Time"), times}, {_u8L("Percent"), percents}, {_u8L("Display"), {""}}}, icon_size); append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {_u8L("Percent"), offsets[2]}, {_u8L("Display"), offsets[3]}}); break; @@ -4584,7 +4820,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv }; const bool visible = m_buffers[buffer_id(type)].visible; if (type == EMoveType::Travel) { - //TODO display travel time + //BBS: only display travel time in FeatureType view append_option_item_with_type(type, Travel_Colors[0], _u8L("Travel"), visible); } else if (type == EMoveType::Seam) @@ -4624,7 +4860,23 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } for(auto item : options_items) { - append_option_item(item, offsets); + if (item != EMoveType::Travel) { + append_option_item(item, offsets); + } else { + //BBS: show travel time in FeatureType view + const bool visible = m_buffers[buffer_id(item)].visible; + std::vector> columns_offsets; + columns_offsets.push_back({ _u8L("Travel"), offsets[0] }); + columns_offsets.push_back({ travel_time, offsets[1] }); + columns_offsets.push_back({ travel_percent, offsets[2] }); + append_item(EItemType::Rect, Travel_Colors[0], columns_offsets, true, visible, [this, item, visible]() { + m_buffers[buffer_id(item)].visible = !m_buffers[buffer_id(item)].visible; + // update buffers' render paths + refresh_render_paths(false, false); + update_moves_slider(); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + }); + } } break; } @@ -4668,7 +4920,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } case EViewType::ColorPrint: { - const std::vector& custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes : m_custom_gcode_per_print_z; + //BBS: replace model custom gcode with current plate custom gcode + const std::vector& custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().get_curr_plate_custom_gcodes().gcodes : m_custom_gcode_per_print_z; size_t total_items = 1; for (size_t extruder_id : m_extruder_ids) { total_items += color_print_ranges(extruder_id, custom_gcode_per_print_z).size(); @@ -4722,13 +4975,13 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv char buf[64]; if (show_flushed_filaments) { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f g" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i]); columns_offsets.push_back({ buf, offsets[1] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f g" : "%.2f m\n%.2f g", flushed_filaments_m[i], flushed_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m[i], flushed_filaments_g[i]); columns_offsets.push_back({ buf, offsets[2] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f g" : "%.2f m\n%.2f g", model_used_filaments_m[i] + flushed_filaments_m[i], model_used_filaments_g[i] + flushed_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i] + flushed_filaments_m[i], model_used_filaments_g[i] + flushed_filaments_g[i]); columns_offsets.push_back({ buf, offsets[3] }); } else { @@ -4850,7 +5103,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv auto generate_partial_times = [this, get_used_filament_from_volume](const TimesList& times, const std::vector& used_filaments) { PartialTimes items; - std::vector custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes : m_custom_gcode_per_print_z; + //BBS: replace model custom gcode with current plate custom gcode + std::vector custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().get_curr_plate_custom_gcodes().gcodes : m_custom_gcode_per_print_z; std::vector last_color(m_extruders_count); for (size_t i = 0; i < m_extruders_count; ++i) { last_color[i] = m_tools.m_tool_colors[i]; @@ -5220,19 +5474,19 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv auto it = std::find_if(time_mode.roles_times.begin(), time_mode.roles_times.end(), [role](const std::pair& item) { return role == item.first; }); return (it != time_mode.roles_times.end()) ? it->second : 0.0f; }; - //BBS: start gcode is prepeare time - if (role_time(erCustom) != 0.0f) { + //BBS: start gcode is mostly same with prepeare time + if (time_mode.prepare_time != 0.0f) { ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); imgui.text(prepare_str + ":"); ImGui::SameLine(max_len); - imgui.text(short_time(get_time_dhms(role_time(erCustom)))); + imgui.text(short_time(get_time_dhms(time_mode.prepare_time))); } ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); imgui.text(print_str + ":"); ImGui::SameLine(max_len); - imgui.text(short_time(get_time_dhms(time_mode.time - role_time(erCustom)))); + imgui.text(short_time(get_time_dhms(time_mode.time - time_mode.prepare_time))); ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); imgui.text(total_str + ":"); @@ -5264,16 +5518,16 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } default : { assert(false); break; } } + } - if (m_view_type == EViewType::ColorPrint) { - ImGui::Spacing(); - ImGui::Dummy({ window_padding, window_padding }); - ImGui::SameLine(); - offsets = calculate_offsets({ { _u8L("Options"), { ""}}, { _u8L("Display"), {""}} }, icon_size); - append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); - for (auto item : options_items) - append_option_item(item, offsets); - } + if (m_view_type == EViewType::ColorPrint) { + ImGui::Spacing(); + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + offsets = calculate_offsets({ { _u8L("Options"), { ""}}, { _u8L("Display"), {""}} }, icon_size); + append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); + for (auto item : options_items) + append_option_item(item, offsets); } legend_height = ImGui::GetCurrentWindow()->Size.y; @@ -5304,7 +5558,6 @@ void GCodeViewer::pop_combo_style() } void GCodeViewer::render_slider(int canvas_width, int canvas_height) { - m_moves_slider->render(canvas_width, canvas_height); m_layers_slider->render(canvas_width, canvas_height); } diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 9f8d46cf53..f9579d1eab 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -809,6 +809,8 @@ public: void reset_shell(); void load_shells(const Print& print, bool initialized, bool force_previewing = false); void set_shells_on_preview(bool is_previewing) { m_shells.previewing = is_previewing; } + //BBS: add all plates filament statistics + void render_all_plates_stats(const std::vector& gcode_result_list, bool show = true) const; //BBS: GUI refactor: add canvas width and height void render(int canvas_width, int canvas_height, int right_margin); //BBS diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 5671a3e2d2..1e12d94fa5 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -74,8 +74,8 @@ static constexpr const float TRACKBALLSIZE = 0.8f; static const float SLIDER_DEFAULT_RIGHT_MARGIN = 10.0f; static const float SLIDER_DEFAULT_BOTTOM_MARGIN = 10.0f; -static const float SLIDER_RIGHT_MARGIN = 115.0f; -static const float SLIDER_BOTTOM_MARGIN = 90.0f; +static const float SLIDER_RIGHT_MARGIN = 124.0f; +static const float SLIDER_BOTTOM_MARGIN = 64.0f; float GLCanvas3D::DEFAULT_BG_LIGHT_COLOR[3] = { 0.906f, 0.906f, 0.906f }; float GLCanvas3D::DEFAULT_BG_LIGHT_COLOR_DARK[3] = { 0.329f, 0.329f, 0.353f }; @@ -1160,6 +1160,7 @@ GLCanvas3D::~GLCanvas3D() reset_volumes(); m_sel_plate_toolbar.del_all_item(); + m_sel_plate_toolbar.del_stats_item(); } void GLCanvas3D::post_event(wxEvent &&event) @@ -1608,6 +1609,11 @@ void GLCanvas3D::enable_main_toolbar(bool enable) m_main_toolbar.set_enabled(enable); } +void GLCanvas3D::reset_select_plate_toolbar_selection() { + if (m_sel_plate_toolbar.m_all_plates_stats_item) + m_sel_plate_toolbar.m_all_plates_stats_item->selected = false; +} + void GLCanvas3D::enable_select_plate_toolbar(bool enable) { m_sel_plate_toolbar.set_enabled(enable); @@ -1721,6 +1727,9 @@ float GLCanvas3D::get_collapse_toolbar_height() return collapse_toolbar.is_enabled() ? collapse_toolbar.get_height() : 0; } +bool GLCanvas3D::make_current_for_postinit() { + return _set_current(); +} void GLCanvas3D::render(bool only_init) { @@ -1844,7 +1853,7 @@ void GLCanvas3D::render(bool only_init) _render_platelist(!camera.is_looking_downward(), only_current, only_body, hover_id); } /* preview render */ - else if (m_canvas_type == ECanvasType::CanvasPreview) { + else if (m_canvas_type == ECanvasType::CanvasPreview && m_render_preview) { //BBS: add outline logic _render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running()); //BBS: GUI refactor: add canvas size as parameters @@ -2045,6 +2054,17 @@ void GLCanvas3D::deselect_all() post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); } +void GLCanvas3D::set_selected_visible(bool visible) +{ + for (unsigned int i : m_selection.get_volume_idxs()) { + GLVolume* volume = const_cast(m_selection.get_volume(i)); + volume->visible = visible; + volume->color[3] = visible ? 1.f : GLVolume::MODEL_HIDDEN_COL[3]; + volume->render_color[3] = volume->color[3]; + volume->force_native_color = !visible; + } +} + void GLCanvas3D::delete_selected() { m_selection.erase(); @@ -2383,8 +2403,21 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } } for (int temp_idx = vol_idx; temp_idx < m_volumes.volumes.size() && !update_object_list; temp_idx++) { - if (!m_volumes.volumes[temp_idx]->is_wipe_tower) + // Volumes in m_volumes might not exist anymore, so we cannot + // directly check if they are is_wipe_towers, for which we do + // not want to update the object list. Instead, we do a kind of + // slow thing of seeing if they were in the deleted list, and if + // so, if they were a wipe tower. + bool was_deleted_wipe_tower = false; + for (int del_idx = 0; del_idx < deleted_wipe_towers.size(); del_idx++) { + if (deleted_wipe_towers[del_idx].volume_idx == temp_idx) { + was_deleted_wipe_tower = true; + break; + } + } + if (!was_deleted_wipe_tower) { update_object_list = true; + } } for (int temp_idx = vol_idx; temp_idx < glvolumes_new.size() && !update_object_list; temp_idx++) { if (!glvolumes_new[temp_idx]->is_wipe_tower) @@ -2536,8 +2569,12 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re auto timelapse_type = dconfig.option>("timelapse_type"); bool timelapse_enabled = timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false; - if ((timelapse_enabled && wt) || (filaments_count > 1 && wt && co != nullptr && co->value != PrintSequence::ByObject)) { + if (wt && (timelapse_enabled || filaments_count > 1)) { for (int plate_id = 0; plate_id < n_plates; plate_id++) { + // If print ByObject and there is only one object in the plate, the wipe tower is allowed to be generated. + if (co != nullptr && co->value == PrintSequence::ByObject && ppl.get_plate(plate_id)->printable_instance_size() != 1) + continue; + DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_id); float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); @@ -3458,6 +3495,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) } } } + else return; } if (keyCode != WXK_TAB @@ -3529,6 +3567,28 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) if (m_gizmos.on_mouse_wheel(evt)) return; + if (m_canvas_type == CanvasAssembleView && (evt.AltDown() || evt.CmdDown())) { + float rotation = (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta(); + if (evt.AltDown()) { + auto clp_dist = m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position(); + clp_dist = rotation < 0.f + ? std::max(0., clp_dist - 0.01) + : std::min(1., clp_dist + 0.01); + m_gizmos.m_assemble_view_data->model_objects_clipper()->set_position(clp_dist, true); + } + else if (evt.CmdDown()) { + m_explosion_ratio = rotation < 0.f + ? std::max(1., m_explosion_ratio - 0.01) + : std::min(3., m_explosion_ratio + 0.01); + if (m_explosion_ratio != GLVolume::explosion_ratio) { + for (GLVolume* volume : m_volumes.volumes) { + volume->set_bounding_boxes_as_dirty(); + } + GLVolume::explosion_ratio = m_explosion_ratio; + } + } + return; + } // Calculate the zoom delta and apply it to the current zoom factor #ifdef SUPPORT_REVERSE_MOUSE_ZOOM double direction_factor = (wxGetApp().app_config->get("reverse_mouse_wheel_zoom") == "1") ? -1.0 : 1.0; @@ -4235,6 +4295,10 @@ void GLCanvas3D::on_paint(wxPaintEvent& evt) this->render(); } +void GLCanvas3D::force_set_focus() { + m_canvas->SetFocus(); +}; + void GLCanvas3D::on_set_focus(wxFocusEvent& evt) { m_tooltip_enabled = false; @@ -5753,6 +5817,9 @@ bool GLCanvas3D::_init_toolbars() if (!_init_separator_toolbar()) return false; + if (!_init_select_plate_toolbar()) + return false; + #if 0 if (!_init_view_toolbar()) return false; @@ -5918,7 +5985,24 @@ bool GLCanvas3D::_init_main_toolbar() //BBS: GUI refactor: GLToolbar bool GLCanvas3D::_init_select_plate_toolbar() { - return true; + std::string path = resources_dir() + "/images/"; + IMToolbarItem* item = new IMToolbarItem(); + bool result = item->image_texture.load_from_svg_file(path + "im_all_plates_stats.svg", false, false, false, 128); + result = result && item->image_texture_transparent.load_from_svg_file(path + "im_all_plates_stats_transparent.svg", false, false, false, 128); + m_sel_plate_toolbar.m_all_plates_stats_item = item; + + return result; +} + +void GLCanvas3D::_update_select_plate_toolbar_stats_item(bool force_selected) { + PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); + if (plate_list.get_nonempty_plate_list().size() > 1) + m_sel_plate_toolbar.show_stats_item = true; + else + m_sel_plate_toolbar.show_stats_item = false; + + if (force_selected && m_sel_plate_toolbar.show_stats_item) + m_sel_plate_toolbar.m_all_plates_stats_item->selected = true; } bool GLCanvas3D::_update_imgui_select_plate_toolbar() @@ -5926,6 +6010,8 @@ bool GLCanvas3D::_update_imgui_select_plate_toolbar() bool result = true; if (!m_sel_plate_toolbar.is_enabled()) return false; + _update_select_plate_toolbar_stats_item(); + m_sel_plate_toolbar.del_all_item(); PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); @@ -5941,6 +6027,7 @@ bool GLCanvas3D::_update_imgui_select_plate_toolbar() } m_sel_plate_toolbar.m_items.push_back(item); } + m_sel_plate_toolbar.is_display_scrollbar = false; return result; } @@ -6565,7 +6652,7 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with return true; } }, with_outline); - if (m_canvas_type == CanvasAssembleView) { + if (m_canvas_type == CanvasAssembleView && m_gizmos.m_assemble_view_data->model_objects_clipper()->get_position() > 0) { const GLGizmosManager& gm = get_gizmos_manager(); shader->stop_using(); gm.render_painter_assemble_view(); @@ -7031,20 +7118,26 @@ void GLCanvas3D::_render_main_toolbar() //BBS: GUI refactor: GLToolbar adjust //when rendering, {0, 0} is at the center, {-0.5, 0.5} at the left-up -void GLCanvas3D::_render_imgui_select_plate_toolbar() const +void GLCanvas3D::_render_imgui_select_plate_toolbar() { - if (!m_sel_plate_toolbar.is_enabled()) + if (!m_sel_plate_toolbar.is_enabled()) { + if (!m_render_preview) + m_render_preview = true; return; + } + + IMToolbarItem* all_plates_stats_item = m_sel_plate_toolbar.m_all_plates_stats_item; PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); for (int i = 0; i < plate_list.get_plate_count(); i++) { if (i < m_sel_plate_toolbar.m_items.size()) { - if (i == plate_list.get_curr_plate_index()) + if (i == plate_list.get_curr_plate_index() && !all_plates_stats_item->selected) m_sel_plate_toolbar.m_items[i]->selected = true; else m_sel_plate_toolbar.m_items[i]->selected = false; m_sel_plate_toolbar.m_items[i]->percent = plate_list.get_plate(i)->get_slicing_percent(); + if (plate_list.get_plate(i)->is_slice_result_valid()) { if (plate_list.get_plate(i)->is_slice_result_ready_for_print()) m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICED; @@ -7058,6 +7151,46 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() const m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICING; } } + if (m_sel_plate_toolbar.show_stats_item) { + all_plates_stats_item->percent = 0.0f; + + size_t sliced_plates_cnt = 0; + bool slice_failed = false; + for (auto plate : plate_list.get_nonempty_plate_list()) { + if (plate->is_slice_result_valid() && plate->is_slice_result_ready_for_print()) + sliced_plates_cnt++; + if (plate->is_slice_result_valid() && !plate->is_slice_result_ready_for_print()) + slice_failed = true; + } + all_plates_stats_item->percent = (float)(sliced_plates_cnt) / (float)(plate_list.get_nonempty_plate_list().size()) * 100.0f; + + if (all_plates_stats_item->percent == 0.0f) + all_plates_stats_item->slice_state = IMToolbarItem::SliceState::UNSLICED; + else if (sliced_plates_cnt == plate_list.get_nonempty_plate_list().size()) + all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICED; + else if (all_plates_stats_item->percent < 100.0f) + all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICING; + + if (slice_failed) + all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICE_FAILED; + + // Changing parameters does not invalid all plates, need extra logic to validate + bool gcode_result_valid = true; + for (auto gcode_result : plate_list.get_nonempty_plates_slice_results()) { + if (gcode_result->moves.size() == 0) { + gcode_result_valid = false; + } + } + if (all_plates_stats_item->selected && all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED && gcode_result_valid) { + m_gcode_viewer.render_all_plates_stats(plate_list.get_nonempty_plates_slice_results()); + m_render_preview = false; + } + else{ + m_gcode_viewer.render_all_plates_stats(plate_list.get_nonempty_plates_slice_results(), false); + m_render_preview = true; + } + }else + m_render_preview = true; // places the toolbar on the top_left corner of the 3d scene #if ENABLE_RETINA_GL @@ -7081,7 +7214,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() const float button_margin = frame_padding; ImGuiWrapper& imgui = *wxGetApp().imgui(); - int item_count = m_sel_plate_toolbar.m_items.size(); + int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0); bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > canvas_h ? true: false; show_scroll = m_sel_plate_toolbar.is_display_scrollbar && show_scroll; float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, canvas_h); @@ -7122,7 +7255,89 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() const ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint ImVec2 margin = ImVec2(margin_size, margin_size); - for (int i = 0; i < item_count; i++) { + if(m_sel_plate_toolbar.show_stats_item) + { + // draw image + ImVec2 button_start_pos = ImGui::GetCursorScreenPos(); + + if (all_plates_stats_item->selected) { + ImGui::PushStyleColor(ImGuiCol_Button, button_active); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, button_active); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, button_active); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(128.0f, 128.0f, 128.0f, 0.0f)); + if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGui::GetStyleColorVec4(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImGui::GetStyleColorVec4(ImGuiCol_Button)); + } + else { + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, button_hover); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.42f, 0.42f, 0.42f, 1.0f)); + } + } + + ImVec4 text_clr; + ImTextureID btn_texture_id; + if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) + { + text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 0.2f); + btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture_transparent.get_id()); + } + else + { + text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 1); + btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture.get_id()); + } + + if (ImGui::ImageButton2(btn_texture_id, size, {0,0}, {1,1}, frame_padding, bg_col, tint_col, margin)) { + if (all_plates_stats_item->slice_state != IMToolbarItem::SliceState::SLICE_FAILED) { + if (m_process && !m_process->running()) { + for (int i = 0; i < m_sel_plate_toolbar.m_items.size(); i++) { + m_sel_plate_toolbar.m_items[i]->selected = false; + } + all_plates_stats_item->selected = true; + wxCommandEvent evt = wxCommandEvent(EVT_GLTOOLBAR_SLICE_ALL); + wxPostEvent(wxGetApp().plater(), evt); + } + } + } + + ImGui::PopStyleColor(3); + + ImVec2 start_pos = ImVec2(button_start_pos.x + frame_padding + margin.x, button_start_pos.y + frame_padding + margin.y); + if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED) { + ImVec2 size = ImVec2(button_width, button_height); + ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); + ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + } + else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) { + ImVec2 size = ImVec2(button_width, button_height * all_plates_stats_item->percent / 100.0f); + ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); + ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); + ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + } + else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { + ImVec2 size = ImVec2(button_width, button_height); + ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); + ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + } + + // draw text + GImGui->FontSize = 15.0f; + ImGui::PushStyleColor(ImGuiCol_Text, text_clr); + ImVec2 text_size = ImGui::CalcTextSize(("All Plates")); + ImVec2 text_start_pos = ImVec2(start_pos.x + (button_width - text_size.x) / 2, start_pos.y + 3.0f * button_height / 5.0f); + ImGui::RenderText(text_start_pos, ("All Plates")); + text_size = ImGui::CalcTextSize(("Stats")); + text_start_pos = ImVec2(start_pos.x + (button_width - text_size.x) / 2, text_start_pos.y + ImGui::GetTextLineHeight()); + ImGui::RenderText(text_start_pos, ("Stats")); + ImGui::PopStyleColor(); + ImGui::SetWindowFontScale(1.2f); + } + + for (int i = 0; i < m_sel_plate_toolbar.m_items.size(); i++) { IMToolbarItem* item = m_sel_plate_toolbar.m_items[i]; // draw image @@ -7134,11 +7349,16 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() const if (item->selected) { ImGui::PushStyleColor(ImGuiCol_Button, button_active); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, button_active); - } else + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(128.0f, 128.0f, 128.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.42f, 0.42f, 0.42f, 1.0f)); + } if (ImGui::ImageButton2(item->texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col, margin)) { if (m_process && !m_process->running()) { + all_plates_stats_item->selected = false; + item->selected = true; // begin to slicing plate wxCommandEvent* evt = new wxCommandEvent(EVT_GLTOOLBAR_SELECT_SLICED_PLATE); evt->SetInt(i); @@ -7146,10 +7366,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() const } } - if (item->selected) - ImGui::PopStyleColor(2); - else - ImGui::PopStyleColor(1); + ImGui::PopStyleColor(2); ImVec2 start_pos = ImVec2(button_start_pos.x + frame_padding + margin.x, button_start_pos.y + frame_padding + margin.y); if (item->slice_state == IMToolbarItem::SliceState::UNSLICED) { @@ -7341,60 +7558,59 @@ void GLCanvas3D::_render_paint_toolbar() const float f_scale = 1.0; #endif std::vector colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - ImGuiWrapper& imgui = *wxGetApp().imgui(); - auto canvas_w = float(get_canvas_size().get_width()); int extruder_num = colors.size(); + + std::vector filament_text_first_line; + std::vector filament_text_second_line; + { + auto preset_bundle = wxGetApp().preset_bundle; + for (auto filament_name : preset_bundle->filament_presets) { + for (auto iter = preset_bundle->filaments.lbegin(); iter != preset_bundle->filaments.end(); iter++) { + if (filament_name.compare(iter->name) == 0) { + std::string display_filament_type; + iter->config.get_filament_type(display_filament_type); + auto pos = display_filament_type.find(' '); + if (pos != std::string::npos) { + filament_text_first_line.push_back(display_filament_type.substr(0, pos)); + filament_text_second_line.push_back(display_filament_type.substr(pos + 1)); + } + else { + filament_text_first_line.push_back(display_filament_type); + filament_text_second_line.push_back(""); + } + } + } + } + } + + ImGuiWrapper& imgui = *wxGetApp().imgui(); + float canvas_w = float(get_canvas_size().get_width()); int item_spacing = 8 * wxGetApp().toolbar_icon_scale() * f_scale; + float button_size = GLToolbar::Default_Icons_Size * f_scale * wxGetApp().toolbar_icon_scale() + item_spacing; - std::vector filament_types; - { - auto preset_bundle = wxGetApp().preset_bundle; - for (auto filament_name : preset_bundle->filament_presets) { - for (auto iter = preset_bundle->filaments.lbegin(); iter != preset_bundle->filaments.end(); iter++) { - if (filament_name.compare(iter->name) == 0) { - std::string display_filament_type; - iter->config.get_filament_type(display_filament_type); - filament_types.push_back(display_filament_type); - } - } - } - } - - float button_size = GLToolbar::Default_Icons_Size * f_scale * wxGetApp().toolbar_icon_scale() + item_spacing; - - imgui.set_next_window_pos(0.5f * (canvas_w + (button_size + item_spacing) * extruder_num), button_size + item_spacing * 2, ImGuiCond_Always, 1.0f, 1.0f); + imgui.set_next_window_pos(0.5f * canvas_w, 0, ImGuiCond_Always, 0.5f, 0.0f); imgui.begin(_L("Paint Toolbar"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar); bool disabled = !wxGetApp().plater()->can_fillcolor(); unsigned char rgb[3]; + float cursor_y = ImGui::GetCursorPosY(); - float max_text = 0; for (int i = 0; i < extruder_num; i++) { - std::string item_text = (boost::format("%1%%2%") % (i + 1) % filament_types[i]).str(); - ImVec2 label_size = ImGui::CalcTextSize(item_text.c_str(), NULL, true); - if (label_size.x > button_size) - label_size.x = button_size * 0.6; - max_text = std::max(max_text,label_size.x); - } - for (int i = 0; i < extruder_num; i++) { - if (filament_types.size() <= i) continue; - - ImGui::SameLine(item_spacing / 2 + (button_size - max_text) / 2 + (button_size + item_spacing) * i); - ImGui::PushID(i); + if (i > 0) + ImGui::SameLine(0.0f, item_spacing); Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); ImGui::PushStyleColor(ImGuiCol_Button, ImColor(rgb[0], rgb[1], rgb[2]).Value); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor(rgb[0], rgb[1], rgb[2]).Value); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor(rgb[0], rgb[1], rgb[2]).Value); if (disabled) ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); - - if (ImGui::Button("", ImVec2(button_size, button_size))) { + if (ImGui::Button(("##filament_button" + std::to_string(i)).c_str(), ImVec2(button_size, button_size))) { wxPostEvent(m_canvas, IntEvent(EVT_GLTOOLBAR_FILLCOLOR, i + 1)); } if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::PushTextWrapPos(ImGui::GetFontSize() * 20.0f); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); - ImGui::TextUnformatted(_L((boost::format("Shortcut key %1%") % (i + 1)).str()).ToUTF8().data()); + ImGui::TextUnformatted((boost::format(_u8L("Shortcut key %1%")) % (i + 1)).str().c_str()); ImGui::PopStyleColor(1); ImGui::PopTextWrapPos(); ImGui::EndTooltip(); @@ -7402,82 +7618,30 @@ void GLCanvas3D::_render_paint_toolbar() const ImGui::PopStyleColor(3); if (disabled) ImGui::PopItemFlag(); - ImGui::PopID(); } + + float text_offset_y = 3.0f * f_scale; for (int i = 0; i < extruder_num; i++){ - if (filament_types.size() <= i) continue; - //TODO use filament type from filament management, current use PLA by default - std::string item_text = (boost::format("%1%%2%") % (i + 1) % filament_types[i]).str(); - const ImVec2 label_size = ImGui::CalcTextSize(item_text.c_str(), NULL, true); - - int len = strlen(filament_types[i].c_str()); - - ImGui::SameLine(item_spacing / 2 + (button_size - max_text) / 2 + (button_size + item_spacing) * i); - - int count = 0; - if (label_size.x > button_size) - { - for (int j = 0; j < filament_types[i].size(); j++) - { - if(std::isalpha(filament_types[i][j])) - count++; - else - break; - } - } - - if (i > 8) - { - if (label_size.x > button_size) - { - if(count * ImGui::GetFontSize() > button_size){ - if ((len - (count + 1)) <= 3) - item_text = "\t" + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count) + "\n" + "\t" + filament_types[i].substr(count, len); - else - item_text = "\t" + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count + 1) + "\n"+ filament_types[i].substr(count + 1, len); - } else { - if (count <= 4) - item_text = "\t" + std::to_string(i + 1) + "\n" + " " + filament_types[i].substr(0, count + 1) + "\n" + filament_types[i].substr(count + 1, len); - else - item_text = "\t" + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count + 1) + "\n" + filament_types[i].substr(count + 1, len); - } - } - else - { - item_text = (boost::format("\t%1%\n %2%") % (i + 1) % filament_types[i]).str(); - } - } - else - { - if (label_size.x > button_size) - { - if(count * ImGui::GetFontSize() > button_size){ - if ((len - (count + 1)) <= 3) - item_text = "\t " + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count) + "\n" + "\t" + filament_types[i].substr(count, len); - else - item_text = "\t " + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count + 1) + "\n"+ filament_types[i].substr(count + 1, len); - } else { - if (count <= 4) - item_text = "\t " + std::to_string(i + 1) + "\n" + " " + filament_types[i].substr(0, count + 1) + "\n" + filament_types[i].substr(count + 1, len); - else - item_text = "\t " + std::to_string(i + 1) + "\n" + filament_types[i].substr(0, count + 1) + "\n" + filament_types[i].substr(count + 1, len); - } - } - else - { - item_text = (boost::format("\t %1%\n\t%2%") % (i + 1) % filament_types[i]).str(); - } - } Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); float gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]; + ImVec4 text_color = gray < 80 ? ImVec4(255, 255, 255, 255) : ImVec4(0, 0, 0, 255); + + ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); + ImGui::SetCursorPosY(cursor_y + text_offset_y); + ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - number_label_size.x) / 2); + ImGui::TextColored(text_color, std::to_string(i + 1).c_str()); - if (gray < 80){ - ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 1.0f), item_text.c_str()); - } else{ - ImGui::TextColored(ImVec4(0.0f, 0.0f, 0.0f, 1.0f), item_text.c_str()); - } + ImVec2 filament_first_line_label_size = ImGui::CalcTextSize(filament_text_first_line[i].c_str()); + ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y); + ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - filament_first_line_label_size.x) / 2); + ImGui::TextColored(text_color, filament_text_first_line[i].c_str()); + + ImVec2 filament_second_line_label_size = ImGui::CalcTextSize(filament_text_second_line[i].c_str()); + ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y + filament_first_line_label_size.y); + ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - filament_second_line_label_size.x) / 2); + ImGui::TextColored(text_color, filament_text_second_line[i].c_str()); } - ImGui::AlignTextToFramePadding(); + imgui.end(); } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index e91588b72e..e1b0787e3d 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -543,6 +543,7 @@ private: bool m_dirty; bool m_initialized; //BBS: add flag to controll rendering + bool m_render_preview{ true }; bool m_enable_render { true }; bool m_apply_zoom_to_volumes_filter; bool m_picking_enabled; @@ -785,6 +786,8 @@ public: void enable_selection(bool enable); void enable_main_toolbar(bool enable); //BBS: GUI refactor: GLToolbar + void _update_select_plate_toolbar_stats_item(bool force_selected = false); + void reset_select_plate_toolbar_selection(); void enable_select_plate_toolbar(bool enable); void enable_assemble_view_toolbar(bool enable); void enable_return_toolbar(bool enable); @@ -847,6 +850,7 @@ public: void select_all(); void deselect_all(); + void set_selected_visible(bool visible); void delete_selected(); void ensure_on_bed(unsigned int object_idx, bool allow_negative_z); @@ -893,6 +897,7 @@ public: void on_gesture(wxGestureEvent& evt); void on_paint(wxPaintEvent& evt); void on_set_focus(wxFocusEvent& evt); + void force_set_focus(); Size get_canvas_size() const; Vec2d get_local_mouse_position() const; @@ -1041,6 +1046,8 @@ public: // If the Z screen space coordinate is not provided, a depth buffer value is substituted. Vec3d _mouse_to_3d(const Point& mouse_pos, float* z = nullptr); + bool make_current_for_postinit(); + private: bool _is_shown_on_screen() const; @@ -1093,7 +1100,7 @@ private: void _render_current_gizmo() const; void _render_gizmos_overlay(); void _render_main_toolbar(); - void _render_imgui_select_plate_toolbar() const; + void _render_imgui_select_plate_toolbar(); void _render_assemble_view_toolbar() const; void _render_return_toolbar() const; void _render_separator_toolbar_right() const; diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index d5082c8862..74a7555675 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -584,12 +584,7 @@ bool GLTexture::generate_texture_from_text(const std::string& text_str, wxFont& // draw message memDC.SetTextForeground(*wxWHITE); - - wxGCDC dc2(memDC); - dc2.SetFont(font); - dc2.SetBackground(wxBrush(background)); - dc2.SetTextForeground(*wxWHITE); - dc2.DrawLabel(msg, wxRect(0, 0, m_width, m_height), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + memDC.DrawLabel(msg, wxRect(0, 0, m_width, m_height), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); memDC.SelectObject(wxNullBitmap); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 3948589b86..5fc2730266 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" @@ -86,8 +87,8 @@ //BBS: DailyTip and UserGuide Dialog #include "WebDownPluginDlg.hpp" #include "WebGuideDialog.hpp" -#include "WebUserLoginDialog.hpp" #include "ReleaseNote.hpp" +#include "PrivacyUpdateDialog.hpp" #include "ModelMall.hpp" //#ifdef WIN32 @@ -1016,25 +1017,31 @@ void GUI_App::post_init() mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); //BBS init the opengl resource here - Size canvas_size = plater_->canvas3D()->get_canvas_size(); - wxGetApp().imgui()->set_display_size(static_cast(canvas_size.get_width()), static_cast(canvas_size.get_height())); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to init opengl"; - wxGetApp().init_opengl(); +#ifdef __linux__ + if (plater_->canvas3D()->get_wxglcanvas()->IsShownOnScreen()&&plater_->canvas3D()->make_current_for_postinit()) { +#endif + Size canvas_size = plater_->canvas3D()->get_canvas_size(); + wxGetApp().imgui()->set_display_size(static_cast(canvas_size.get_width()), static_cast(canvas_size.get_height())); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to init opengl"; + wxGetApp().init_opengl(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init opengl"; - plater_->canvas3D()->init(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init opengl"; + plater_->canvas3D()->init(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init canvas3D"; - wxGetApp().imgui()->new_frame(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init canvas3D"; + wxGetApp().imgui()->new_frame(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init imgui frame"; - plater_->canvas3D()->enable_render(true); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished init imgui frame"; + plater_->canvas3D()->enable_render(true); - if (!slow_bootup) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to render a first frame for test"; - plater_->canvas3D()->render(false); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished rendering a first frame for test"; + if (!slow_bootup) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to render a first frame for test"; + plater_->canvas3D()->render(false); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished rendering a first frame for test"; + } +#ifdef __linux__ } +#endif if (is_editor()) mainframe->select_tab(size_t(0)); mainframe->Thaw(); @@ -1119,6 +1126,9 @@ void GUI_App::post_init() //BBS: check new version this->check_new_version_sf(); + //BBS: check privacy version + if (is_user_login()) + this->check_privacy_version(0); }); } @@ -1155,6 +1165,9 @@ void GUI_App::post_init() std::string functional_config_file = Slic3r::resources_dir() + "/config.json"; DeviceManager::load_functional_config(encode_path(functional_config_file.c_str())); + std::string filaments_blacklist_config_file = Slic3r::resources_dir() + "/printers/filaments_blacklist.json"; + DeviceManager::load_filaments_blacklist_config(encode_path(filaments_blacklist_config_file.c_str())); + // remove old log files over LOG_FILES_MAX_NUM std::string log_addr = data_dir(); if (!log_addr.empty()) { @@ -1228,6 +1241,13 @@ void GUI_App::shutdown() removable_drive_manager()->shutdown(); } + // destroy login dialog + if (login_dlg != nullptr) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": destroy login dialog"); + delete login_dlg; + login_dlg = nullptr; + } + if (m_is_recreating_gui) return; m_is_closing = true; stop_sync_user_preset(); @@ -1646,9 +1666,9 @@ void GUI_App::init_networking_callbacks() BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": enter, m_agent=%1%")%m_agent; if (m_agent) { //set callbacks - m_agent->set_on_user_login_fn([this](int online_login, bool login) { - GUI::wxGetApp().request_user_login(online_login); - }); + //m_agent->set_on_user_login_fn([this](int online_login, bool login) { + // GUI::wxGetApp().request_user_handle(online_login); + // }); m_agent->set_on_server_connected_fn([this]() { if (m_is_closing) { @@ -1708,6 +1728,7 @@ void GUI_App::init_networking_callbacks() event.SetString(obj->dev_id); } else if (state == ConnectStatus::ConnectStatusFailed) { obj->set_access_code(""); + obj->set_user_access_code(""); m_device_manager->set_selected_machine(""); wxString text; if (msg == "5") { @@ -1748,8 +1769,9 @@ void GUI_App::init_networking_callbacks() obj->is_ams_need_update = false; obj->parse_json(msg); - if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { - GUI::wxGetApp().sidebar().load_ams_list(obj->amsList); + auto sel = this->m_device_manager->get_selected_machine(); + if ((sel == obj || sel == nullptr) && obj->is_ams_need_update) { + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); } } }); @@ -1773,7 +1795,7 @@ void GUI_App::init_networking_callbacks() if (obj) { obj->parse_json(msg); if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { - GUI::wxGetApp().sidebar().load_ams_list(obj->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); } } }); @@ -1856,10 +1878,8 @@ void GUI_App::init_download_path() fs::path dp(down_path); if (!fs::exists(dp)) { - if (!fs::create_directory(dp)) { - std::string user_down_path = wxStandardPaths::Get().GetUserDir(wxStandardPaths::Dir_Downloads).ToUTF8().data(); - app_config->set("download_path", user_down_path); - } + std::string user_down_path = wxStandardPaths::Get().GetUserDir(wxStandardPaths::Dir_Downloads).ToUTF8().data(); + app_config->set("download_path", user_down_path); } } } @@ -1978,6 +1998,14 @@ void GUI_App::init_http_extra_header() m_agent->set_extra_http_header(extra_headers); } +void GUI_App::update_http_extra_header() +{ + std::map extra_headers = get_extra_header(); + Slic3r::Http::set_extra_headers(extra_headers); + if (m_agent) + m_agent->set_extra_http_header(extra_headers); +} + std::string GUI_App::get_local_models_path() { std::string local_path = ""; @@ -2064,7 +2092,7 @@ bool GUI_App::on_init_inner() } } for (auto d : dialogStack) - d->EndModal(wxID_CANCEL); + d->EndModal(wxID_ABORT); }); std::map extra_headers = get_extra_header(); @@ -2123,7 +2151,7 @@ bool GUI_App::on_init_inner() #endif // __APPLE__ - bool init_dark_color_mode = app_config->get("dark_color_mode") == "1"; + bool init_dark_color_mode = dark_mode(); bool init_sys_menu_enabled = app_config->get("sys_menu_enabled") == "1"; #ifdef __WINDOWS__ NppDarkMode::InitDarkMode(init_dark_color_mode, init_sys_menu_enabled); @@ -2138,7 +2166,7 @@ bool GUI_App::on_init_inner() #ifdef _MSW_DARK_MODE // app_config can be updated in check_older_app_config(), so check if dark_color_mode and sys_menu_enabled was changed - if (bool new_dark_color_mode = app_config->get("dark_color_mode") == "1"; + if (bool new_dark_color_mode = dark_mode(); init_dark_color_mode != new_dark_color_mode) { #ifdef __WINDOWS__ @@ -2325,7 +2353,13 @@ bool GUI_App::on_init_inner() // Suppress the '- default -' presets. preset_bundle->set_default_suppressed(true); + Bind(EVT_SET_SELECTED_MACHINE, &GUI_App::on_set_selected_machine, this); Bind(EVT_USER_LOGIN, &GUI_App::on_user_login, this); + Bind(EVT_USER_LOGIN_HANDLE, &GUI_App::on_user_login_handle, this); + Bind(EVT_CHECK_PRIVACY_VER, &GUI_App::on_check_privacy_update, this); + Bind(EVT_CHECK_PRIVACY_SHOW, &GUI_App::show_check_privacy_dlg, this); + + Bind(EVT_SHOW_IP_DIALOG, &GUI_App::show_ip_address_enter_dialog_handler, this); Bind(EVT_SHOW_IP_DIALOG, &GUI_App::show_ip_address_enter_dialog_handler, this); @@ -2334,6 +2368,8 @@ bool GUI_App::on_init_inner() if (m_agent && m_agent->is_user_login()) { enable_user_preset_folder(true); + } else { + enable_user_preset_folder(false); } // BBS if load user preset failed @@ -2349,13 +2385,11 @@ bool GUI_App::on_init_inner() } //} - - - if (app_config->get("sync_user_preset") == "true") { //BBS loading user preset - BOOST_LOG_TRIVIAL(info) << "Loading user presets..."; - scrn->SetText(_L("Loading user presets...")); + // Always async, not such startup step + //BOOST_LOG_TRIVIAL(info) << "Loading user presets..."; + //scrn->SetText(_L("Loading user presets...")); if (m_agent) { start_sync_user_preset(); } @@ -2798,6 +2832,7 @@ void GUI_App::UpdateDarkUIWin(wxWindow* win) void GUI_App::Update_dark_mode_flag() { m_is_dark_mode = dark_mode(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": switch the current dark mode status to %1% ")%m_is_dark_mode; } void GUI_App::UpdateDlgDarkUI(wxDialog* dlg) @@ -3075,6 +3110,11 @@ void GUI_App::ShowUserGuide() { void GUI_App::ShowDownNetPluginDlg() { try { + auto iter = std::find_if(dialogStack.begin(), dialogStack.end(), [](auto dialog) { + return dynamic_cast(dialog) != nullptr; + }); + if (iter != dialogStack.end()) + return; DownloadProgressDialog dlg(_L("Downloading Bambu Network Plug-in")); dlg.ShowModal(); } catch (std::exception &e) { @@ -3082,14 +3122,24 @@ void GUI_App::ShowDownNetPluginDlg() { } } -void GUI_App::ShowUserLogin() +void GUI_App::ShowUserLogin(bool show) { // BBS: User Login Dialog - try { - ZUserLogin LoginDlg; - LoginDlg.ShowModal(); - } catch (std::exception &e) { - // wxMessageBox(e.what(), "", MB_OK); + if (show) { + try { + if (!login_dlg) + login_dlg = new ZUserLogin(); + else { + delete login_dlg; + login_dlg = new ZUserLogin(); + } + login_dlg->ShowModal(); + } catch (std::exception &e) { + ; + } + } else { + if (login_dlg) + login_dlg->EndModal(wxID_OK); } } @@ -3168,7 +3218,7 @@ void GUI_App::force_colors_update() { #ifdef _MSW_DARK_MODE #ifdef __WINDOWS__ - NppDarkMode::SetDarkMode(app_config->get("dark_color_mode") == "1"); + NppDarkMode::SetDarkMode(dark_mode()); if (WXHWND wxHWND = wxToolTip::GetToolTipCtrl()) NppDarkMode::SetDarkExplorerTheme((HWND)wxHWND); NppDarkMode::SetDarkTitleBar(mainframe->GetHWND()); @@ -3321,6 +3371,13 @@ bool GUI_App::check_login() return result; } +void GUI_App::request_user_handle(int online_login) +{ + auto evt = new wxCommandEvent(EVT_USER_LOGIN_HANDLE); + evt->SetInt(online_login); + wxQueueEvent(this, evt); +} + void GUI_App::request_user_login(int online_login) { auto evt = new wxCommandEvent(EVT_USER_LOGIN); @@ -3339,12 +3396,9 @@ void GUI_App::request_user_logout() m_agent->user_logout(); m_agent->set_user_selected_machine(""); - BOOST_LOG_TRIVIAL(info) << "preset_folder: set to empty, user_logout"; - enable_user_preset_folder(false); /* delete old user settings */ m_device_manager->clean_user_info(); - GUI::wxGetApp().sidebar().load_ams_list({}); - GUI::wxGetApp().remove_user_presets(); + GUI::wxGetApp().sidebar().load_ams_list({}, {}); GUI::wxGetApp().stop_sync_user_preset(); #ifdef __WINDOWS__ @@ -3375,11 +3429,6 @@ std::string GUI_App::handle_web_request(std::string cmd) std::string web_cmd = j["command"].get(); if (web_cmd == "request_model_download") { - /* json j_data = j["data"]; - json import_j;*/ - /* import_j["model_id"] = j["data"]["model_id"].get(); - import_j["profile_id"] = j["data"]["profile_id"].get();*/ - std::string download_url = ""; if (j["data"].contains("download_url")) download_url = j["data"]["download_url"].get(); @@ -3575,7 +3624,7 @@ void GUI_App::request_model_download(std::string url, std::string filename) if (!check_login()) return; if (plater_) { - plater_->request_model_download(url, filename); + plater_->request_model_download(); } } @@ -3685,7 +3734,15 @@ void GUI_App::enable_user_preset_folder(bool enable) } } -void GUI_App::on_user_login(wxCommandEvent &evt) +void GUI_App::on_set_selected_machine(wxCommandEvent &evt) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev || m_agent) return; + + dev->set_selected_machine(m_agent->get_user_selected_machine()); +} + +void GUI_App::on_user_login_handle(wxCommandEvent &evt) { if (!m_agent) { return; } @@ -3695,8 +3752,12 @@ void GUI_App::on_user_login(wxCommandEvent &evt) // get machine list DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; - dev->update_user_machine_list_info(); - dev->set_selected_machine(m_agent->get_user_selected_machine()); + + boost::thread update_thread = boost::thread([this, dev] { + dev->update_user_machine_list_info(); + auto evt = new wxCommandEvent(EVT_SET_SELECTED_MACHINE); + wxQueueEvent(this, evt); + }); // if (app_config->get("sync_user_preset") == "true") { enable_user_preset_folder(true); @@ -3723,6 +3784,14 @@ void GUI_App::on_user_login(wxCommandEvent &evt) } } +void GUI_App::on_user_login(wxCommandEvent &evt) +{ + if (!m_agent) { return; } + int online_login = evt.GetInt(); + // check privacy before handle + check_privacy_version(online_login); +} + bool GUI_App::is_studio_active() { auto curr_time = std::chrono::system_clock::now(); @@ -3947,6 +4016,113 @@ void GUI_App::set_skip_version(bool skip) } } +void GUI_App::show_check_privacy_dlg(wxCommandEvent& evt) +{ + int online_login = evt.GetInt(); + PrivacyUpdateDialog privacy_dlg(this->mainframe, wxID_ANY, _L("Privacy Policy Update")); + privacy_dlg.Bind(EVT_PRIVACY_UPDATE_CONFIRM, [this, online_login](wxCommandEvent &e) { + app_config->set("privacy_version", privacy_version_info.version_str); + app_config->set_bool("privacy_update_checked", true); + app_config->save(); + request_user_handle(online_login); + }); + privacy_dlg.Bind(EVT_PRIVACY_UPDATE_CANCEL, [this](wxCommandEvent &e) { + app_config->set_bool("privacy_update_checked", false); + app_config->save(); + if (m_agent) { + m_agent->user_logout(); + } + }); + + privacy_dlg.set_text(privacy_version_info.description); + privacy_dlg.on_show(); +} + +void GUI_App::on_show_check_privacy_dlg(int online_login) +{ + auto evt = new wxCommandEvent(EVT_CHECK_PRIVACY_SHOW); + evt->SetInt(online_login); + wxQueueEvent(this, evt); +} + +bool GUI_App::check_privacy_update() +{ + if (privacy_version_info.version_str.empty() || privacy_version_info.description.empty() + || privacy_version_info.url.empty()) { + return false; + } + + std::string local_privacy_ver = app_config->get("privacy_version"); + auto curr_version = Semver::parse(local_privacy_ver); + auto remote_version = Semver::parse(privacy_version_info.version_str); + if (curr_version && remote_version) { + if (*remote_version > *curr_version || app_config->get("privacy_update_checked") != "true") { + return true; + } + } + return false; +} + +void GUI_App::on_check_privacy_update(wxCommandEvent& evt) +{ + int online_login = evt.GetInt(); + bool result = check_privacy_update(); + if (result) + on_show_check_privacy_dlg(online_login); + else + request_user_handle(online_login); +} + +void GUI_App::check_privacy_version(int online_login) +{ + update_http_extra_header(); + std::string query_params = "?policy/privacy=00.00.00.00"; + std::string url = get_http_url(app_config->get_country_code()) + query_params; + Slic3r::Http http = Slic3r::Http::get(url); + + http.header("accept", "application/json") + .timeout_connect(TIMEOUT_CONNECT) + .timeout_max(TIMEOUT_RESPONSE) + .on_complete([this, online_login](std::string body, unsigned) { + try { + json j = json::parse(body); + if (j.contains("message")) { + if (j["message"].get() == "success") { + if (j.contains("resources")) { + for (auto it = j["resources"].begin(); it != j["resources"].end(); it++) { + if (it->contains("type")) { + if ((*it)["type"] == std::string("policy/privacy") + && it->contains("version") + && it->contains("description") + && it->contains("url") + && it->contains("force_update")) { + privacy_version_info.version_str = (*it)["version"].get(); + privacy_version_info.description = (*it)["description"].get(); + privacy_version_info.url = (*it)["url"].get(); + privacy_version_info.force_upgrade = (*it)["force_update"].get(); + break; + } + } + } + CallAfter([this, online_login]() { + auto evt = new wxCommandEvent(EVT_CHECK_PRIVACY_VER); + evt->SetInt(online_login); + wxQueueEvent(this, evt); + }); + } + } + } + } + catch (...) { + request_user_handle(online_login); + } + }) + .on_error([this, online_login](std::string body, std::string error, unsigned int status) { + request_user_handle(online_login); + BOOST_LOG_TRIVIAL(error) << "check privacy version error" << body; + }).perform(); +} + void GUI_App::no_new_version() { wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_NO_NEW_VERSION); @@ -3986,17 +4162,19 @@ void GUI_App::reload_settings() m_agent->get_user_presets(&user_presets); preset_bundle->load_user_presets(*app_config, user_presets, ForwardCompatibilitySubstitutionRule::Enable); preset_bundle->save_user_presets(*app_config, get_delete_cache_presets()); + mainframe->update_side_preset_ui(); } } -//BBS reload when login +//BBS reload when logout void GUI_App::remove_user_presets() { if (preset_bundle && m_agent) { preset_bundle->remove_users_preset(*app_config); - std::string user_id = m_agent->get_user_id(); - preset_bundle->remove_user_presets_directory(user_id); + // Not remove user preset cache + //std::string user_id = m_agent->get_user_id(); + //preset_bundle->remove_user_presets_directory(user_id); //update ui mainframe->update_side_preset_ui(); @@ -4110,9 +4288,9 @@ void GUI_App::sync_preset(Preset* preset) } } -void GUI_App::start_sync_user_preset(bool with_progress_dlg) +void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_dlg) { - if (!m_agent) return; + if (!m_agent || !m_agent->is_user_login()) return; enable_user_preset_folder(true); @@ -4120,32 +4298,51 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) if (enable_sync) return; - if (m_agent->is_user_login()) { - // get setting list, update setting list - std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); - if (with_progress_dlg) { - ProgressDialog dlg(_L("Loading"), "", 100, this->mainframe, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT); - dlg.Update(0, _L("Loading user preset")); - m_agent->get_setting_list(version, - [this, &dlg](int percent){ - dlg.Update(percent, _L("Loading user preset")); - }, - [this, &dlg]() { - dlg.GetValue(); - bool cont = dlg.Update(dlg.GetValue(), _L("Loading user preset")); - return !cont; - }); - } else { - m_agent->get_setting_list(version); - } - GUI::wxGetApp().reload_settings(); + if (load_immediately) { + preset_bundle->load_user_presets(m_agent->get_user_id(), ForwardCompatibilitySubstitutionRule::Enable); + mainframe->update_side_preset_ui(); + } + + ProgressFn progressFn; + WasCancelledFn cancelFn; + std::function finishFn; + + if (with_progress_dlg) { + auto dlg = new ProgressDialog(_L("Loading"), "", 100, this->mainframe, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT); + dlg->Update(0, _L("Loading user preset")); + progressFn = [this, dlg](int percent) { + CallAfter([=]{ + dlg->Update(percent, _L("Loading user preset")); + }); + }; + cancelFn = [dlg]() { + return dlg->WasCanceled(); + }; + finishFn = [this, dlg] { + CallAfter([=]{ + dlg->Destroy(); + reload_settings(); + }); + }; + } + else { + finishFn = [this] { + CallAfter([=] { + reload_settings(); + }); + }; } BOOST_LOG_TRIVIAL(info) << "start_sync_service..."; //BBS enable_sync = true; m_sync_update_thread = Slic3r::create_thread( - [this] { + [this, progressFn, cancelFn, finishFn] { + // get setting list, update setting list + std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); + m_agent->get_setting_list(version, progressFn, cancelFn); + finishFn(); + int count = 0, sync_count = 0; std::vector presets_to_sync; while (enable_sync) { @@ -4182,12 +4379,13 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) unsigned int http_code = 200; /* get list witch need to be deleted*/ - std::vector& delete_cache_presets = get_delete_cache_presets(); + std::vector delete_cache_presets = get_delete_cache_presets_lock(); for (auto it = delete_cache_presets.begin(); it != delete_cache_presets.end();) { if ((*it).empty()) continue; std::string del_setting_id = *it; int result = m_agent->delete_setting(del_setting_id); if (result == 0) { + preset_deleted_from_cloud(del_setting_id); it = delete_cache_presets.erase(it); BOOST_LOG_TRIVIAL(trace) << "sync_preset: sync operation: delete success! setting id = " << del_setting_id; } @@ -4206,6 +4404,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) void GUI_App::stop_sync_user_preset() { + remove_user_presets(); enable_user_preset_folder(false); if (!enable_sync) @@ -4216,6 +4415,16 @@ void GUI_App::stop_sync_user_preset() m_sync_update_thread.join(); } +void GUI_App::start_http_server() +{ + if (!m_http_server.is_started()) + m_http_server.start(); +} +void GUI_App::stop_http_server() +{ + m_http_server.stop(); +} + bool GUI_App::switch_language() { if (select_language()) { @@ -4412,7 +4621,8 @@ bool GUI_App::load_language(wxString language, bool initial) {"fr", wxString::FromUTF8("\x46\x72\x61\x6E\xC3\xA7\x61\x69\x73")}, {"it", wxString::FromUTF8("\x49\x74\x61\x6C\x69\x61\x6E\x6F")}, {"ru", wxString::FromUTF8("\xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9")}, - {"hu", wxString::FromUTF8("Magyar")} + {"hu", wxString::FromUTF8("Magyar")}, + {"ja", wxString::FromUTF8("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E")} }; for (auto l : language_descptions) { const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(l.first); @@ -4517,7 +4727,9 @@ bool GUI_App::load_language(wxString language, bool initial) wxLANGUAGE_SPANISH, wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH, - wxLANGUAGE_HUNGARIAN}; + wxLANGUAGE_HUNGARIAN, + wxLANGUAGE_JAPANESE + }; std::string cur_language = app_config->get("language"); if (cur_language != "") { //cleanup the language wrongly set before @@ -5027,7 +5239,12 @@ bool GUI_App::check_and_keep_current_preset_changes(const wxString& caption, con static_cast(tab)->cache_extruder_cnt(); } } - tab->cache_config_diff(selected_options); + std::vector selected_options2; + std::transform(selected_options.begin(), selected_options.end(), std::back_inserter(selected_options2), [](auto & o) { + auto i = o.find('#'); + return i != std::string::npos ? o.substr(0, i) : o; + }); + tab->cache_config_diff(selected_options2); if (!is_called_from_configwizard) tab->m_presets->discard_current_changes(); } @@ -5114,16 +5331,31 @@ void GUI_App::load_current_presets(bool active_preset_combox/*= false*/, bool ch } } -std::vector& GUI_App::get_delete_cache_presets() +static std::mutex mutex_delete_cache_presets; + +std::vector & GUI_App::get_delete_cache_presets() { return need_delete_presets; } +std::vector GUI_App::get_delete_cache_presets_lock() +{ + std::scoped_lock l(mutex_delete_cache_presets); + return need_delete_presets; +} + void GUI_App::delete_preset_from_cloud(std::string setting_id) { + std::scoped_lock l(mutex_delete_cache_presets); need_delete_presets.push_back(setting_id); } +void GUI_App::preset_deleted_from_cloud(std::string setting_id) +{ + std::scoped_lock l(mutex_delete_cache_presets); + need_delete_presets.erase(std::remove(need_delete_presets.begin(), need_delete_presets.end(), setting_id), need_delete_presets.end()); +} + bool GUI_App::OnExceptionInMainLoop() { generic_exception_handle(); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index c8ba5bcae1..1b8628069a 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -11,8 +11,10 @@ #include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/GUI/WebViewDialog.hpp" +#include "slic3r/GUI/WebUserLoginDialog.hpp" #include "slic3r/GUI/HMS.hpp" #include "slic3r/GUI/Jobs/UpgradeNetworkJob.hpp" +#include "slic3r/GUI/HttpServer.hpp" #include "../Utils/PrintHost.hpp" #include @@ -274,7 +276,11 @@ private: bool m_networking_cancel_update { false }; std::shared_ptr m_upgrade_network_job; + // login widget + ZUserLogin* login_dlg { nullptr }; + VersionInfo version_info; + VersionInfo privacy_version_info; static std::string version_display; HMSQuery *hms_query { nullptr }; @@ -283,7 +289,9 @@ private: bool m_is_dark_mode{ false }; bool m_adding_script_handler { false }; bool m_side_popup_status{false}; + HttpServer m_http_server; public: + void check_filaments_in_blacklist(std::string tag_supplier, std::string tag_material, bool& in_blacklist, std::string& action, std::string& info); std::string get_local_models_path(); bool OnInit() override; bool initialized() const { return m_initialized; } @@ -380,7 +388,7 @@ public: wxString transition_tridid(int trid_id); void ShowUserGuide(); void ShowDownNetPluginDlg(); - void ShowUserLogin(); + void ShowUserLogin(bool show = true); void ShowOnlyFilament(); //BBS void request_login(bool show_user_info = false); @@ -388,7 +396,8 @@ public: void get_login_info(); bool is_user_login(); - void request_user_login(int online_login); + void request_user_login(int online_login = 0); + void request_user_handle(int online_login = 0); void request_user_logout(); int request_user_unbind(std::string dev_id); std::string handle_web_request(std::string cmd); @@ -401,7 +410,9 @@ public: void handle_http_error(unsigned int status, std::string body); void on_http_error(wxCommandEvent &evt); + void on_set_selected_machine(wxCommandEvent& evt); void on_user_login(wxCommandEvent &evt); + void on_user_login_handle(wxCommandEvent& evt); void enable_user_preset_folder(bool enable); // BBS @@ -422,8 +433,16 @@ public: void reload_settings(); void remove_user_presets(); void sync_preset(Preset* preset); - void start_sync_user_preset(bool with_progress_dlg = false); + void start_sync_user_preset(bool load_immediately = false, bool with_progress_dlg = false); void stop_sync_user_preset(); + void start_http_server(); + void stop_http_server(); + + void on_show_check_privacy_dlg(int online_login = 0); + void show_check_privacy_dlg(wxCommandEvent& evt); + void on_check_privacy_update(wxCommandEvent &evt); + bool check_privacy_update(); + void check_privacy_version(int online_login = 0); static bool catch_error(std::function cb, const std::string& err); @@ -457,8 +476,10 @@ public: bool checked_tab(Tab* tab); //BBS: add preset combox re-active logic void load_current_presets(bool active_preset_combox = false, bool check_printer_presets = true); - std::vector& get_delete_cache_presets(); + std::vector &get_delete_cache_presets(); + std::vector get_delete_cache_presets_lock(); void delete_preset_from_cloud(std::string setting_id); + void preset_deleted_from_cloud(std::string setting_id); wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); } // Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US". @@ -486,13 +507,21 @@ public: Model& model(); NotificationManager * notification_manager(); + + std::string m_mall_model_download_url; + std::string m_mall_model_download_name; ModelMallDialog* m_mall_home_dialog{ nullptr }; ModelMallDialog* m_mall_publish_dialog{ nullptr }; + void set_download_model_url(std::string url) {m_mall_model_download_url = url;} + void set_download_model_name(std::string name) {m_mall_model_download_name = name;} + std::string get_download_model_url() {return m_mall_model_download_url;} + std::string get_download_model_name() {return m_mall_model_download_name;} + void load_url(wxString url); void open_mall_page_dialog(); void open_publish_page_dialog(); - void remove_mall_system_dialog(); + void remove_mall_system_dialog(); void run_script(wxString js); bool is_adding_script_handler() { return m_adding_script_handler; } void set_adding_script_handler(bool status) { m_adding_script_handler = status; } @@ -574,6 +603,7 @@ private: //BBS set extra header for http request std::map get_extra_header(); void init_http_extra_header(); + void update_http_extra_header(); bool check_older_app_config(Semver current_version, bool backup); void copy_older_config(); void window_pos_save(wxTopLevelWindow* window, const std::string &name); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index a1c50773cf..311f155dda 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -432,6 +432,19 @@ std::vector MenuFactory::get_volume_bitmaps() return volume_bmps; } +void MenuFactory::append_menu_item_set_visible(wxMenu* menu) +{ + bool has_one_shown = false; + const Selection& selection = plater()->canvas3D()->get_selection(); + for (unsigned int i : selection.get_volume_idxs()) { + has_one_shown |= selection.get_volume(i)->visible; + } + + append_menu_item(menu, wxID_ANY, has_one_shown ?_L("Hide") : _L("Show"), "", + [has_one_shown](wxCommandEvent&) { plater()->set_selected_visible(!has_one_shown); }, "", nullptr, + []() { return true; }, m_parent); +} + void MenuFactory::append_menu_item_delete(wxMenu* menu) { #ifdef __WINDOWS__ @@ -445,6 +458,19 @@ void MenuFactory::append_menu_item_delete(wxMenu* menu) #endif } +void MenuFactory::append_menu_item_edit_text(wxMenu *menu) +{ +#ifdef __WINDOWS__ + append_menu_item( + menu, wxID_ANY, _L("Edit Text"), "", [](wxCommandEvent &) { plater()->edit_text(); }, "", nullptr, + []() { return plater()->can_edit_text(); }, m_parent); +#else + append_menu_item( + menu, wxID_ANY, _L("Edit Text"), "", [](wxCommandEvent &) { plater()->edit_text(); }, "", nullptr, + []() { return plater()->can_edit_text(); }, m_parent); +#endif +} + wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType type) { auto sub_menu = new wxMenu; @@ -735,6 +761,8 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu) bool show_flush_option_menu = false; ObjectList* object_list = obj_list(); const Selection& selection = get_selection(); + if (selection.get_object_idx() < 0) + return; if (wxGetApp().plater()->get_partplate_list().get_curr_plate()->contains(selection.get_bounding_box())) { auto plate_extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders(); for (auto extruder : plate_extruders) { @@ -784,7 +812,7 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu) { i++; wxMenuItem* item = node->GetData(); - if (item->GetItemLabelText() == "Edit in Parameter Table") + if (item->GetItemLabelText() == _L("Edit in Parameter Table")) break; } menu->Insert(i, wxID_ANY, _L("Flush Options"), flush_options_menu); @@ -1057,6 +1085,7 @@ void MenuFactory::create_bbl_part_menu() wxMenu* menu = &m_part_menu; append_menu_item_delete(menu); + append_menu_item_edit_text(menu); append_menu_item_fix_through_netfabb(menu); append_menu_item_simplify(menu); append_menu_item_center(menu); @@ -1310,8 +1339,9 @@ wxMenu* MenuFactory::assemble_multi_selection_menu() return nullptr; wxMenu* menu = new MenuWithSeparators(); - append_menu_item_fix_through_netfabb(menu); - append_menu_item_simplify(menu); + append_menu_item_set_visible(menu); + //append_menu_item_fix_through_netfabb(menu); + //append_menu_item_simplify(menu); append_menu_item_delete(menu); menu->AppendSeparator(); append_menu_item_change_extruder(menu); @@ -1328,18 +1358,36 @@ wxMenu* MenuFactory::plate_menu() wxMenu* MenuFactory::assemble_object_menu() { + wxMenu* menu = new MenuWithSeparators(); + // Set Visible + append_menu_item_set_visible(menu); + // Delete + append_menu_item_delete(menu); + //// Object Repair + //append_menu_item_fix_through_netfabb(menu); + //// Object Simplify + //append_menu_item_simplify(menu); + menu->AppendSeparator(); + // Set filament - append_menu_item_change_extruder(&m_assemble_object_menu); - // Enter per object parameters - append_menu_item_per_object_settings(&m_assemble_object_menu); - return &m_assemble_object_menu; + append_menu_item_change_extruder(menu); + //// Enter per object parameters + //append_menu_item_per_object_settings(menu); + return menu; } wxMenu* MenuFactory::assemble_part_menu() { - append_menu_item_change_extruder(&m_assemble_part_menu); - append_menu_item_per_object_settings(&m_assemble_part_menu); - return &m_assemble_part_menu; + wxMenu* menu = new MenuWithSeparators(); + + append_menu_item_set_visible(menu); + append_menu_item_delete(menu); + //append_menu_item_simplify(menu); + menu->AppendSeparator(); + + append_menu_item_change_extruder(menu); + //append_menu_item_per_object_settings(menu); + return menu; } void MenuFactory::append_menu_item_clone(wxMenu* menu) @@ -1509,7 +1557,7 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) } } - wxString menu_text = all_printable ? L("Set Unprintable") : _L("Set Printable"); + wxString menu_text = all_printable ? _L("Set Unprintable") : _L("Set Printable"); append_menu_item(menu, wxID_ANY, menu_text, "", [this, all_printable](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_printable(!all_printable); diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index a2e2e73d25..a3c01f961f 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -126,7 +126,9 @@ private: void append_menu_item_reload_from_disk(wxMenu* menu); void append_menu_item_replace_with_stl(wxMenu* menu); void append_menu_item_change_extruder(wxMenu* menu); + void append_menu_item_set_visible(wxMenu* menu); void append_menu_item_delete(wxMenu* menu); + void append_menu_item_edit_text(wxMenu *menu); void append_menu_item_scale_selection_to_fit_print_volume(wxMenu* menu); void append_menu_items_convert_unit(wxMenu* menu); // Add "Conver/Revert..." menu items (from/to inches/meters) after "Reload From Disk" void append_menu_items_flush_options(wxMenu* menu); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 409deaff3f..08d3b6c4bb 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -30,6 +30,7 @@ #include "slic3r/Utils/FixModelByWin10.hpp" #include "libslic3r/Format/bbs_3mf.hpp" +#include "libslic3r/PrintConfig.hpp" #ifdef __WXMSW__ #include "wx/uiaction.h" @@ -91,6 +92,9 @@ ObjectList::ObjectList(wxWindow* parent) : Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxDataViewEvent& event) { // detect the current mouse position here, to pass it to list_manipulation() method // if we detect it later, the user may have moved the mouse pointer while calculations are performed, and this would mess-up the HitTest() call performed into list_manipulation() + if (!GetScreenRect().Contains(wxGetMousePosition())) { + return; + } #ifndef __WXOSX__ const wxPoint mouse_pos = this->get_mouse_position_in_control(); #endif @@ -731,7 +735,7 @@ void ObjectList::printable_state_changed(const std::vector& ov_i obj_idxs.erase(unique(obj_idxs.begin(), obj_idxs.end()), obj_idxs.end()); // update printable state on canvas - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(obj_idxs); // update scene wxGetApp().plater()->update(); @@ -1397,8 +1401,21 @@ void ObjectList::key_event(wxKeyEvent& event) void ObjectList::OnBeginDrag(wxDataViewEvent &event) { - bool sequential_print = (wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_enum("print_sequence") == PrintSequence::ByObject); - if (!sequential_print) { + int curr_obj_id = m_objects_model->GetIdByItem(event.GetItem()); + PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list(); + int from_plate = partplate_list.find_instance(curr_obj_id, 0); + if (from_plate == -1) { + event.Veto(); + return; + } + auto curr_plate_seq = partplate_list.get_plate(from_plate)->get_print_seq(); + if (curr_plate_seq == PrintSequence::ByDefault) { + auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + if (curr_preset_config.has("print_sequence")) + curr_plate_seq = curr_preset_config.option>("print_sequence")->value; + } + + if (curr_plate_seq != PrintSequence::ByObject) { //drag forbidden under bylayer mode event.Veto(); return; @@ -1777,7 +1794,7 @@ void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false if (type == ModelVolumeType::MODEL_PART) // update printable state on canvas - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); if (items.size() > 1) { m_selection_mode = smVolume; @@ -1923,11 +1940,9 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo ModelVolume* new_volume = model_object.add_volume(std::move(mesh), type); new_volume->name = boost::filesystem::path(input_file).filename().string(); - // adjust the position according to the bounding box - const BoundingBoxf3 mesh_bb = new_volume->mesh().bounding_box(); - new_volume->set_transformation(Geometry::Transformation::volume_to_bed_transformation(v->get_instance_transformation(), mesh_bb)); - auto offset = Vec3d(instance_bb.max.x(), instance_bb.min.y(), instance_bb.min.z()) + 0.5 * mesh_bb.size() - v->get_instance_offset(); - new_volume->set_offset(v->get_instance_transformation().get_matrix(true).inverse() * offset); + // BBS: object_mesh.get_init_shift() keep the relative position + TriangleMesh object_mesh = model_object.volumes[0]->mesh(); + new_volume->set_offset(new_volume->mesh().get_init_shift() - object_mesh.get_init_shift()); // set a default extruder value, since user can't add it manually // BBS @@ -2055,7 +2070,7 @@ void ObjectList::load_generic_subobject(const std::string& type_name, const Mode }); if (type == ModelVolumeType::MODEL_PART) // update printable state on canvas - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); // apply the instance transform to all volumes and reset instance transform except the offset apply_object_instance_transfrom_to_all_volumes(&model_object); @@ -2158,50 +2173,54 @@ void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name #endif /* _DEBUG */ } -void ObjectList::load_mesh_part(const TriangleMesh& mesh, const wxString& name, bool center) +int ObjectList::load_mesh_part(const TriangleMesh &mesh, const wxString &name, const TextInfo &text_info, bool is_temp) { wxDataViewItem item = GetSelection(); // we can add volumes for Object or Instance if (!item || !(m_objects_model->GetItemType(item) & (itObject | itInstance))) - return; + return -1; const int obj_idx = m_objects_model->GetObjectIdByItem(item); - if (obj_idx < 0) return; + if (obj_idx < 0) + return -1; // Get object item, if Instance is selected if (m_objects_model->GetItemType(item) & itInstance) item = m_objects_model->GetItemById(obj_idx); - take_snapshot("Load Mesh Part"); - ModelObject* mo = (*m_objects)[obj_idx]; + Geometry::Transformation instance_transformation = mo->instances[0]->get_transformation(); + // apply the instance transform to all volumes and reset instance transform except the offset - apply_object_instance_transfrom_to_all_volumes(mo); + apply_object_instance_transfrom_to_all_volumes(mo, !is_temp); - ModelVolume* mv = mo->add_volume(mesh); - Vec3d instance_bbox = mo->mesh().bounding_box().size(); - Vec3d offset = Vec3d(0, 0, instance_bbox[2] / 2); - mv->set_offset(offset); + ModelVolume *mv = mo->add_volume(mesh); mv->name = name.ToStdString(); + if (!text_info.m_text.empty()) + mv->set_text_info(text_info); - std::vector volumes; - volumes.push_back(mv); - wxDataViewItemArray items = reorder_volumes_and_get_selection(obj_idx, [volumes](const ModelVolume* volume) { - return std::find(volumes.begin(), volumes.end(), volume) != volumes.end(); }); + if (!is_temp) { + std::vector volumes; + volumes.push_back(mv); + wxDataViewItemArray items = reorder_volumes_and_get_selection(obj_idx, [volumes](const ModelVolume *volume) { + return std::find(volumes.begin(), volumes.end(), volume) != volumes.end(); + }); - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_object((size_t)obj_idx); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_object((size_t) obj_idx); - if (items.size() > 1) { - m_selection_mode = smVolume; - m_last_selected_item = wxDataViewItem(nullptr); + if (items.size() > 1) { + m_selection_mode = smVolume; + m_last_selected_item = wxDataViewItem(nullptr); + } + select_items(items); + + selection_changed(); } - select_items(items); - - selection_changed(); //BBS: notify partplate the modify notify_instance_updated(obj_idx); + return mo->volumes.size() - 1; } //BBS @@ -4563,7 +4582,7 @@ void ObjectList::instances_to_separated_object(const int obj_idx, const std::set } // update printable state for new volumes on canvas3D - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_object(new_obj_indx); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_object(new_obj_indx); update_info_items(new_obj_indx); } @@ -4596,7 +4615,7 @@ void ObjectList::instances_to_separated_objects(const int obj_idx) } // update printable state for new volumes on canvas3D - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(object_idxs); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(object_idxs); for (size_t object : object_idxs) update_info_items(object); } @@ -4707,10 +4726,13 @@ void ObjectList::fix_through_netfabb() std::string res; if (!fix_model_by_win10_sdk_gui(*(object(obj_idx)), vol_idx, progress_dlg, msg, res)) return false; - wxGetApp().plater()->changed_mesh(obj_idx); - + //wxGetApp().plater()->changed_mesh(obj_idx); + object(obj_idx)->ensure_on_bed(); plater->changed_mesh(obj_idx); + plater->get_partplate_list().notify_instance_update(obj_idx, 0); + plater->sidebar().obj_list()->update_plate_values_for_items(); + if (res.empty()) succes_models.push_back(model_name); else @@ -4719,8 +4741,6 @@ void ObjectList::fix_through_netfabb() update_item_error_icon(obj_idx, vol_idx); update_info_items(obj_idx); - object(obj_idx)->ensure_on_bed(); - return true; }; @@ -5037,7 +5057,7 @@ void ObjectList::reload_all_plates(bool notify_partplate) m_prevent_canvas_selection_update = false; // update printable states on canvas - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(obj_idxs); // update scene wxGetApp().plater()->update(); } @@ -5171,7 +5191,7 @@ void ObjectList::toggle_printable_state() obj_idxs.erase(unique(obj_idxs.begin(), obj_idxs.end()), obj_idxs.end()); // update printable state on canvas - wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects(obj_idxs); + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(obj_idxs); // update scene wxGetApp().plater()->update(); @@ -5190,17 +5210,20 @@ bool ObjectList::has_paint_on_segmentation() return m_objects_model->HasInfoItem(InfoItemType::MmuSegmentation); } -void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object) { +void ObjectList::apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix) +{ const Geometry::Transformation &instance_transformation = model_object->instances[0]->get_transformation(); Vec3d original_instance_center = instance_transformation.get_offset(); - // apply the instance_transform(except offset) to assemble_transform - Geometry::Transformation instance_transformation_copy = instance_transformation; - instance_transformation_copy.set_offset(Vec3d(0, 0, 0)); // remove the effect of offset - const Transform3d & instance_inverse_matrix = instance_transformation_copy.get_matrix().inverse(); - const Transform3d & assemble_matrix = model_object->instances[0]->get_assemble_transformation().get_matrix(); - Transform3d new_assemble_transform = assemble_matrix * instance_inverse_matrix; - model_object->instances[0]->set_assemble_from_transform(new_assemble_transform); + if (need_update_assemble_matrix) { + // apply the instance_transform(except offset) to assemble_transform + Geometry::Transformation instance_transformation_copy = instance_transformation; + instance_transformation_copy.set_offset(Vec3d(0, 0, 0)); // remove the effect of offset + const Transform3d &instance_inverse_matrix = instance_transformation_copy.get_matrix().inverse(); + const Transform3d &assemble_matrix = model_object->instances[0]->get_assemble_transformation().get_matrix(); + Transform3d new_assemble_transform = assemble_matrix * instance_inverse_matrix; + model_object->instances[0]->set_assemble_from_transform(new_assemble_transform); + } // apply the instance_transform to volumn const Transform3d &transformation_matrix = instance_transformation.get_matrix(); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 8ce1b81e7a..1ec7c0bdd5 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -27,6 +27,7 @@ class ModelConfig; class ModelObject; class ModelVolume; class TriangleMesh; +struct TextInfo; enum class ModelVolumeType : int; // FIXME: broken build on mac os because of this is missing: @@ -283,7 +284,7 @@ public: void load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center = true); // BBS void switch_to_object_process(); - void load_mesh_part(const TriangleMesh& mesh, const wxString& name, bool center = true); + int load_mesh_part(const TriangleMesh &mesh, const wxString &name, const TextInfo &text_info, bool is_temp); void del_object(const int obj_idx, bool refresh_immediately = true); void del_subobject_item(wxDataViewItem& item); void del_settings_from_config(const wxDataViewItem& parent_item); @@ -454,7 +455,7 @@ private: void OnEditingDone(wxDataViewEvent &event); // apply the instance transform to all volumes and reset instance transform except the offset - void apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object); + void apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix = true); std::vector m_columns_width; }; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 4989767511..8928f87d73 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -344,7 +344,10 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); - dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); + if ( grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { + dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); + } + text_rect.x += bitmap_width + grid_cell_border_width * 2; text_rect.width -= (bitmap_width + grid_cell_border_width * 2); } @@ -1968,6 +1971,7 @@ void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) { ModelVolume* volume = object->volumes[j]; ObjectGridRow* volume_grid = new ObjectGridRow(i, j, row_volume); + volume_grid->model_volume_type = volume->type(); volume_grid->config = &(volume->config); volume_grid->name.value = volume->name; size_t pos = volume_grid->name.value.find_first_not_of(' '); @@ -2952,11 +2956,21 @@ void ObjectTablePanel::load_data() break; case coEnum: if (col == ObjectGridTable::col_filaments) { - GridCellFilamentsEditor *filament_editor = new GridCellFilamentsEditor(grid_col->choice_count, grid_col->choices, false, &m_color_bitmaps); - m_object_grid->SetCellEditor(row, col, filament_editor); - m_object_grid->SetCellRenderer(row, col, new GridCellFilamentsRenderer()); - } else { - GridCellChoiceEditor *combo_editor = new GridCellChoiceEditor(grid_col->choice_count, grid_col->choices); + if (grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { + GridCellFilamentsEditor* filament_editor = new GridCellFilamentsEditor(grid_col->choice_count, grid_col->choices, false, &m_color_bitmaps); + m_object_grid->SetCellEditor(row, col, filament_editor); + m_object_grid->SetCellRenderer(row, col, new GridCellFilamentsRenderer()); + } + else { + m_object_grid->SetCellEditor(row, col, new GridCellTextEditor()); + auto gcfil = new GridCellFilamentsRenderer(); + m_object_grid->SetCellRenderer(row, col, gcfil); + m_object_grid->SetReadOnly(row, col); + //m_object_grid->SetCellFitMode(row, col, wxGridFitMode::Ellipsize()); + } + } + else { + GridCellChoiceEditor* combo_editor = new GridCellChoiceEditor(grid_col->choice_count, grid_col->choices); m_object_grid->SetCellEditor(row, col, combo_editor); m_object_grid->SetCellRenderer(row, col, new wxGridCellChoiceRenderer()); } diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 0abe00545d..072f211f7d 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -348,6 +348,7 @@ public: ConfigOptionFloat ori_speed_perimeter; ModelConfig* config; + ModelVolumeType model_volume_type; ObjectGridRow(int obj_id, int vol_id, GridRowType type) : object_id(obj_id), volume_id(vol_id), row_type(type) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 2730544b7c..64f0fc4a0f 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -385,9 +385,9 @@ void Preview::sys_color_changed() void Preview::on_tick_changed(Type type) { - if (type == Type::PausePrint) { - m_schedule_background_process(); - } + //if (type == Type::PausePrint) { + // m_schedule_background_process(); + //} m_keep_current_preview_type = false; reload_print(false); } @@ -485,8 +485,7 @@ void Preview::update_layers_slider_mode() // check if whole model uses just only one extruder if (!plate_extruders.empty()) { //const int extruder = objects[0]->config.has("extruder") ? objects[0]->config.option("extruder")->getInt() : 0; - const int extruder = plate_extruders[0]; - only_extruder = extruder; + only_extruder = plate_extruders[0]; // auto is_one_extruder_printed_model = [objects, extruder]() { // for (ModelObject *object : objects) { // if (object->config.has("extruder") && object->config.option("extruder")->getInt() != extruder) /*return false*/; @@ -552,15 +551,16 @@ void Preview::update_layers_slider(const std::vector& layers_z, bool kee // Detect and set manipulation mode for double slider update_layers_slider_mode(); - Plater * plater = wxGetApp().plater(); - CustomGCode::Info ticks_info_from_model; + Plater* plater = wxGetApp().plater(); + //BBS: replace model custom gcode with current plate custom gcode + CustomGCode::Info ticks_info_from_curr_plate; if (wxGetApp().is_editor()) - ticks_info_from_model = plater->model().custom_gcode_per_print_z; + ticks_info_from_curr_plate = plater->model().get_curr_plate_custom_gcodes(); else { - ticks_info_from_model.mode = CustomGCode::Mode::SingleExtruder; - ticks_info_from_model.gcodes = m_canvas->get_custom_gcode_per_print_z(); + ticks_info_from_curr_plate.mode = CustomGCode::Mode::SingleExtruder; + ticks_info_from_curr_plate.gcodes = m_canvas->get_custom_gcode_per_print_z(); } - check_layers_slider_values(ticks_info_from_model.gcodes, layers_z); + check_layers_slider_values(ticks_info_from_curr_plate.gcodes, layers_z); // first of all update extruder colors to avoid crash, when we are switching printer preset from MM to SM m_layers_slider->SetExtruderColors(plater->get_extruder_colors_from_plater_config(wxGetApp().is_editor() ? nullptr : m_gcode_result)); @@ -581,9 +581,11 @@ void Preview::update_layers_slider(const std::vector& layers_z, bool kee } } m_layers_slider->SetSelectionSpan(idx_low, idx_high); - m_layers_slider->SetTicksValues(ticks_info_from_model); + m_layers_slider->SetTicksValues(ticks_info_from_curr_plate); - bool sequential_print = (wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_enum("print_sequence") == PrintSequence::ByObject); + auto curr_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + auto curr_print_seq = curr_plate->get_real_print_seq(); + bool sequential_print = (curr_print_seq == PrintSequence::ByObject); m_layers_slider->SetDrawMode(sequential_print); auto print_mode_stat = m_gcode_result->print_statistics.modes.front(); @@ -688,7 +690,8 @@ void Preview::load_print_as_fff(bool keep_z_range, bool only_gcode) if (!gcode_preview_data_valid) { if (wxGetApp().is_editor()) - color_print_values = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes; + //BBS + color_print_values = wxGetApp().plater()->model().get_curr_plate_custom_gcodes().gcodes; else color_print_values = m_canvas->get_custom_gcode_per_print_z(); colors.push_back("#808080"); // gray color for pause print or custom G-code @@ -703,7 +706,8 @@ void Preview::load_print_as_fff(bool keep_z_range, bool only_gcode) if (IsShown()) { m_canvas->set_selected_extruder(0); - if (gcode_preview_data_valid) { + bool is_slice_result_valid = wxGetApp().plater()->get_partplate_list().get_curr_plate()->is_slice_result_valid(); + if (gcode_preview_data_valid && (is_slice_result_valid || m_only_gcode)) { // Load the real G-code preview. //BBS: add more log BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": will load gcode_preview from result, moves count %1%") % m_gcode_result->moves.size(); @@ -734,7 +738,8 @@ void Preview::load_print_as_fff(bool keep_z_range, bool only_gcode) (unsigned int)print->extruders().size() : m_canvas->get_gcode_extruders_count(); std::vector gcodes = wxGetApp().is_editor() ? - wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes : + //BBS + wxGetApp().plater()->model().get_curr_plate_custom_gcodes().gcodes : m_canvas->get_custom_gcode_per_print_z(); const wxString choice = !gcodes.empty() ? _L("Multicolor Print") : diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index 7cc0a6bc56..d683e33f14 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -430,7 +430,10 @@ bool load_image(const std::string &filename, wxImage &image) result = image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_BMP); } else if (boost::algorithm::iends_with(filename, ".jpg")) { result = image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_JPEG); - } else { + } else if (boost::algorithm::iends_with(filename, ".jpeg")) { + result = image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_JPEG); + } + else { return false; } return result; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 91ae0288fd..06793ce7c0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -128,6 +128,29 @@ void GLGizmoFdmSupports::render_painter_gizmo() const glsafe(::glDisable(GL_BLEND)); } +// BBS +bool GLGizmoFdmSupports::on_key_down_select_tool_type(int keyCode) { + switch (keyCode) + { + case 'F': + m_current_tool = ImGui::FillButtonIcon; + break; + case 'S': + m_current_tool = ImGui::SphereButtonIcon; + break; + case 'C': + m_current_tool = ImGui::CircleButtonIcon; + break; + case 'G': + m_current_tool = ImGui::GapFillIcon; + break; + default: + return false; + break; + } + return true; +} + // BBS void GLGizmoFdmSupports::render_triangles(const Selection& selection) const { @@ -865,42 +888,22 @@ void GLGizmoFdmSupports::run_thread() goto _finished; } - if (m_is_tree_support) + if (!m_print_instance.print_object->support_layers().size()) { - if (!m_print_instance.print_object->tree_support_layers().size()) - { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",no tree support layer found, update status to 100%\n"; - print->set_status(100, L("Support Generated")); - goto _finished; - } - for (const TreeSupportLayer *support_layer : m_print_instance.print_object->tree_support_layers()) - { - for (const ExtrusionEntity *extrusion_entity : support_layer->support_fills.entities) - { - _3DScene::extrusionentity_to_verts(extrusion_entity, float(support_layer->print_z), m_print_instance.shift, *m_support_volume); - } - } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished extrusionentity_to_verts, update status to 100%"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",no support layer found, update status to 100%\n"; print->set_status(100, L("Support Generated")); + goto _finished; } - else + for (const SupportLayer *support_layer : m_print_instance.print_object->support_layers()) { - if (!m_print_instance.print_object->support_layers().size()) + for (const ExtrusionEntity *extrusion_entity : support_layer->support_fills.entities) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",no support layer found, update status to 100%\n"; - print->set_status(100, L("Support Generated")); - goto _finished; + _3DScene::extrusionentity_to_verts(extrusion_entity, float(support_layer->print_z), m_print_instance.shift, *m_support_volume); } - for (const SupportLayer *support_layer : m_print_instance.print_object->support_layers()) - { - for (const ExtrusionEntity *extrusion_entity : support_layer->support_fills.entities) - { - _3DScene::extrusionentity_to_verts(extrusion_entity, float(support_layer->print_z), m_print_instance.shift, *m_support_volume); - } - } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished extrusionentity_to_verts, update status to 100%"; - print->set_status(100, L("Support Generated")); } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished extrusionentity_to_verts, update status to 100%"; + print->set_status(100, L("Support Generated")); + record_timestamp(); } catch (...) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index 3cf7184a76..6960a81dc6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -24,6 +24,9 @@ public: state_ready }; + //BBS + bool on_key_down_select_tool_type(int keyCode); + protected: void on_render_input_window(float x, float y, float bottom_limit) override; std::string on_get_name() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index d7d54669c1..278d0d3758 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -241,6 +241,34 @@ bool GLGizmoMmuSegmentation::on_number_key_down(int number) return true; } +bool GLGizmoMmuSegmentation::on_key_down_select_tool_type(int keyCode) { + switch (keyCode) + { + case 'F': + m_current_tool = ImGui::FillButtonIcon; + break; + case 'T': + m_current_tool = ImGui::TriangleButtonIcon; + break; + case 'S': + m_current_tool = ImGui::SphereButtonIcon; + break; + case 'C': + m_current_tool = ImGui::CircleButtonIcon; + break; + case 'H': + m_current_tool = ImGui::HeightRangeIcon; + break; + case 'G': + m_current_tool = ImGui::GapFillIcon; + break; + default: + return false; + break; + } + return true; +} + static void render_extruders_combo(const std::string &label, const std::vector &extruders, const std::vector> &extruders_colors, diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index da9c5d9c64..6b5cde25c7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -83,6 +83,7 @@ public: // BBS bool on_number_key_down(int number); + bool on_key_down_select_tool_type(int keyCode); protected: // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 487160aaa2..aa4554413c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -261,7 +261,7 @@ protected: static constexpr float CursorRadiusMin = 0.4f; // cannot be zero static constexpr float CursorRadiusMax = 8.f; static constexpr float CursorRadiusStep = 0.2f; - static constexpr float CursorHeightMin = 0.2f; // cannot be zero + static constexpr float CursorHeightMin = 0.1f; // cannot be zero static constexpr float CursorHeightMax = 8.f; static constexpr float CursorHeightStep = 0.2f; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 6885838835..6f61f7ebac 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -226,10 +226,11 @@ void GLGizmoScale3D::on_render() //draw connections - if (single_instance || single_volume) { + // BBS: when select multiple objects, uniform scale can be deselected, display the connection(4,5) + //if (single_instance || single_volume) { glsafe(::glColor4fv(m_grabbers[4].color.data())); render_grabbers_connection(4, 5); - } + //} glsafe(::glColor4fv(m_grabbers[2].color.data())); render_grabbers_connection(6, 7); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 8fd290c0a9..3ea292e942 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -78,6 +78,23 @@ void GLGizmoSeam::render_painter_gizmo() const glsafe(::glDisable(GL_BLEND)); } +// BBS +bool GLGizmoSeam::on_key_down_select_tool_type(int keyCode) { + switch (keyCode) + { + case 'S': + m_current_tool = ImGui::SphereButtonIcon; + break; + case 'C': + m_current_tool = ImGui::CircleButtonIcon; + break; + default: + return false; + break; + } + return true; +} + void GLGizmoSeam::render_triangles(const Selection& selection) const { ClippingPlaneDataWrapper clp_data = this->get_clipping_plane_data(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 128a87cc56..3f724deaf7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -12,6 +12,9 @@ public: void render_painter_gizmo() const override; + //BBS + bool on_key_down_select_tool_type(int keyCode); + protected: // BBS void on_set_state() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index e5031dec21..5c2096cffb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -70,7 +70,7 @@ GLGizmoSimplify::GLGizmoSimplify(GLCanvas3D & parent, {} GLGizmoSimplify::~GLGizmoSimplify() -{ +{ stop_worker_thread_request(); if (m_worker.joinable()) m_worker.join(); @@ -173,10 +173,10 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi // Whether to trigger calculation after rendering is done. bool start_process = false; - + // Check selection of new volume - // Do not reselect object when processing + // Do not reselect object when processing if (act_volume != m_volume) { bool change_window_position = (m_volume == nullptr); // select different model @@ -193,13 +193,13 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi // Start processing. If we switched from another object, process will // stop the background thread and it will restart itself later. start_process = true; - + // set window position if (m_move_to_center && change_window_position) { m_move_to_center = false; - auto parent_size = m_parent.get_canvas_size(); + auto parent_size = m_parent.get_canvas_size(); ImVec2 pos(parent_size.get_width() / 2 - m_gui_cfg->window_offset_x, - parent_size.get_height() / 2 - m_gui_cfg->window_offset_y); + parent_size.get_height() / 2 - m_gui_cfg->window_offset_y); ImGui::SetNextWindowPos(pos, ImGuiCond_Always); }else if (change_window_position) { ImVec2 pos = ImGui::GetMousePos(); @@ -212,7 +212,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi // maximal bottom right value auto parent_size = m_parent.get_canvas_size(); ImVec2 br( - parent_size.get_width() - (2 * m_gui_cfg->window_offset_x + m_gui_cfg->window_padding), + parent_size.get_width() - (2 * m_gui_cfg->window_offset_x + m_gui_cfg->window_padding), parent_size.get_height() - (2 * m_gui_cfg->window_offset_y + m_gui_cfg->window_padding)); if (pos.x > br.x) pos.x = br.x; if (pos.y > br.y) pos.y = br.y; @@ -466,7 +466,7 @@ void GLGizmoSimplify::process() m_worker.join(); } - // Copy configuration that will be used. + // Copy configuration that will be used. m_state.config = m_configuration; m_state.mv = m_volume; m_state.status = State::running; @@ -542,11 +542,12 @@ void GLGizmoSimplify::apply_simplify() { mv->set_mesh(std::move(*m_state.result)); m_state.result.reset(); mv->calculate_convex_hull(); + mv->invalidate_convex_hull_2d(); mv->set_new_unique_id(); mv->get_object()->invalidate_bounding_box(); mv->get_object()->ensure_on_bed(); - // fix hollowing, sla support points, modifiers, ... + // fix hollowing, sla support points, modifiers, ... plater->changed_mesh(object_idx); // Fix warning icon in object list wxGetApp().obj_list()->update_item_error_icon(object_idx, -1); @@ -559,7 +560,7 @@ bool GLGizmoSimplify::on_is_activable() const m_parent.get_selection().is_single_volume(); } -void GLGizmoSimplify::on_set_state() +void GLGizmoSimplify::on_set_state() { // Closing gizmo. e.g. selecting another one if (GLGizmoBase::m_state == GLGizmoBase::Off) { @@ -574,12 +575,12 @@ void GLGizmoSimplify::on_set_state() } } -void GLGizmoSimplify::create_gui_cfg() { +void GLGizmoSimplify::create_gui_cfg() { if (m_gui_cfg.has_value()) return; int space_size = m_imgui->calc_text_size(":MM").x; GuiCfg cfg; cfg.top_left_width = std::max(m_imgui->calc_text_size(tr_mesh_name).x, - m_imgui->calc_text_size(tr_triangles).x) + m_imgui->calc_text_size(tr_triangles).x) + space_size; const float radio_size = ImGui::GetFrameHeight(); @@ -591,7 +592,7 @@ void GLGizmoSimplify::create_gui_cfg() { cfg.input_width = cfg.bottom_left_width * 1.5; cfg.window_offset_x = (cfg.bottom_left_width + cfg.input_width)/2; cfg.window_offset_y = ImGui::GetTextLineHeightWithSpacing() * 5; - + m_gui_cfg = cfg; } @@ -605,7 +606,7 @@ void GLGizmoSimplify::request_rerender(bool force) { } void GLGizmoSimplify::set_center_position() { - m_move_to_center = true; + m_move_to_center = true; } @@ -619,7 +620,7 @@ void GLGizmoSimplify::init_model(const indexed_triangle_set& its) m_parent.toggle_model_objects_visibility(true); // selected volume may have changed m_parent.toggle_model_objects_visibility(false, m_c->selection_info()->model_object(), m_c->selection_info()->get_active_instance(), m_volume); - + if (const Selection&sel = m_parent.get_selection(); sel.get_volume_idxs().size() == 1) m_glmodel.set_color(-1, sel.get_volume(*sel.get_volume_idxs().begin())->color); m_triangle_count = its.indices.size(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 1f253cd3ff..59ce16362d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -5,6 +5,7 @@ #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" +#include "slic3r/GUI/Plater.hpp" #include "libslic3r/Geometry/ConvexHull.hpp" #include "libslic3r/Model.hpp" @@ -19,6 +20,7 @@ #define IMGUI_DEFINE_MATH_OPERATORS #endif #include +#include "libslic3r/SVG.hpp" namespace Slic3r { namespace GUI { @@ -26,8 +28,101 @@ namespace GUI { static const wxColour FONT_TEXTURE_BG = wxColour(0, 0, 0, 0); static const wxColour FONT_TEXTURE_FG = *wxWHITE; static const int FONT_SIZE = 12; +static const float SELECTABLE_INNER_OFFSET = 8.0f; +class Line_3D +{ +public: + Line_3D(Vec3d i_a, Vec3d i_b) : a(i_a), b(i_b) {} + double length() { return (b - a).cast().norm(); } + + Vec3d vector() + { + Vec3d new_vec = b - a; + new_vec.normalize(); + return new_vec; + } + + void reverse() { std::swap(this->a, this->b); } + + Vec3d a; + Vec3d b; +}; + +class Polygon_3D +{ +public: + Polygon_3D(const std::vector &points) : m_points(points) {} + + std::vector get_lines() + { + std::vector lines; + lines.reserve(m_points.size()); + if (m_points.size() > 2) { + for (int i = 0; i < m_points.size() - 1; ++i) { lines.push_back(Line_3D(m_points[i], m_points[i + 1])); } + lines.push_back(Line_3D(m_points.back(), m_points.front())); + } + return lines; + } + std::vector m_points; +}; + +// for debug +void export_regions_to_svg(const Point &point, const Polygons &polylines) +{ + std::string path = "D:/svg_profiles/text_poly.svg"; + //BoundingBox bbox = get_extents(polylines); + SVG svg(path.c_str()); + svg.draw(polylines, "green"); + svg.draw(point, "red", 5e6); +} + +int preNUm(unsigned char byte) +{ + unsigned char mask = 0x80; + int num = 0; + for (int i = 0; i < 8; i++) { + if ((byte & mask) == mask) { + mask = mask >> 1; + num++; + } else { + break; + } + } + return num; +} + +// https://www.jianshu.com/p/a83d398e3606 +bool get_utf8_sub_strings(char *data, int len, std::vector &out_strs) +{ + out_strs.clear(); + std::string str = std::string(data); + + int num = 0; + int i = 0; + while (i < len) { + if ((data[i] & 0x80) == 0x00) { + out_strs.emplace_back(str.substr(i, 1)); + i++; + continue; + } else if ((num = preNUm(data[i])) > 2) { + int start = i; + i++; + for (int j = 0; j < num - 1; j++) { + if ((data[i] & 0xc0) != 0x80) { return false; } + i++; + } + out_strs.emplace_back(str.substr(start, i - start)); + } else { + return false; + } + } + return true; +} + +/////////////////////// +/// GLGizmoText start GLGizmoText::GLGizmoText(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : GLGizmoBase(parent, icon_filename, sprite_id) { @@ -47,11 +142,19 @@ bool GLGizmoText::on_init() update_font_texture(); m_scale = m_imgui->get_font_size(); m_shortcut_key = WXK_CONTROL_T; + + reset_text_info(); + + m_desc["rotate_text_caption"] = _L("Shift + Mouse move up or dowm"); + m_desc["rotate_text"] = _L("Rotate text"); + + m_grabbers.push_back(Grabber()); return true; } void GLGizmoText::update_font_texture() { + m_font_names.clear(); for (int i = 0; i < m_textures.size(); i++) { if (m_textures[i].texture != nullptr) delete m_textures[i].texture; @@ -77,19 +180,176 @@ void GLGizmoText::update_font_texture() info.font_name = m_avail_font_names[i]; m_textures.push_back(info); m_combo_width = std::max(m_combo_width, static_cast(texture->m_original_width)); + m_font_names.push_back(info.font_name); //} } } m_combo_height = m_imgui->scaled(32.f / 15.f); } +bool GLGizmoText::is_mesh_point_clipped(const Vec3d &point, const Transform3d &trafo) const +{ + if (m_c->object_clipper()->get_position() == 0.) + return false; + + auto sel_info = m_c->selection_info(); + Vec3d transformed_point = trafo * point; + transformed_point(2) += sel_info->get_sla_shift(); + return m_c->object_clipper()->get_clipping_plane()->is_point_clipped(transformed_point); +} + +BoundingBoxf3 GLGizmoText::bounding_box() const +{ + BoundingBoxf3 ret; + const Selection & selection = m_parent.get_selection(); + const Selection::IndicesList &idxs = selection.get_volume_idxs(); + for (unsigned int i : idxs) { + const GLVolume *volume = selection.get_volume(i); + if (!volume->is_modifier) ret.merge(volume->transformed_convex_hull_bounding_box()); + } + return ret; +} + +bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down) +{ + std::string text = std::string(m_text); + if (text.empty()) + return true; + + const ModelObject * mo = m_c->selection_info()->model_object(); + if (m_is_modify) { + const Selection &selection = m_parent.get_selection(); + mo = selection.get_model()->objects[m_object_idx]; + } + if (mo == nullptr) + return true; + + const Selection & selection = m_parent.get_selection(); + const ModelInstance *mi = mo->instances[selection.get_instance_idx()]; + const Camera & camera = wxGetApp().plater()->get_camera(); + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + } + } + if (action == SLAGizmoEventType::Moving) { + if (shift_down && !alt_down && !control_down) { + float angle = m_rotate_angle + 0.5 * (m_mouse_position - mouse_position).y(); + if (angle == 0) + return true; + + while (angle < 0) + angle += 360; + + while (angle >= 360) + angle -= 360; + + m_rotate_angle = angle; + m_shift_down = true; + m_need_update_text = true; + } else { + m_shift_down = false; + m_origin_mouse_position = mouse_position; + } + m_mouse_position = mouse_position; + } + else if (action == SLAGizmoEventType::LeftDown) { + if (!selection.is_empty() && get_hover_id() != -1) { + start_dragging(); + return true; + } + + if (m_is_modify) + return true; + + Vec3f normal = Vec3f::Zero(); + Vec3f hit = Vec3f::Zero(); + size_t facet = 0; + Vec3f closest_hit = Vec3f::Zero(); + Vec3f closest_normal = Vec3f::Zero(); + double closest_hit_squared_distance = std::numeric_limits::max(); + int closest_hit_mesh_id = -1; + + // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh + for (int mesh_id = 0; mesh_id < int(trafo_matrices.size()); ++mesh_id) { + if (mesh_id == m_preview_text_volume_id) + continue; + + MeshRaycaster mesh_raycaster = MeshRaycaster(mo->volumes[mesh_id]->mesh()); + + if (mesh_raycaster.unproject_on_mesh(mouse_position, trafo_matrices[mesh_id], camera, hit, normal, + m_c->object_clipper()->get_clipping_plane(), &facet)) { + // In case this hit is clipped, skip it. + if (is_mesh_point_clipped(hit.cast(), trafo_matrices[mesh_id])) + continue; + + // Is this hit the closest to the camera so far? + double hit_squared_distance = (camera.get_position() - trafo_matrices[mesh_id] * hit.cast()).squaredNorm(); + if (hit_squared_distance < closest_hit_squared_distance) { + closest_hit_squared_distance = hit_squared_distance; + closest_hit_mesh_id = mesh_id; + closest_hit = hit; + closest_normal = normal; + } + } + } + + if (closest_hit == Vec3f::Zero() && closest_normal == Vec3f::Zero()) + return true; + + m_rr = {mouse_position, closest_hit_mesh_id, closest_hit, closest_normal}; + + Plater *plater = wxGetApp().plater(); + if (!plater) + return true; + + ModelObject *model_object = selection.get_model()->objects[m_object_idx]; + if (m_preview_text_volume_id > 0) { + model_object->delete_volume(m_preview_text_volume_id); + plater->update(); + m_preview_text_volume_id = -1; + } + + m_is_modify = true; + generate_text_volume(false); + plater->update(); + } + + return true; +} + void GLGizmoText::on_set_state() { + if (m_state == EState::On) { + if (m_parent.get_selection().is_single_volume() || m_parent.get_selection().is_single_modifier()) { + ModelVolume *model_volume = get_selected_single_volume(m_object_idx, m_volume_idx); + if (model_volume) { + TextInfo text_info = model_volume->get_text_info(); + if (!text_info.m_text.empty()) { + load_from_text_info(text_info); + m_is_modify = true; + } + } + } + } + else if (m_state == EState::Off) { + reset_text_info(); + delete_temp_preview_text_volume(); + m_parent.use_slope(false); + m_parent.toggle_model_objects_visibility(true); + } } CommonGizmosDataID GLGizmoText::on_get_requirements() const { - return CommonGizmosDataID::SelectionInfo; + return CommonGizmosDataID( + int(CommonGizmosDataID::SelectionInfo) + | int(CommonGizmosDataID::InstancesHider) + | int(CommonGizmosDataID::Raycaster) + | int(CommonGizmosDataID::ObjectClipper)); } std::string GLGizmoText::on_get_name() const @@ -101,17 +361,200 @@ bool GLGizmoText::on_is_activable() const { // This is assumed in GLCanvas3D::do_rotate, do not change this // without updating that function too. - return m_parent.get_selection().is_single_full_instance(); + if (m_parent.get_selection().is_single_full_instance()) + return true; + + int obejct_idx, volume_idx; + ModelVolume *model_volume = get_selected_single_volume(obejct_idx, volume_idx); + if (model_volume) + return !model_volume->get_text_info().m_text.empty(); + + return false; } void GLGizmoText::on_render() { - // TODO: + glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); + glsafe(::glEnable(GL_DEPTH_TEST)); + + std::string text = std::string(m_text); + if (text.empty()) { + delete_temp_preview_text_volume(); + return; + } + + ModelObject *mo = nullptr; + mo = m_c->selection_info()->model_object(); + + if (mo == nullptr) { + const Selection &selection = m_parent.get_selection(); + mo = selection.get_model()->objects[m_object_idx]; + } + + if (mo == nullptr) { + BOOST_LOG_TRIVIAL(info) << boost::format("Text: selected object is null"); + return; + } + + // First check that the mouse pointer is on an object. + const Selection & selection = m_parent.get_selection(); + const ModelInstance *mi = mo->instances[0]; + Plater *plater = wxGetApp().plater(); + if (!plater) + return; + + if (!m_is_modify || m_shift_down) { + const Camera &camera = wxGetApp().plater()->get_camera(); + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + } + // Raycast and return if there's no hit. + Vec2d mouse_pos; + if (m_shift_down) { + if (m_is_modify) + mouse_pos = m_rr.mouse_position; + else + mouse_pos = m_origin_mouse_position; + } + else { + mouse_pos = m_parent.get_local_mouse_position(); + } + + bool position_changed = update_raycast_cache(mouse_pos, camera, trafo_matrices); + + if (m_rr.mesh_id == -1) { + delete_temp_preview_text_volume(); + return; + } + + if (!position_changed && !m_need_update_text && !m_shift_down) + return; + } + + if (m_is_modify && m_grabbers.size() == 1) { + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + } + } + + m_mouse_position_world = trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2)); + + float mean_size = (float) (GLGizmoBase::Grabber::FixedGrabberSize); + + m_grabbers[0].center = m_mouse_position_world; + m_grabbers[0].enabled = true; + std::array color = picking_color_component(0); + m_grabbers[0].color = color; + m_grabbers[0].render_for_picking(mean_size); + } + + delete_temp_preview_text_volume(); + + if (m_is_modify && !m_need_update_text) + return; + + generate_text_volume(); + plater->update(); } void GLGizmoText::on_render_for_picking() { - // TODO: + glsafe(::glDisable(GL_DEPTH_TEST)); + + int obejct_idx, volume_idx; + ModelVolume *model_volume = get_selected_single_volume(obejct_idx, volume_idx); + if (model_volume && !model_volume->get_text_info().m_text.empty()) { + if (m_grabbers.size() == 1) { + ModelObject *mo = m_c->selection_info()->model_object(); + if (m_is_modify) { + const Selection &selection = m_parent.get_selection(); + mo = selection.get_model()->objects[m_object_idx]; + } + if (mo == nullptr) return; + + const Selection & selection = m_parent.get_selection(); + const ModelInstance *mi = mo->instances[selection.get_instance_idx()]; + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + } + } + + m_mouse_position_world = trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2)); + + float mean_size = (float) (GLGizmoBase::Grabber::FixedGrabberSize); + m_grabbers[0].center = m_mouse_position_world; + m_grabbers[0].enabled = true; + std::array color = picking_color_component(0); + m_grabbers[0].color = color; + m_grabbers[0].render_for_picking(mean_size); + } + } +} + +void GLGizmoText::on_update(const UpdateData &data) +{ + Vec2d mouse_pos = Vec2d(data.mouse_pos.x(), data.mouse_pos.y()); + const ModelObject *mo = m_c->selection_info()->model_object(); + if (m_is_modify) { + const Selection &selection = m_parent.get_selection(); + mo = selection.get_model()->objects[m_object_idx]; + } + if (mo == nullptr) return; + + const Selection & selection = m_parent.get_selection(); + const ModelInstance *mi = mo->instances[selection.get_instance_idx()]; + const Camera & camera = wxGetApp().plater()->get_camera(); + + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); } + } + + Vec3f normal = Vec3f::Zero(); + Vec3f hit = Vec3f::Zero(); + size_t facet = 0; + Vec3f closest_hit = Vec3f::Zero(); + Vec3f closest_normal = Vec3f::Zero(); + double closest_hit_squared_distance = std::numeric_limits::max(); + int closest_hit_mesh_id = -1; + + // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh + for (int mesh_id = 0; mesh_id < int(trafo_matrices.size()); ++mesh_id) { + if (mesh_id == m_volume_idx) + continue; + + MeshRaycaster mesh_raycaster = MeshRaycaster(mo->volumes[mesh_id]->mesh()); + + if (mesh_raycaster.unproject_on_mesh(mouse_pos, trafo_matrices[mesh_id], camera, hit, normal, m_c->object_clipper()->get_clipping_plane(), + &facet)) { + // In case this hit is clipped, skip it. + if (is_mesh_point_clipped(hit.cast(), trafo_matrices[mesh_id])) continue; + + // Is this hit the closest to the camera so far? + double hit_squared_distance = (camera.get_position() - trafo_matrices[mesh_id] * hit.cast()).squaredNorm(); + if (hit_squared_distance < closest_hit_squared_distance) { + closest_hit_squared_distance = hit_squared_distance; + closest_hit_mesh_id = mesh_id; + closest_hit = hit; + closest_normal = normal; + } + } + } + + if (closest_hit == Vec3f::Zero() && closest_normal == Vec3f::Zero()) return; + + if (closest_hit_mesh_id != -1) { + m_rr = {mouse_pos, closest_hit_mesh_id, closest_hit, closest_normal}; + m_need_update_text = true; + } } void GLGizmoText::push_button_style(bool pressed) { @@ -160,8 +603,6 @@ void GLGizmoText::push_combo_style(const float scale) { ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.59f, 0.53f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.59f, 0.53f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG_DARK); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImGuiWrapper::COL_WINDOW_BG_DARK); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImGuiWrapper::COL_WINDOW_BG_DARK); ImGui::PushStyleColor(ImGuiCol_Button, { 1.00f, 1.00f, 1.00f, 0.0f }); } else { @@ -173,8 +614,6 @@ void GLGizmoText::push_combo_style(const float scale) { ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.59f, 0.53f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.59f, 0.53f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImGuiWrapper::COL_WINDOW_BG); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImGuiWrapper::COL_WINDOW_BG); ImGui::PushStyleColor(ImGuiCol_Button, { 1.00f, 1.00f, 1.00f, 0.0f }); } } @@ -182,7 +621,7 @@ void GLGizmoText::push_combo_style(const float scale) { void GLGizmoText::pop_combo_style() { ImGui::PopStyleVar(2); - ImGui::PopStyleColor(9); + ImGui::PopStyleColor(7); } // BBS @@ -197,6 +636,28 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) return; } + const Selection &selection = m_parent.get_selection(); + if (selection.is_single_full_instance() || selection.is_single_full_object()) { + const GLVolume * gl_volume = selection.get_volume(*selection.get_volume_idxs().begin()); + int object_idx = gl_volume->object_idx(); + if (object_idx != m_object_idx || (object_idx == m_object_idx && m_volume_idx != -1)) { + m_object_idx = object_idx; + m_volume_idx = -1; + reset_text_info(); + } + } else if (selection.is_single_volume() || selection.is_single_modifier()) { + int object_idx, volume_idx; + ModelVolume *model_volume = get_selected_single_volume(object_idx, volume_idx); + if ((object_idx != m_object_idx || (object_idx == m_object_idx && volume_idx != m_volume_idx)) + && model_volume) { + TextInfo text_info = model_volume->get_text_info(); + load_from_text_info(text_info); + m_is_modify = true; + m_volume_idx = volume_idx; + m_object_idx = object_idx; + } + } + const float win_h = ImGui::GetWindowHeight(); y = std::min(y, bottom_limit - win_h); GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); @@ -207,6 +668,7 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) const float currt_scale = m_parent.get_scale(); ImGuiWrapper::push_toolbar_style(currt_scale); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0,5.0) * currt_scale); + ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, 4.0f * currt_scale); GizmoImguiBegin("Text", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); float space_size = m_imgui->get_style_scaling() * 8; @@ -214,11 +676,16 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) float size_cap = m_imgui->calc_text_size(_L("Size")).x; float thickness_cap = m_imgui->calc_text_size(_L("Thickness")).x; float input_cap = m_imgui->calc_text_size(_L("Input text")).x; - float caption_size = std::max(std::max(font_cap, size_cap), std::max(thickness_cap, input_cap)) + space_size + ImGui::GetStyle().WindowPadding.x; + float depth_cap = m_imgui->calc_text_size(_L("Embeded")).x; + float caption_size = std::max(std::max(font_cap, size_cap), std::max(depth_cap, input_cap)) + space_size + ImGui::GetStyle().WindowPadding.x; - float input_text_size = m_imgui->scaled(12.0f); + float input_text_size = m_imgui->scaled(10.0f); float button_size = ImGui::GetFrameHeight(); - float input_size = input_text_size - button_size * 2 - ImGui::GetStyle().ItemSpacing.x * 4; + + ImVec2 selectable_size(std::max((input_text_size + ImGui::GetFrameHeight() * 2), m_combo_width + SELECTABLE_INNER_OFFSET * currt_scale), m_combo_height); + float list_width = selectable_size.x + ImGui::GetStyle().ScrollbarSize + 2 * currt_scale; + + float input_size = list_width - button_size * 2 - ImGui::GetStyle().ItemSpacing.x * 4; ImTextureID normal_B = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_B); ImTextureID normal_T = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_T); @@ -239,36 +706,49 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) m_imgui->text(_L("Font")); ImGui::SameLine(caption_size); - ImGui::PushItemWidth(input_text_size + ImGui::GetFrameHeight() * 2); + ImGui::PushItemWidth(list_width); push_combo_style(currt_scale); - int font_index = m_curr_font_idx; - if (ImGui::BBLBeginCombo("##Font", m_textures[m_curr_font_idx].font_name.c_str(), 0)) { - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(4.0f, 0.0f) * currt_scale); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(8, 4)); - for (int i = 0; i < m_textures.size(); i++) { - const bool is_selected = (m_curr_font_idx == i); - ImTextureID icon_id = (ImTextureID)(intptr_t)(m_textures[i].texture->get_id()); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f * currt_scale); + + std::vector filtered_items_idx; + bool is_filtered = false; + if (m_imgui->bbl_combo_with_filter("##Combo_Font", m_font_names[m_curr_font_idx], m_font_names, &filtered_items_idx, &is_filtered, selectable_size.y)) { + int show_items_count = is_filtered ? filtered_items_idx.size() : m_textures.size(); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemInnerSpacing, ImVec2(SELECTABLE_INNER_OFFSET, 0)* currt_scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0); + for (int i = 0; i < show_items_count; i++) + { + int idx = is_filtered ? filtered_items_idx[i] : i; + const bool is_selected = (idx == m_curr_font_idx); + ImTextureID icon_id = (ImTextureID)(intptr_t)(m_textures[idx].texture->get_id()); ImVec4 tint_color = ImGui::GetStyleColorVec4(ImGuiCol_Text); - ImVec2 selectable_size(std::max((input_text_size + ImGui::GetFrameHeight() * 2), m_combo_width), m_combo_height); - if (ImGui::BBLImageSelectable(icon_id, selectable_size, { (float)m_textures[i].w, (float)m_textures[i].h }, m_textures[i].hl, tint_color, { 0, 0 }, {1, 1}, is_selected)) { - m_curr_font_idx = i; + if (ImGui::BBLImageSelectable(icon_id, selectable_size, { (float)m_textures[idx].w, (float)m_textures[idx].h }, m_textures[idx].hl, tint_color, { 0, 0 }, { 1, 1 }, is_selected)) + { + m_curr_font_idx = idx; m_font_name = m_textures[m_curr_font_idx].font_name; + ImGui::CloseCurrentPopup(); + m_need_update_text = true; } if (is_selected) { ImGui::SetItemDefaultFocus(); } } ImGui::PopStyleVar(3); - ImGui::EndCombo(); + ImGui::EndListBox(); + ImGui::EndPopup(); } + ImGui::PopStyleVar(2); pop_combo_style(); ImGui::AlignTextToFramePadding(); m_imgui->text(_L("Size")); ImGui::SameLine(caption_size); ImGui::PushItemWidth(input_size); - ImGui::InputFloat("###font_size", &m_font_size, 0.0f, 0.0f, "%.2f"); + if(ImGui::InputFloat("###font_size", &m_font_size, 0.0f, 0.0f, "%.2f")) + m_need_update_text = true; if (m_font_size < 3.0f)m_font_size = 3.0f; ImGui::SameLine(); @@ -276,50 +756,99 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {1.0f * currt_scale, 1.0f * currt_scale }); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0f * currt_scale); push_button_style(m_bold); - if (ImGui::ImageButton(m_is_dark_mode ? normal_B_dark : normal_B, { button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y })) + if (ImGui::ImageButton(m_is_dark_mode ? normal_B_dark : normal_B, {button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y})) { m_bold = !m_bold; + m_need_update_text = true; + } pop_button_style(); ImGui::SameLine(); push_button_style(m_italic); - if (ImGui::ImageButton(m_is_dark_mode ? normal_T_dark : normal_T, { button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y })) + if (ImGui::ImageButton(m_is_dark_mode ? normal_T_dark : normal_T, {button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y})) { m_italic = !m_italic; + m_need_update_text = true; + } pop_button_style(); ImGui::PopStyleVar(3); ImGui::AlignTextToFramePadding(); m_imgui->text(_L("Thickness")); ImGui::SameLine(caption_size); - ImGui::PushItemWidth(input_text_size); - ImGui::InputFloat("###text_thickness", &m_thickness,0.0f, 0.0f, "%.2f"); - if (m_thickness < 0.1f)m_thickness = 0.1f; + ImGui::PushItemWidth(list_width); + if(ImGui::InputFloat("###text_thickness", &m_thickness,0.0f, 0.0f, "%.2f")) + m_need_update_text = true; + if (m_thickness < 0.1f) + m_thickness = 0.1f; + + const float slider_icon_width = m_imgui->get_slider_icon_size().x; + const float slider_width = list_width - 1.5 * slider_icon_width - space_size; + const float drag_left_width = caption_size + slider_width + space_size; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Text Gap")); + ImGui::SameLine(caption_size); + ImGui::PushItemWidth(slider_width); + if (m_imgui->bbl_slider_float_style("##text_gap", &m_text_gap, -100, 100, "%.2f", 1.0f, true)) + m_need_update_text = true; + ImGui::SameLine(drag_left_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + if (ImGui::BBLDragFloat("##text_gap_input", &m_text_gap, 0.05f, 0.0f, 0.0f, "%.2f")) + m_need_update_text = true; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Angle")); + ImGui::SameLine(caption_size); + ImGui::PushItemWidth(slider_width); + if (m_imgui->bbl_slider_float_style("##angle", &m_rotate_angle, 0, 360, "%.2f", 1.0f, true)) + m_need_update_text = true; + ImGui::SameLine(drag_left_width); + ImGui::PushItemWidth(1.5 * slider_icon_width); + if (ImGui::BBLDragFloat("##angle_input", &m_rotate_angle, 0.05f, 0.0f, 0.0f, "%.2f")) + m_need_update_text = true; + + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Embeded\ndepth")); + ImGui::SameLine(caption_size); + ImGui::PushItemWidth(list_width); + if (ImGui::InputFloat("###text_embeded_depth", &m_embeded_depth, 0.0f, 0.0f, "%.2f")) + m_need_update_text = true; + if (m_embeded_depth < 0.f) + m_embeded_depth = 0.f; ImGui::AlignTextToFramePadding(); m_imgui->text(_L("Input text")); ImGui::SameLine(caption_size); - ImGui::PushItemWidth(input_text_size); + ImGui::PushItemWidth(list_width); + + if(ImGui::InputText("", m_text, sizeof(m_text))) + m_need_update_text = true; - ImGui::InputText("", m_text, sizeof(m_text)); - ImGui::Separator(); - m_imgui->disabled_begin(m_text[0] == '\0' || m_text[0] == ' '); - float offset = caption_size + input_text_size - m_imgui->calc_text_size(_L("Add")).x - space_size; - ImGui::Dummy({0.0, 0.0}); - ImGui::SameLine(offset); - bool add_clicked = m_imgui->button(_L("Add")); - if (add_clicked) { - m_imgui->disabled_end(); - GizmoImguiEnd(); - ImGui::PopStyleVar(); - ImGuiWrapper::pop_toolbar_style(); - TriangleMesh mesh; - load_text_shape(m_text, m_font_name.c_str(), m_font_size, m_thickness, m_bold, m_italic, mesh); - ObjectList* obj_list = wxGetApp().obj_list(); - obj_list->load_mesh_part(mesh, "text_shape"); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); + float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; + show_tooltip_information(x, get_cur_y); - return; - } - m_imgui->disabled_end(); + float f_scale = m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + + ImGui::SameLine(caption_size); + ImGui::AlignTextToFramePadding(); + if (m_imgui->bbl_checkbox(_L("Surface"), m_is_surface_text)) + m_need_update_text = true; + + ImGui::SameLine(); + ImGui::AlignTextToFramePadding(); + if (m_imgui->bbl_checkbox(_L("Horizontal text"), m_keep_horizontal)) + m_need_update_text = true; + + //ImGui::SameLine(); + //ImGui::AlignTextToFramePadding(); + //m_imgui->text(_L("Status:")); + //float status_cap = m_imgui->calc_text_size(_L("Status:")).x + space_size + ImGui::GetStyle().WindowPadding.x; + //ImGui::SameLine(); + //m_imgui->text(m_is_modify ? _L("Modify") : _L("Add")); + + ImGui::PopStyleVar(2); #if 0 ImGuiIO& io = ImGui::GetIO(); @@ -331,9 +860,684 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) #endif GizmoImguiEnd(); - ImGui::PopStyleVar(); + ImGui::PopStyleVar(2); ImGuiWrapper::pop_toolbar_style(); } +void GLGizmoText::show_tooltip_information(float x, float y) +{ + std::array info_array = std::array{"rotate_text"}; + float caption_max = 0.f; + for (const auto &t : info_array) { caption_max = std::max(caption_max, m_imgui->calc_text_size(m_desc[t + "_caption"]).x); } + + ImTextureID normal_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP); + ImTextureID hover_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP_HOVER); + + caption_max += m_imgui->calc_text_size(": ").x + 35.f; + + float font_size = ImGui::GetFontSize(); + ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, ImGui::GetStyle().FramePadding.y}); + ImGui::ImageButton3(normal_id, hover_id, button_size); + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip2(ImVec2(x, y)); + auto draw_text_with_caption = [this, &caption_max](const wxString &caption, const wxString &text) { + m_imgui->text_colored(ImGuiWrapper::COL_ACTIVE, caption); + ImGui::SameLine(caption_max); + m_imgui->text_colored(ImGuiWrapper::COL_WINDOW_BG, text); + }; + + for (const auto &t : info_array) draw_text_with_caption(m_desc.at(t + "_caption") + ": ", m_desc.at(t)); + ImGui::EndTooltip(); + } + ImGui::PopStyleVar(2); +} + +ModelVolume *GLGizmoText::get_selected_single_volume(int &out_object_idx, int &out_volume_idx) const +{ + if (m_parent.get_selection().is_single_volume() || m_parent.get_selection().is_single_modifier()) { + const Selection &selection = m_parent.get_selection(); + const GLVolume * gl_volume = selection.get_volume(*selection.get_volume_idxs().begin()); + out_object_idx = gl_volume->object_idx(); + ModelObject *model_object = selection.get_model()->objects[out_object_idx]; + out_volume_idx = gl_volume->volume_idx(); + if (out_volume_idx < model_object->volumes.size()) + return model_object->volumes[out_volume_idx]; + } + return nullptr; +} + +void GLGizmoText::reset_text_info() +{ + m_font_name = ""; + m_font_size = 16.f; + m_curr_font_idx = 0; + m_bold = true; + m_italic = false; + m_thickness = 2.f; + strcpy(m_text, m_font_name.c_str()); + m_embeded_depth = 0.f; + m_rotate_angle = 0; + m_text_gap = 0.f; + m_is_surface_text = true; + m_keep_horizontal = false; + + m_is_modify = false; +} + +bool GLGizmoText::update_text_positions(const std::vector& texts) +{ + std::vector text_lengths; + for (int i = 0; i < texts.size(); ++i) { + std::string alpha; + if (texts[i] == " ") { + alpha = "i"; + } else { + alpha = texts[i]; + } + TriangleMesh mesh; + load_text_shape(alpha.c_str(), m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, mesh); + auto center = mesh.bounding_box().center(); + double half_x_length = center.x(); + text_lengths.emplace_back(half_x_length); + } + + int text_num = texts.size(); + m_position_points.clear(); + m_normal_points.clear(); + ModelObject *mo = m_c->selection_info()->model_object(); + if (m_is_modify) { + const Selection &selection = m_parent.get_selection(); + mo = selection.get_model()->objects[m_object_idx]; + } + if (mo == nullptr) + return false; + + const Selection & selection = m_parent.get_selection(); + const ModelInstance *mi = mo->instances[selection.get_instance_idx()]; + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + std::vector rotate_trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { + trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); + rotate_trafo_matrices.emplace_back(mi->get_transformation().get_matrix(true, false, true, true) * mv->get_matrix(true, false, true, true)); + } + } + + if (m_rr.mesh_id == -1) { + BOOST_LOG_TRIVIAL(info) << boost::format("Text: mrr_mesh_id is -1"); + return false; + } + + m_mouse_position_world = trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2)); + m_mouse_normal_world = rotate_trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.normal(0), m_rr.normal(1), m_rr.normal(2)); + + TriangleMesh slice_meshs; + int mesh_index = 0; + for (int i = 0; i < mo->volumes.size(); ++i) { + ModelVolume *mv = mo->volumes[i]; + if (mv->is_model_part()) { + if (mesh_index == m_rr.mesh_id) { + TriangleMesh vol_mesh(mv->mesh()); + vol_mesh.transform(mv->get_matrix()); + slice_meshs = vol_mesh; + break; + } + mesh_index++; + } + } + + ModelVolume* volume = mo->volumes[mesh_index]; + + Vec3d temp_position = m_mouse_position_world; + Vec3d temp_normal = m_mouse_normal_world; + + Vec3d cut_plane = Vec3d::UnitY(); + if (temp_normal != Vec3d::UnitZ()) { + Vec3d v_plane = temp_normal.cross(Vec3d::UnitZ()); + cut_plane = v_plane.cross(temp_normal); + } + + Transform3d rotate_trans; + rotate_trans.setIdentity(); + rotate_trans.rotate(Eigen::AngleAxisd(Geometry::deg2rad(m_rotate_angle), temp_normal)); + cut_plane = rotate_trans * cut_plane; + + m_cut_plane_dir = cut_plane; + + if (m_keep_horizontal && m_mouse_normal_world != Vec3d::UnitZ()) + m_cut_plane_dir = Vec3d::UnitZ(); + + if (!m_is_surface_text) { + m_position_points.resize(text_num); + m_normal_points.resize(text_num); + + Vec3d pos_dir = m_cut_plane_dir.cross(m_mouse_normal_world); + pos_dir.normalize(); + if (text_num % 2 == 1) { + m_position_points[text_num / 2] = m_mouse_position_world; + for (int i = 0; i < text_num / 2; ++i) { + double left_gap = text_lengths[text_num / 2 - i - 1] + m_text_gap + text_lengths[text_num / 2 - i]; + if (left_gap < 0) + left_gap = 0; + + double right_gap = text_lengths[text_num / 2 + i + 1] + m_text_gap + text_lengths[text_num / 2 + i]; + if (right_gap < 0) + right_gap = 0; + + m_position_points[text_num / 2 - 1 - i] = m_position_points[text_num / 2 - i] - left_gap * pos_dir; + m_position_points[text_num / 2 + 1 + i] = m_position_points[text_num / 2 + i] + right_gap * pos_dir; + } + } else { + for (int i = 0; i < text_num / 2; ++i) { + double left_gap = i == 0 ? (text_lengths[text_num / 2 - i - 1] + m_text_gap / 2) : + (text_lengths[text_num / 2 - i - 1] + m_text_gap + text_lengths[text_num / 2 - i]); + if (left_gap < 0) + left_gap = 0; + + double right_gap = i == 0 ? (text_lengths[text_num / 2 + i] + m_text_gap / 2) : + (text_lengths[text_num / 2 + i] + m_text_gap + text_lengths[text_num / 2 + i - 1]); + if (right_gap < 0) + right_gap = 0; + + if (i == 0) { + m_position_points[text_num / 2 - 1 - i] = m_mouse_position_world - left_gap * pos_dir; + m_position_points[text_num / 2 + i] = m_mouse_position_world + right_gap * pos_dir; + continue; + } + + m_position_points[text_num / 2 - 1 - i] = m_position_points[text_num / 2 - i] - left_gap * pos_dir; + m_position_points[text_num / 2 + i] = m_position_points[text_num / 2 + i - 1] + right_gap * pos_dir; + } + } + + for (int i = 0; i < text_num; ++i) { + m_normal_points[i] = m_mouse_normal_world; + } + + return true; + } + + double phi; + Vec3d rotation_axis; + Matrix3d rotation_matrix; + Geometry::rotation_from_two_vectors(m_cut_plane_dir, Vec3d::UnitZ(), rotation_axis, phi, &rotation_matrix); + + Transform3d transfo1; + transfo1.setIdentity(); + transfo1.translate(-(mi->get_transformation().get_offset() + volume->get_transformation().get_offset())); + transfo1 = rotation_matrix * transfo1; + + Transform3d transfo2; + transfo2.setIdentity(); + transfo2.translate(mi->get_transformation().get_offset() + volume->get_transformation().get_offset()); + Transform3d transfo = transfo2 * transfo1; + + Vec3d click_point = transfo * temp_position; + + MeshSlicingParams slicing_params; + slicing_params.trafo = transfo * mi->get_transformation().get_matrix() /** volume->get_transformation().get_matrix()*/; + // generate polygons + const Polygons temp_polys = slice_mesh(slice_meshs.its, click_point.z(), slicing_params); + + m_mouse_position_world = click_point; + m_mouse_normal_world = transfo * temp_normal; + + m_mouse_position_world.x() *= 1e6; + m_mouse_position_world.y() *= 1e6; + + // for debug + //export_regions_to_svg(Point(m_mouse_position_world.x(), m_mouse_position_world.y()), temp_polys); + + Polygons polys = temp_polys; + + auto point_in_line_rectange = [](const Line &line, const Point &point, double& distance) { + distance = abs((point.x() - line.a.x()) * (line.b.y() - line.a.y()) - (line.b.x() - line.a.x()) * (point.y() - line.a.y())); + bool in_rectange = (std::min(line.a.x(), line.b.x()) - 1000) <= point.x() && point.x() <= (std::max(line.a.x(), line.b.x()) + 1000) && + (std::min(line.a.y(), line.b.y()) - 1000) <= point.y() && point.y() <= (std::max(line.a.y(), line.b.y()) + 1000); + return in_rectange; + }; + + int index = 0; + double min_distance = 1e12; + Polygon hit_ploy; + for (const Polygon poly : polys) { + if (poly.points.size() == 0) + continue; + + Lines lines = poly.lines(); + for (int i = 0; i < lines.size(); ++i) { + Line line = lines[i]; + double distance = min_distance; + if (point_in_line_rectange(line, Point(m_mouse_position_world.x(), m_mouse_position_world.y()), distance)) { + if (distance < min_distance) { + min_distance = distance; + index = i; + hit_ploy = poly; + } + } + } + } + + if (hit_ploy.points.size() == 0) { + BOOST_LOG_TRIVIAL(info) << boost::format("Text: the hit polygon is null"); + return false; + } + + auto make_trafo_for_slicing = [](const Transform3d &trafo) -> Transform3d { + auto t = trafo; + static constexpr const double s = 1. / SCALING_FACTOR; + t.prescale(Vec3d(s, s, 1.)); + return t.cast(); + }; + transfo = make_trafo_for_slicing(transfo); + Transform3d transfo_inv = transfo.inverse(); + std::vector new_points; + for (int i = 0; i < hit_ploy.points.size(); ++i) { + new_points.emplace_back(transfo_inv * Vec3d(hit_ploy.points[i].x(), hit_ploy.points[i].y(), click_point.z())); + } + m_mouse_position_world = transfo_inv * m_mouse_position_world; + + Polygon_3D new_polygon(new_points); + m_position_points.resize(text_num); + if (text_num % 2 == 1) { + m_position_points[text_num / 2] = Vec3d(m_mouse_position_world.x(), m_mouse_position_world.y(), m_mouse_position_world.z()); + + std::vector lines = new_polygon.get_lines(); + Line_3D line = lines[index]; + { + int index1 = index; + double left_length = (m_mouse_position_world - line.a).cast().norm(); + int left_num = text_num / 2; + while (left_num > 0) { + double gap_length = (text_lengths[left_num] + m_text_gap + text_lengths[left_num - 1]); + if (gap_length < 0) + gap_length = 0; + + while (gap_length > left_length) { + gap_length -= left_length; + if (index1 == 0) + index1 = lines.size() - 1; + else + --index1; + left_length = lines[index1].length(); + } + + Vec3d direction = lines[index1].vector(); + direction.normalize(); + double distance_to_a = (left_length - gap_length); + Line_3D new_line = lines[index1]; + + double norm_value = direction.cast().norm(); + double deta_x = distance_to_a * direction.x() / norm_value; + double deta_y = distance_to_a * direction.y() / norm_value; + double deta_z = distance_to_a * direction.z() / norm_value; + Vec3d new_pos = new_line.a + Vec3d(deta_x, deta_y, deta_z); + left_num--; + m_position_points[left_num] = new_pos; + left_length = distance_to_a; + } + } + + { + int index2 = index; + double right_length = (line.b - m_mouse_position_world).cast().norm(); + int right_num = text_num / 2; + while (right_num > 0) { + double gap_length = (text_lengths[text_num - right_num] + m_text_gap + text_lengths[text_num - right_num - 1]); + if (gap_length < 0) + gap_length = 0; + + while (gap_length > right_length) { + gap_length -= right_length; + if (index2 == lines.size() - 1) + index2 = 0; + else + ++index2; + right_length = lines[index2].length(); + } + + Line_3D line2 = lines[index2]; + line2.reverse(); + Vec3d direction = line2.vector(); + direction.normalize(); + double distance_to_b = (right_length - gap_length); + Line_3D new_line = lines[index2]; + + double norm_value = direction.cast().norm(); + double deta_x = distance_to_b * direction.x() / norm_value; + double deta_y = distance_to_b * direction.y() / norm_value; + double deta_z = distance_to_b * direction.z() / norm_value; + Vec3d new_pos = new_line.b + Vec3d(deta_x, deta_y, deta_z); + m_position_points[text_num - right_num] = new_pos; + right_length = distance_to_b; + right_num--; + } + } + } + else { + for (int i = 0; i < text_num / 2; ++i) { + std::vector lines = new_polygon.get_lines(); + Line_3D line = lines[index]; + { + int index1 = index; + double left_length = (m_mouse_position_world - line.a).cast().norm(); + int left_num = text_num / 2; + for (int i = 0; i < text_num / 2; ++i) { + double gap_length = 0; + if (i == 0) { + gap_length = m_text_gap / 2 + text_lengths[text_num / 2 - 1 - i]; + } + else { + gap_length = text_lengths[text_num / 2 - i] + m_text_gap + text_lengths[text_num / 2 - 1 - i]; + } + if (gap_length < 0) + gap_length = 0; + + while (gap_length > left_length) { + gap_length -= left_length; + if (index1 == 0) + index1 = lines.size() - 1; + else + --index1; + left_length = lines[index1].length(); + } + + Vec3d direction = lines[index1].vector(); + direction.normalize(); + double distance_to_a = (left_length - gap_length); + Line_3D new_line = lines[index1]; + + double norm_value = direction.cast().norm(); + double deta_x = distance_to_a * direction.x() / norm_value; + double deta_y = distance_to_a * direction.y() / norm_value; + double deta_z = distance_to_a * direction.z() / norm_value; + Vec3d new_pos = new_line.a + Vec3d(deta_x, deta_y,deta_z); + + m_position_points[text_num / 2 - 1 - i] = new_pos; + left_length = distance_to_a; + } + } + + { + int index2 = index; + double right_length = (line.b - m_mouse_position_world).cast().norm(); + int right_num = text_num / 2; + double gap_length = 0; + for (int i = 0; i < text_num / 2; ++i) { + double gap_length = 0; + if (i == 0) { + gap_length = m_text_gap / 2 + text_lengths[text_num / 2 + i]; + } else { + gap_length = text_lengths[text_num / 2 + i] + m_text_gap + text_lengths[text_num / 2 + i - 1]; + } + if (gap_length < 0) + gap_length = 0; + + while (gap_length > right_length) { + gap_length -= right_length; + if (index2 == lines.size() - 1) + index2 = 0; + else + ++index2; + right_length = lines[index2].length(); + } + + Line_3D line2 = lines[index2]; + line2.reverse(); + Vec3d direction = line2.vector(); + direction.normalize(); + double distance_to_b = (right_length - gap_length); + Line_3D new_line = lines[index2]; + + double norm_value = direction.cast().norm(); + double deta_x = distance_to_b * direction.x() / norm_value; + double deta_y = distance_to_b * direction.y() / norm_value; + double deta_z = distance_to_b * direction.z() / norm_value; + Vec3d new_pos = new_line.b + Vec3d(deta_x, deta_y, deta_z); + m_position_points[text_num / 2 + i] = new_pos; + right_length = distance_to_b; + } + } + } + } + + TriangleMesh mesh = slice_meshs; + std::vector mesh_values(m_position_points.size(), 1'000'000'000); + m_normal_points.resize(m_position_points.size()); + auto point_in_triangle_delete_area = [](const Vec3d &point, const Vec3d &point0, const Vec3d &point1, const Vec3d &point2) { + Vec3d p0_p = point - point0; + Vec3d p0_p1 = point1 - point0; + Vec3d p0_p2 = point2 - point0; + Vec3d p_p0 = point0 - point; + Vec3d p_p1 = point1 - point; + Vec3d p_p2 = point2 - point; + + double s = p0_p1.cross(p0_p2).norm(); + double s0 = p_p0.cross(p_p1).norm(); + double s1 = p_p1.cross(p_p2).norm(); + double s2 = p_p2.cross(p_p0).norm(); + + return abs(s0 + s1 + s2 - s); + }; + for (int i = 0; i < m_position_points.size(); ++i) { + for (auto indice : mesh.its.indices) { + stl_vertex stl_point0 = mesh.its.vertices[indice[0]]; + stl_vertex stl_point1 = mesh.its.vertices[indice[1]]; + stl_vertex stl_point2 = mesh.its.vertices[indice[2]]; + + Vec3d point0 = Vec3d(stl_point0[0], stl_point0[1], stl_point0[2]); + Vec3d point1 = Vec3d(stl_point1[0], stl_point1[1], stl_point1[2]); + Vec3d point2 = Vec3d(stl_point2[0], stl_point2[1], stl_point2[2]); + + point0 = mi->get_transformation().get_matrix() * point0; + point1 = mi->get_transformation().get_matrix() * point1; + point2 = mi->get_transformation().get_matrix() * point2; + + double abs_area = point_in_triangle_delete_area(m_position_points[i], point0, point1, point2); + if (mesh_values[i] > abs_area) { + mesh_values[i] = abs_area; + + Vec3d s1 = point1 - point0; + Vec3d s2 = point2 - point0; + m_normal_points[i] = s1.cross(s2); + m_normal_points[i].normalize(); + } + } + } + return true; +} + +TriangleMesh GLGizmoText::get_text_mesh(const char* text_str, const Vec3d &position, const Vec3d &normal, const Vec3d& text_up_dir) +{ + TriangleMesh mesh; + load_text_shape(text_str, m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, mesh); + + auto center = mesh.bounding_box().center(); + double mesh_offset = center.z(); + + mesh.translate(-center.x(), -m_font_size / 4, -center.z()); + + double phi; + Vec3d rotation_axis; + Matrix3d rotation_matrix; + Geometry::rotation_from_two_vectors(Vec3d::UnitZ(), normal, rotation_axis, phi, &rotation_matrix); + mesh.rotate(phi, rotation_axis); + + auto project_on_plane = [](const Vec3d& dir, const Vec3d& plane_normal) -> Vec3d { + return dir - (plane_normal.dot(dir) * plane_normal.dot(plane_normal)) * plane_normal; + }; + + Vec3d old_text_dir = Vec3d::UnitY(); + old_text_dir = rotation_matrix * old_text_dir; + Vec3d new_text_dir = project_on_plane(text_up_dir, normal); + new_text_dir.normalize(); + Geometry::rotation_from_two_vectors(old_text_dir, new_text_dir, rotation_axis, phi, &rotation_matrix); + mesh.rotate(phi, rotation_axis); + + const Selection & selection = m_parent.get_selection(); + ModelObject * model_object = selection.get_model()->objects[m_object_idx]; + Geometry::Transformation instance_transformation = model_object->instances[0]->get_transformation(); + Vec3d offset = position - instance_transformation.get_offset(); + offset = offset + mesh_offset * normal; + offset = offset - m_embeded_depth * normal; + mesh.translate(offset.x(), offset.y(), offset.z()); + + return mesh; +} + +bool GLGizmoText::update_raycast_cache(const Vec2d &mouse_position, const Camera &camera, const std::vector &trafo_matrices) +{ + if (m_rr.mouse_position == mouse_position) { + return false; + } + + if (m_is_modify) + return false; + + Vec3f normal = Vec3f::Zero(); + Vec3f hit = Vec3f::Zero(); + size_t facet = 0; + Vec3f closest_hit = Vec3f::Zero(); + Vec3f closest_nromal = Vec3f::Zero(); + double closest_hit_squared_distance = std::numeric_limits::max(); + int closest_hit_mesh_id = -1; + + // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh + for (int mesh_id = 0; mesh_id < int(trafo_matrices.size()); ++mesh_id) { + if (m_preview_text_volume_id != -1 && mesh_id == int(trafo_matrices.size()) - 1) + continue; + + if (m_c->raycaster()->raycasters()[mesh_id]->unproject_on_mesh(mouse_position, trafo_matrices[mesh_id], camera, hit, normal, m_c->object_clipper()->get_clipping_plane(), + &facet)) { + // In case this hit is clipped, skip it. + if (is_mesh_point_clipped(hit.cast(), trafo_matrices[mesh_id])) + continue; + + double hit_squared_distance = (camera.get_position() - trafo_matrices[mesh_id] * hit.cast()).squaredNorm(); + if (hit_squared_distance < closest_hit_squared_distance) { + closest_hit_squared_distance = hit_squared_distance; + closest_hit_mesh_id = mesh_id; + closest_hit = hit; + closest_nromal = normal; + } + } + } + + m_rr = {mouse_position, closest_hit_mesh_id, closest_hit, closest_nromal}; + return true; +} + +void GLGizmoText::generate_text_volume(bool is_temp) +{ + std::string text = std::string(m_text); + if (text.empty()) + return; + + std::vector alphas; + if (!get_utf8_sub_strings(m_text, strlen(m_text), alphas)) { + BOOST_LOG_TRIVIAL(info) << boost::format("Text: input text is not utf8"); + return; + } + + update_text_positions(alphas); + + if (m_position_points.size() == 0) + return; + + TriangleMesh mesh; + for (int i = 0; i < alphas.size(); ++i) { + TriangleMesh sub_mesh = get_text_mesh(alphas[i].c_str(), m_position_points[i], m_normal_points[i], m_cut_plane_dir); + mesh.merge(sub_mesh); + } + + Plater *plater = wxGetApp().plater(); + if (!plater) + return; + + TextInfo text_info = get_text_info(); + if (m_is_modify && m_need_update_text) { + plater->take_snapshot("Modify Text"); + const Selection &selection = m_parent.get_selection(); + ModelObject * model_object = selection.get_model()->objects[m_object_idx]; + ModelVolume * model_volume = model_object->volumes[m_volume_idx]; + ModelVolume * new_model_volume = model_object->add_volume(std::move(mesh)); + new_model_volume->set_text_info(text_info); + new_model_volume->name = model_volume->name; + new_model_volume->set_type(model_volume->type()); + if (model_volume->config.option("extruder")) + new_model_volume->config.set("extruder", model_volume->config.extruder()); + + std::swap(model_object->volumes[m_volume_idx], model_object->volumes.back()); + model_object->delete_volume(model_object->volumes.size() - 1); + plater->update(); + } else { + if (m_need_update_text) + plater->take_snapshot("Add Text"); + ObjectList *obj_list = wxGetApp().obj_list(); + int volume_id = obj_list->load_mesh_part(mesh, "text_shape", text_info, is_temp); + m_preview_text_volume_id = is_temp ? volume_id : -1; + } + m_need_update_text = false; +} + +void GLGizmoText::delete_temp_preview_text_volume() +{ + const Selection &selection = m_parent.get_selection(); + if (m_preview_text_volume_id > 0) { + ModelObject *model_object = selection.get_model()->objects[m_object_idx]; + if (m_preview_text_volume_id < model_object->volumes.size()) { + Plater *plater = wxGetApp().plater(); + if (!plater) + return; + + model_object->delete_volume(m_preview_text_volume_id); + + plater->update(); + } + m_preview_text_volume_id = -1; + } +} + +TextInfo GLGizmoText::get_text_info() +{ + TextInfo text_info; + text_info.m_font_name = m_font_name; + text_info.m_font_size = m_font_size; + text_info.m_curr_font_idx = m_curr_font_idx; + text_info.m_bold = m_bold; + text_info.m_italic = m_italic; + text_info.m_thickness = m_thickness; + text_info.m_text = m_text; + text_info.m_rr = m_rr; + text_info.m_embeded_depth = m_embeded_depth; + text_info.m_rotate_angle = m_rotate_angle; + text_info.m_text_gap = m_text_gap; + text_info.m_is_surface_text = m_is_surface_text; + text_info.m_keep_horizontal = m_keep_horizontal; + return text_info; +} + +void GLGizmoText::load_from_text_info(const TextInfo &text_info) +{ + m_font_name = text_info.m_font_name; + m_font_size = text_info.m_font_size; + m_curr_font_idx = text_info.m_curr_font_idx; + m_bold = text_info.m_bold; + m_italic = text_info.m_italic; + m_thickness = text_info.m_thickness; + strcpy(m_text, text_info.m_text.c_str()); + m_rr = text_info.m_rr; + m_embeded_depth = text_info.m_embeded_depth; + m_rotate_angle = text_info.m_rotate_angle; + m_text_gap = text_info.m_text_gap; + m_is_surface_text = text_info.m_is_surface_text; + m_keep_horizontal = text_info.m_keep_horizontal; +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.hpp b/src/slic3r/GUI/Gizmos/GLGizmoText.hpp index 668e6bf0fd..53b792364f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.hpp @@ -4,13 +4,17 @@ #include "GLGizmoBase.hpp" #include "slic3r/GUI/3DScene.hpp" #include "../GLTexture.hpp" +#include "../Camera.hpp" +#include "libslic3r/Model.hpp" namespace Slic3r { enum class ModelVolumeType : int; +class ModelVolume; namespace GUI { +enum class SLAGizmoEventType : unsigned char; class GLGizmoText : public GLGizmoBase { private: @@ -22,10 +26,21 @@ private: bool m_bold = true; bool m_italic = false; float m_thickness = 2.f; + float m_embeded_depth = 0.f; + float m_rotate_angle = 0; + float m_text_gap = 0.f; + bool m_is_surface_text = false; + bool m_keep_horizontal = false; + mutable RaycastResult m_rr; + float m_combo_height = 0.0f; float m_combo_width = 0.0f; float m_scale; + Vec2d m_mouse_position = Vec2d::Zero(); + Vec2d m_origin_mouse_position = Vec2d::Zero(); + bool m_shift_down = false; + class TextureInfo { public: GLTexture* texture { nullptr }; @@ -38,18 +53,46 @@ private: std::vector m_textures; + std::vector m_font_names; + + bool m_is_modify = false; + bool m_need_update_text = false; + + int m_object_idx = -1; + int m_volume_idx = -1; + + int m_preview_text_volume_id = -1; + + Vec3d m_mouse_position_world = Vec3d::Zero(); + Vec3d m_mouse_normal_world = Vec3d::Zero(); + + Vec3d m_cut_plane_dir = Vec3d::UnitZ(); + + std::vector m_position_points; + std::vector m_normal_points; + + // This map holds all translated description texts, so they can be easily referenced during layout calculations + // etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect. + std::map m_desc; + public: GLGizmoText(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); ~GLGizmoText(); void update_font_texture(); + bool gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down); + + bool is_mesh_point_clipped(const Vec3d &point, const Transform3d &trafo) const; + BoundingBoxf3 bounding_box() const; + protected: virtual bool on_init() override; virtual std::string on_get_name() const override; virtual bool on_is_activable() const override; virtual void on_render() override; virtual void on_render_for_picking() override; + virtual void on_update(const UpdateData &data) override; void push_combo_style(const float scale); void pop_combo_style(); void push_button_style(bool pressed); @@ -57,6 +100,21 @@ protected: virtual void on_set_state() override; virtual CommonGizmosDataID on_get_requirements() const override; virtual void on_render_input_window(float x, float y, float bottom_limit); + + void show_tooltip_information(float x, float y); + +private: + ModelVolume *get_selected_single_volume(int& out_object_idx, int& out_volume_idx) const; + void reset_text_info(); + bool update_text_positions(const std::vector& texts); + TriangleMesh get_text_mesh(const char* text_str, const Vec3d &position, const Vec3d &normal, const Vec3d &text_up_dir); + + bool update_raycast_cache(const Vec2d &mouse_position, const Camera &camera, const std::vector &trafo_matrices); + void generate_text_volume(bool is_temp = true); + void delete_temp_preview_text_volume(); + + TextInfo get_text_info(); + void load_from_text_info(const TextInfo &text_info); }; } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 74cff490cd..f1ee1753ed 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -405,11 +405,12 @@ void GLGizmosManager::update_data() enable_grabber(Rotate, 0, !is_wipe_tower); enable_grabber(Rotate, 1, !is_wipe_tower); - bool enable_scale_xyz = selection.is_single_full_instance() || selection.is_single_volume() || selection.is_single_modifier(); - for (unsigned int i = 0; i < 6; ++i) - { - enable_grabber(Scale, i, enable_scale_xyz); - } + // BBS: when select multiple objects, uniform scale can be deselected, display the 0-5 grabbers + //bool enable_scale_xyz = selection.is_single_full_instance() || selection.is_single_volume() || selection.is_single_modifier(); + //for (unsigned int i = 0; i < 6; ++i) + //{ + // enable_grabber(Scale, i, enable_scale_xyz); + //} if (m_common_gizmos_data) { m_common_gizmos_data->update(get_current() @@ -624,6 +625,8 @@ bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_p return dynamic_cast(m_gizmos[Seam].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == MmuSegmentation) return dynamic_cast(m_gizmos[MmuSegmentation].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); + else if (m_current == Text) + return dynamic_cast(m_gizmos[Text].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else return false; } @@ -756,7 +759,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) // mouse anywhere if (evt.Moving()) { m_tooltip = update_hover_state(mouse_pos); - if (m_current == MmuSegmentation || m_current == FdmSupports) + if (m_current == MmuSegmentation || m_current == FdmSupports || m_current == Text) // BBS gizmo_event(SLAGizmoEventType::Moving, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); } else if (evt.LeftUp()) { @@ -839,8 +842,8 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) //if (evt.AltDown()) // transformation_type.set_independent(); selection.scale(get_scale(), transformation_type); - //if (control_down) - // selection.translate(get_scale_offset(), true); + if (control_down && m_gizmos[m_current].get()->get_hover_id() < 6) + selection.translate(get_scale_offset(), true); // BBS //wxGetApp().obj_manipul()->set_dirty(); break; @@ -869,7 +872,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) m_tooltip.clear(); if (evt.LeftDown() && (!control_down || grabber_contains_mouse())) { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) + if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Text) && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown())) // the gizmo got the event and took some action, there is no need to do anything more processed = true; @@ -1181,10 +1184,40 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) processed = simplify->on_esc_key_down(); } // BBS - else if (m_current == MmuSegmentation && keyCode > '0' && keyCode <= '9') { + else if (m_current == MmuSegmentation) { GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); - if (mmu_seg != nullptr) - processed = mmu_seg->on_number_key_down(keyCode - '0'); + if (mmu_seg != nullptr) { + if (keyCode > '0' && keyCode <= '9') { + processed = mmu_seg->on_number_key_down(keyCode - '0'); + } + else if (keyCode == 'F' || keyCode == 'T' || keyCode == 'S' || keyCode == 'C' || keyCode == 'H' || keyCode == 'G') { + processed = mmu_seg->on_key_down_select_tool_type(keyCode); + if (processed) { + // force extra frame to automatically update window size + wxGetApp().imgui()->set_requires_extra_frame(); + } + } + } + } + else if (m_current == FdmSupports) { + GLGizmoFdmSupports* fdm_support = dynamic_cast(get_current()); + if (fdm_support != nullptr && keyCode == 'F' || keyCode == 'S' || keyCode == 'C' || keyCode == 'G') { + processed = fdm_support->on_key_down_select_tool_type(keyCode); + } + if (processed) { + // force extra frame to automatically update window size + wxGetApp().imgui()->set_requires_extra_frame(); + } + } + else if (m_current == Seam) { + GLGizmoSeam* seam = dynamic_cast(get_current()); + if (seam != nullptr && keyCode == 'S' || keyCode == 'C') { + processed = seam->on_key_down_select_tool_type(keyCode); + } + if (processed) { + // force extra frame to automatically update window size + wxGetApp().imgui()->set_requires_extra_frame(); + } } } @@ -1504,7 +1537,7 @@ void GLGizmosManager::update_on_off_state(const Vec2d& mouse_pos) if (idx != Undefined && m_gizmos[idx]->is_activable() && m_hover == idx) { activate_gizmo(m_current == idx ? Undefined : (EType)idx); // BBS - wxGetApp().obj_list()->select_object_item((EType)idx <= Scale); + wxGetApp().obj_list()->select_object_item((EType) idx <= Scale || (EType) idx == Text); } } diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 7b7e4a5216..b6968abe9f 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -304,7 +304,12 @@ void GizmoObjectManipulation::change_scale_value(int axis, double value) return; Vec3d scale = m_cache.scale; - scale(axis) = value; + if (scale[axis] != 0 && std::abs(m_cache.size[axis] * value / scale[axis]) > MAX_NUM) { + scale[axis] *= MAX_NUM / m_cache.size[axis]; + } + else { + scale(axis) = value; + } this->do_scale(axis, scale); @@ -351,7 +356,8 @@ void GizmoObjectManipulation::do_scale(int axis, const Vec3d &scale) const transformation_type.set_local(); } - if (m_uniform_scale || selection.requires_uniform_scale()) + // BBS: when select multiple objects, uniform scale can be deselected + if (m_uniform_scale/* || selection.requires_uniform_scale()*/) scaling_factor = scale(axis) * Vec3d::Ones(); selection.start_dragging(); @@ -505,18 +511,6 @@ bool GizmoObjectManipulation::reset_button(ImGuiWrapper *imgui_wrapper, float ca unit_size = std::max(nuit_max[i], unit_size); } - for (int i = 0; i < 3; i++) - { - if (str == "scale") { - if (vec1[i] > 39062.46)vec1[i] = 39062.46; - if (vec2[i] > 9999.99)vec2[i] = 9999.99; - } - if (str == "move") { - if (vec1[i] > 9999.99)vec1[i] = 9999.99; - if (vec2[i] > 9999.99)vec2[i] = 9999.99; - } - } - return unit_size + 8.0; } @@ -609,6 +603,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, for (int i = 0;i MAX_NUM)display_position[i] = MAX_NUM; + if (display_position[i] < -MAX_NUM)display_position[i] = -MAX_NUM; } m_buffered_position = display_position; @@ -842,6 +837,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w ImGui::BBLInputDouble(label_scale_values[0][2], &scale[2], 0.0f, 0.0f, "%.2f"); ImGui::SameLine(caption_max + (++index_unit) *unit_size + (++index) * space_size); imgui_wrapper->text(_L("%")); + m_buffered_scale = scale; if (m_show_clear_scale) { ImGui::SameLine(caption_max + 3 * unit_size + 4 * space_size + end_text_size); @@ -878,9 +874,8 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w for (int i = 0;i MAX_NUM || scale[i]> MAX_NUM)display_size[i] = MAX_NUM; + if (std::abs(display_size[i]) > MAX_NUM) display_size[i] = MAX_NUM; } - m_buffered_scale = scale; m_buffered_size = display_size; int size_sel = update(current_active_id, "size", original_size, m_buffered_size); ImGui::PopStyleVar(1); @@ -889,16 +884,18 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w bool uniform_scale = this->m_uniform_scale; - const Selection &selection = m_glcanvas.get_selection(); - bool uniform_scale_only = selection.is_multiple_full_object() || selection.is_multiple_full_instance() || selection.is_mixed() || selection.is_multiple_volume() || selection.is_multiple_modifier(); + // BBS: when select multiple objects, uniform scale can be deselected + //const Selection &selection = m_glcanvas.get_selection(); + //bool uniform_scale_only = selection.is_multiple_full_object() || selection.is_multiple_full_instance() || selection.is_mixed() || selection.is_multiple_volume() || + // selection.is_multiple_modifier(); - if (uniform_scale_only) { - imgui_wrapper->disabled_begin(true); - imgui_wrapper->bbl_checkbox(_L("uniform scale"), uniform_scale_only); - imgui_wrapper->disabled_end(); - } else { + //if (uniform_scale_only) { + // imgui_wrapper->disabled_begin(true); + // imgui_wrapper->bbl_checkbox(_L("uniform scale"), uniform_scale_only); + // imgui_wrapper->disabled_end(); + //} else { imgui_wrapper->bbl_checkbox(_L("uniform scale"), uniform_scale); - } + //} if (uniform_scale != this->m_uniform_scale) { this->set_uniform_scaling(uniform_scale); } // for (int index = 0; index < 3; index++) diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index 2bb7a78b37..87c5257a97 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -248,26 +248,27 @@ wxString HMSQuery::query_print_error_msg(int print_error) int HMSQuery::check_hms_info() { - int result = 0; - bool download_new_hms_info = true; - - // load local hms json file - std::string version = ""; - if (load_from_local(version) == 0) { - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info current version = " << version; - std::string new_version; - get_hms_info_version(new_version); - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version; - if (!version.empty() && version == new_version) { - download_new_hms_info = false; + boost::thread check_thread = boost::thread([this] { + bool download_new_hms_info = true; + // load local hms json file + std::string version = ""; + if (load_from_local(version) == 0) { + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info current version = " << version; + std::string new_version; + get_hms_info_version(new_version); + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version; + if (!version.empty() && version == new_version) { + download_new_hms_info = false; + } } - } - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info need download new hms info = " << download_new_hms_info; - // download if version is update - if (download_new_hms_info) { - result = download_hms_info(); - } - return result; + BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info need download new hms info = " << download_new_hms_info; + // download if version is update + if (download_new_hms_info) { + download_hms_info(); + } + return; + }); + return 0; } std::string get_hms_wiki_url(std::string error_code) diff --git a/src/slic3r/GUI/HintNotification.cpp b/src/slic3r/GUI/HintNotification.cpp index e64c66caf1..786868235c 100644 --- a/src/slic3r/GUI/HintNotification.cpp +++ b/src/slic3r/GUI/HintNotification.cpp @@ -67,7 +67,7 @@ namespace { void write_used_binary(const std::vector& ids) { - boost::nowide::ofstream file((boost::filesystem::path(data_dir()) / "cache" / "hints.cereal").string(), std::ios::binary); + boost::nowide::ofstream file((boost::filesystem::path(data_dir()) / "user" / "hints.cereal").string(), std::ios::binary); cereal::BinaryOutputArchive archive(file); HintsCerealData cd{ ids }; try @@ -81,7 +81,7 @@ namespace { } void read_used_binary(std::vector& ids) { - boost::filesystem::path path(boost::filesystem::path(data_dir()) / "cache" / "hints.cereal"); + boost::filesystem::path path(boost::filesystem::path(data_dir()) / "user" / "hints.cereal"); if (!boost::filesystem::exists(path)) { BOOST_LOG_TRIVIAL(warning) << "Failed to load to hints.cereal. File does not exists. " << path.string(); return; diff --git a/src/slic3r/GUI/HttpServer.cpp b/src/slic3r/GUI/HttpServer.cpp new file mode 100644 index 0000000000..1c2c27f1dd --- /dev/null +++ b/src/slic3r/GUI/HttpServer.cpp @@ -0,0 +1,151 @@ +#include "HttpServer.hpp" +#include +#include "GUI_App.hpp" +#include "slic3r/Utils/Http.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" + +namespace Slic3r { +namespace GUI { + +static std::string parse_params(std::string url, std::string key) +{ + size_t start = url.find(key); + if (start < 0) return ""; + size_t eq = url.find('=', start); + if (eq < 0) return ""; + std::string key_str = url.substr(start, eq - start); + if (key_str != key) + return ""; + start += key.size() + 1; + size_t end = url.find('&', start); + if (end < 0) + return ""; + std::string result = url.substr(start, end - start); + return result; +} + +std::string http_headers::get_response() +{ + BOOST_LOG_TRIVIAL(info) << "thirdparty_login: get_response"; + std::stringstream ssOut; + std::string url_str = Http::url_decode(url); + if (boost::contains(url_str, "access_token")) { + std::string sHTML = "

redirect to url

"; + std::string redirect_url = parse_params(url_str, "redirect_url"); + std::string access_token = parse_params(url_str, "access_token"); + std::string refresh_token = parse_params(url_str, "refresh_token"); + std::string expires_in_str = parse_params(url_str, "expires_in"); + std::string refresh_expires_in_str = parse_params(url_str, "refresh_expires_in"); + NetworkAgent* agent = wxGetApp().getAgent(); + + unsigned int http_code; + std::string http_body; + int result = agent->get_my_profile(access_token, &http_code, &http_body); + if (result == 0) { + std::string user_id; + std::string user_name; + std::string user_account; + std::string user_avatar; + try { + json user_j = json::parse(http_body); + if (user_j.contains("uid")) + user_id = std::to_string(user_j["uid"].get()); + if (user_j.contains("name")) + user_name = user_j["name"].get(); + if (user_j.contains("avatar")) + user_avatar = user_j["avatar"].get(); + if (user_j.contains("account")) + user_account = user_j["account"].get(); + } catch (...) { + ; + } + json j; + j["data"]["refresh_token"] = refresh_token; + j["data"]["token"] = access_token; + j["data"]["expires_in"] = expires_in_str; + j["data"]["refresh_expires_in"] = refresh_expires_in_str; + j["data"]["user"]["uid"] = user_id; + j["data"]["user"]["name"] = user_name; + j["data"]["user"]["account"] = user_account; + j["data"]["user"]["avatar"] = user_avatar; + agent->change_user(j.dump()); + if (agent->is_user_login()) { + wxGetApp().request_user_login(1); + } + GUI::wxGetApp().CallAfter([this] { + wxGetApp().ShowUserLogin(false); + }); + std::string location_str = (boost::format("Location: %1%?result=success") % redirect_url).str(); + ssOut << "HTTP/1.1 302 Found" << std::endl; + ssOut << location_str << std::endl; + ssOut << "content-type: text/html" << std::endl; + ssOut << "content-length: " << sHTML.length() << std::endl; + ssOut << std::endl; + ssOut << sHTML; + } else { + std::string error_str = "get_user_profile_error_" + std::to_string(result); + std::string location_str = (boost::format("Location: %1%?result=fail&error=%2%") % redirect_url % error_str).str(); + ssOut << "HTTP/1.1 302 Found" << std::endl; + ssOut << location_str << std::endl; + ssOut << "content-type: text/html" << std::endl; + ssOut << "content-length: " << sHTML.length() << std::endl; + ssOut << std::endl; + ssOut << sHTML; + } + } else { + std::string sHTML = "

404 Not Found

There's nothing here.

"; + ssOut << "HTTP/1.1 404 Not Found" << std::endl; + ssOut << "content-type: text/html" << std::endl; + ssOut << "content-length: " << sHTML.length() << std::endl; + ssOut << std::endl; + ssOut << sHTML; + } + return ssOut.str(); +} + + +void accept_and_run(boost::asio::ip::tcp::acceptor& acceptor, boost::asio::io_service& io_service) +{ + std::shared_ptr sesh = std::make_shared(io_service); + acceptor.async_accept(sesh->socket, + [sesh, &acceptor, &io_service](const boost::beast::error_code& accept_error) + { + accept_and_run(acceptor, io_service); + if (!accept_error) + { + session::interact(sesh); + } + }); +} + +HttpServer::HttpServer() +{ + ; +} + +void HttpServer::start() +{ + BOOST_LOG_TRIVIAL(info) << "start_http_service..."; + start_http_server = true; + m_http_server_thread = Slic3r::create_thread( + [this] { + boost::asio::io_service io_service; + boost::asio::ip::tcp::endpoint endpoint{ boost::asio::ip::tcp::v4(), LOCALHOST_PORT}; + boost::asio::ip::tcp::acceptor acceptor { io_service, endpoint}; + acceptor.listen(); + accept_and_run(acceptor, io_service); + while (start_http_server) { + io_service.run(); + } + }); +} + +void HttpServer::stop() +{ + start_http_server = false; + if (m_http_server_thread.joinable()) + m_http_server_thread.join(); +} + +} // GUI +} //Slic3r diff --git a/src/slic3r/GUI/HttpServer.hpp b/src/slic3r/GUI/HttpServer.hpp new file mode 100644 index 0000000000..2a6a980ecc --- /dev/null +++ b/src/slic3r/GUI/HttpServer.hpp @@ -0,0 +1,162 @@ +#ifndef slic3r_Http_App_hpp_ +#define slic3r_Http_App_hpp_ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace boost; +using namespace boost::system; +using namespace boost::asio; + +#define LOCALHOST_PORT 13618 +#define LOCALHOST_URL "http://localhost:" + +namespace Slic3r { +namespace GUI { + +class http_headers +{ + std::string method; + std::string url; + std::string version; + + std::map headers; + +public: + + std::string get_response(); + + int content_length() + { + auto request = headers.find("content-length"); + if (request != headers.end()) + { + std::stringstream ssLength(request->second); + int content_length; + ssLength >> content_length; + return content_length; + } + return 0; + } + + void on_read_header(std::string line) + { + //std::cout << "header: " << line << std::endl; + + std::stringstream ssHeader(line); + std::string headerName; + std::getline(ssHeader, headerName, ':'); + + std::string value; + std::getline(ssHeader, value); + headers[headerName] = value; + } + + void on_read_request_line(std::string line) + { + std::stringstream ssRequestLine(line); + ssRequestLine >> method; + ssRequestLine >> url; + ssRequestLine >> version; + + std::cout << "request for resource: " << url << std::endl; + } +}; + +class session +{ + asio::streambuf buff; + http_headers headers; + + static void read_body(std::shared_ptr pThis) + { + int nbuffer = 1000; + std::shared_ptr> bufptr = std::make_shared>(nbuffer); + asio::async_read(pThis->socket, boost::asio::buffer(*bufptr, nbuffer), [pThis](const boost::beast::error_code& e, std::size_t s) + { + }); + } + + static void read_next_line(std::shared_ptr pThis) + { + asio::async_read_until(pThis->socket, pThis->buff, '\r', [pThis](const boost::beast::error_code& e, std::size_t s) + { + std::string line, ignore; + std::istream stream{ &pThis->buff }; + std::getline(stream, line, '\r'); + std::getline(stream, ignore, '\n'); + pThis->headers.on_read_header(line); + + if (line.length() == 0) + { + if (pThis->headers.content_length() == 0) + { + std::shared_ptr str = std::make_shared(pThis->headers.get_response()); + asio::async_write(pThis->socket, boost::asio::buffer(str->c_str(), str->length()), [pThis, str](const boost::beast::error_code& e, std::size_t s) + { + std::cout << "done" << std::endl; + }); + } + else + { + pThis->read_body(pThis); + } + } + else + { + pThis->read_next_line(pThis); + } + }); + } + + static void read_first_line(std::shared_ptr pThis) + { + asio::async_read_until(pThis->socket, pThis->buff, '\r', [pThis](const boost::beast::error_code& e, std::size_t s) + { + std::string line, ignore; + std::istream stream{ &pThis->buff }; + std::getline(stream, line, '\r'); + std::getline(stream, ignore, '\n'); + pThis->headers.on_read_request_line(line); + pThis->read_next_line(pThis); + }); + } + +public: + boost::asio::ip::tcp::socket socket; + + session(io_service& io_service) + :socket(io_service) + { + } + + static void interact(std::shared_ptr pThis) + { + read_first_line(pThis); + } +}; + +class HttpServer { +public: + HttpServer(); + + boost::thread m_http_server_thread; + bool start_http_server = false; + + bool is_started() { return start_http_server; } + void start(); + void stop(); +}; + +} +}; + +#endif diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 448ee8c349..87556b75c0 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1,22 +1,6 @@ -#include "libslic3r/libslic3r.h" #include "IMSlider.hpp" #include "libslic3r/GCode.hpp" -#include "GUI.hpp" #include "GUI_App.hpp" -#include "Plater.hpp" -#include "I18N.hpp" -#include "libslic3r/Print.hpp" -#include "libslic3r/AppConfig.hpp" -#include "GUI_Utils.hpp" -#include "MsgDialog.hpp" -#include "Tab.hpp" -#include "GUI_ObjectList.hpp" - -#include -#include -#include -#include "Field.hpp" -#include "format.hpp" #include "NotificationManager.hpp" #ifndef IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS @@ -25,27 +9,27 @@ namespace Slic3r { -using GUI::from_u8; -using GUI::into_u8; -using GUI::format_wxstr; - namespace GUI { constexpr double min_delta_area = scale_(scale_(25)); // equal to 25 mm2 constexpr double miscalculation = scale_(scale_(1)); // equal to 1 mm2 -//static const ImVec2 MIN_RECT_SIZE = ImVec2(81, 52); -//static const float TOP_MARGIN = 3.0f; -static const float LEFT_MARGIN = 13.0f + 100.0f; // avoid thumbnail toolbar -static const float SLIDER_LENGTH = 680.0f; -static const float TEXT_WIDTH_DUMMY = 63.0f; -static const float ONE_LAYER_MARGIN = 10.0f; -static const ImVec2 ONE_LAYER_OFFSET = ImVec2(41.0f, 44.0f); -static const ImVec2 HORIZONTAL_SLIDER_SIZE = ImVec2(764.0f, 90.0f);//764 = 680 + handle_dummy_width * 2 + text_right_dummy -static const ImVec2 VERTICAL_SLIDER_SIZE = ImVec2(105.0f, 748.0f);//748 = 680 + text_dummy_height * 2 +static const float LEFT_MARGIN = 13.0f + 100.0f; // avoid thumbnail toolbar +static const float HORIZONTAL_SLIDER_WINDOW_HEIGHT = 64.0f; +static const float VERTICAL_SLIDER_WINDOW_WIDTH = 124.0f; +static const float GROOVE_WIDTH = 12.0f; +static const ImVec2 ONE_LAYER_MARGIN = ImVec2(20.0f, 20.0f); +static const ImVec2 ONE_LAYER_BUTTON_SIZE = ImVec2(28.0f, 28.0f); - int m_tick_value = -1; - ImVec4 m_tick_rect; +static const ImU32 BACKGROUND_COLOR_DARK = IM_COL32(65, 65, 71, 255); +static const ImU32 BACKGROUND_COLOR_LIGHT = IM_COL32(255, 255, 255, 255); +static const ImU32 GROOVE_COLOR_DARK = IM_COL32(45, 45, 49, 255); +static const ImU32 GROOVE_COLOR_LIGHT = IM_COL32(206, 206, 206, 255); +static const ImU32 BRAND_COLOR = IM_COL32(0, 174, 66, 255); + + +static int m_tick_value = -1; +static ImVec4 m_tick_rect; bool equivalent_areas(const double& bottom_area, const double& top_area) { @@ -136,292 +120,6 @@ static std::string short_and_splitted_time(const std::string &time) } -std::string TickCodeInfo::get_color_for_tick(TickCode tick, Type type, const int extruder) -{ - if (mode == SingleExtruder && type == ColorChange && m_use_default_colors) { -#if 1 - if (ticks.empty()) return color_generator.get_opposite_color((*m_colors)[0]); - - auto before_tick_it = std::lower_bound(ticks.begin(), ticks.end(), tick); - if (before_tick_it == ticks.end()) { - while (before_tick_it != ticks.begin()) - if (--before_tick_it; before_tick_it->type == ColorChange) break; - if (before_tick_it->type == ColorChange) return color_generator.get_opposite_color(before_tick_it->color); - return color_generator.get_opposite_color((*m_colors)[0]); - } - - if (before_tick_it == ticks.begin()) { - const std::string &frst_color = (*m_colors)[0]; - if (before_tick_it->type == ColorChange) return color_generator.get_opposite_color(frst_color, before_tick_it->color); - - auto next_tick_it = before_tick_it; - while (next_tick_it != ticks.end()) - if (++next_tick_it; next_tick_it->type == ColorChange) break; - if (next_tick_it->type == ColorChange) return color_generator.get_opposite_color(frst_color, next_tick_it->color); - - return color_generator.get_opposite_color(frst_color); - } - - std::string frst_color = ""; - if (before_tick_it->type == ColorChange) - frst_color = before_tick_it->color; - else { - auto next_tick_it = before_tick_it; - while (next_tick_it != ticks.end()) - if (++next_tick_it; next_tick_it->type == ColorChange) { - frst_color = next_tick_it->color; - break; - } - } - - while (before_tick_it != ticks.begin()) - if (--before_tick_it; before_tick_it->type == ColorChange) break; - - if (before_tick_it->type == ColorChange) { - if (frst_color.empty()) return color_generator.get_opposite_color(before_tick_it->color); - return color_generator.get_opposite_color(before_tick_it->color, frst_color); - } - - if (frst_color.empty()) return color_generator.get_opposite_color((*m_colors)[0]); - return color_generator.get_opposite_color((*m_colors)[0], frst_color); -#else - const std::vector &colors = ColorPrintColors::get(); - if (ticks.empty()) return colors[0]; - m_default_color_idx++; - - return colors[m_default_color_idx % colors.size()]; -#endif - } - - std::string color = (*m_colors)[extruder - 1]; - - if (type == ColorChange) { - if (!ticks.empty()) { - auto before_tick_it = std::lower_bound(ticks.begin(), ticks.end(), tick); - while (before_tick_it != ticks.begin()) { - --before_tick_it; - if (before_tick_it->type == ColorChange && before_tick_it->extruder == extruder) { - color = before_tick_it->color; - break; - } - } - } - - //TODO - //color = get_new_color(color); - } - return color; -} - - -bool TickCodeInfo::add_tick(const int tick, Type type, const int extruder, double print_z) -{ - std::string color; - std::string extra; - if (type == Custom) // custom Gcode - { - //extra = get_custom_code(custom_gcode, print_z); - //if (extra.empty()) return false; - //custom_gcode = extra; - } else if (type == PausePrint) { - //BBS do not set pause extra message - //extra = get_pause_print_msg(pause_print_msg, print_z); - //if (extra.empty()) return false; - pause_print_msg = extra; - } - else { - color = get_color_for_tick(TickCode{ tick }, type, extruder); - if (color.empty()) return false; - } - - if (mode == SingleExtruder) m_use_default_colors = true; - - ticks.emplace(TickCode{tick, type, extruder, color, extra}); - - return true; -} - -bool TickCodeInfo::edit_tick(std::set::iterator it, double print_z) -{ - std::string edited_value; - //TODO - /* BBS - if (it->type == ColorChange) - edited_value = get_new_color(it->color); - else if (it->type == PausePrint) - edited_value = get_pause_print_msg(it->extra, print_z); - else - edited_value = get_custom_code(it->type == Template ? gcode(Template) : it->extra, print_z); - */ - if (edited_value.empty()) return false; - - TickCode changed_tick = *it; - if (it->type == ColorChange) { - if (it->color == edited_value) return false; - changed_tick.color = edited_value; - } else if (it->type == Template) { - //if (gcode(Template) == edited_value) return false; - //changed_tick.extra = edited_value; - //changed_tick.type = Custom; - ; - } else if (it->type == Custom || it->type == PausePrint) { - if (it->extra == edited_value) return false; - changed_tick.extra = edited_value; - } - - ticks.erase(it); - ticks.emplace(changed_tick); - - return true; -} - -void TickCodeInfo::switch_code(Type type_from, Type type_to) -{ - for (auto it{ticks.begin()}, end{ticks.end()}; it != end;) - if (it->type == type_from) { - TickCode tick = *it; - tick.type = type_to; - tick.extruder = 1; - ticks.erase(it); - it = ticks.emplace(tick).first; - } else - ++it; -} - -bool TickCodeInfo::switch_code_for_tick(std::set::iterator it, Type type_to, const int extruder) -{ - const std::string color = get_color_for_tick(*it, type_to, extruder); - if (color.empty()) return false; - - TickCode changed_tick = *it; - changed_tick.type = type_to; - changed_tick.extruder = extruder; - changed_tick.color = color; - - ticks.erase(it); - ticks.emplace(changed_tick); - - return true; -} - -void TickCodeInfo::erase_all_ticks_with_code(Type type) -{ - for (auto it{ticks.begin()}, end{ticks.end()}; it != end;) { - if (it->type == type) - it = ticks.erase(it); - else - ++it; - } -} - -bool TickCodeInfo::has_tick_with_code(Type type) -{ - for (const TickCode &tick : ticks) - if (tick.type == type) return true; - - return false; -} - -bool TickCodeInfo::has_tick(int tick) { return ticks.find(TickCode{tick}) != ticks.end(); } - -ConflictType TickCodeInfo::is_conflict_tick(const TickCode &tick, Mode out_mode, int only_extruder, double print_z) -{ - if ((tick.type == ColorChange && ((mode == SingleExtruder && out_mode == MultiExtruder) || (mode == MultiExtruder && out_mode == SingleExtruder))) || - (tick.type == ToolChange && (mode == MultiAsSingle && out_mode != MultiAsSingle))) - return ctModeConflict; - - // check ColorChange tick - if (tick.type == ColorChange) { - // We should mark a tick as a "MeaninglessColorChange", - // if it has a ColorChange for unused extruder from current print to end of the print - std::set used_extruders_for_tick = get_used_extruders_for_tick(tick.tick, only_extruder, print_z, out_mode); - - if (used_extruders_for_tick.find(tick.extruder) == used_extruders_for_tick.end()) return ctMeaninglessColorChange; - - // We should mark a tick as a "Redundant", - // if it has a ColorChange for extruder that has not been used before - if (mode == MultiAsSingle && tick.extruder != std::max(only_extruder, 1)) { - auto it = ticks.lower_bound(tick); - if (it == ticks.begin() && it->type == ToolChange && tick.extruder == it->extruder) return ctNone; - - while (it != ticks.begin()) { - --it; - if (it->type == ToolChange && tick.extruder == it->extruder) return ctNone; - } - - return ctRedundant; - } - } - - // check ToolChange tick - if (mode == MultiAsSingle && tick.type == ToolChange) { - // We should mark a tick as a "MeaninglessToolChange", - // if it has a ToolChange to the same extruder - auto it = ticks.find(tick); - if (it == ticks.begin()) return tick.extruder == std::max(only_extruder, 1) ? ctMeaninglessToolChange : ctNone; - - while (it != ticks.begin()) { - --it; - if (it->type == ToolChange) return tick.extruder == it->extruder ? ctMeaninglessToolChange : ctNone; - } - } - - return ctNone; -} - -// Get used extruders for tick. -// Means all extruders(tools) which will be used during printing from current tick to the end -std::set TickCodeInfo::get_used_extruders_for_tick(int tick, int only_extruder, double print_z, Mode force_mode /* = Undef*/) const -{ - Mode e_mode = !force_mode ? mode : force_mode; - - if (e_mode == MultiExtruder) { - // #ys_FIXME: get tool ordering from _correct_ place - const ToolOrdering &tool_ordering = GUI::wxGetApp().plater()->fff_print().get_tool_ordering(); - - if (tool_ordering.empty()) return {}; - - std::set used_extruders; - - auto it_layer_tools = std::lower_bound(tool_ordering.begin(), tool_ordering.end(), LayerTools(print_z)); - for (; it_layer_tools != tool_ordering.end(); ++it_layer_tools) { - const std::vector &extruders = it_layer_tools->extruders; - for (const auto &extruder : extruders) used_extruders.emplace(extruder + 1); - } - - return used_extruders; - } - - const int default_initial_extruder = e_mode == MultiAsSingle ? std::max(only_extruder, 1) : 1; - if (ticks.empty() || e_mode == SingleExtruder) return {default_initial_extruder}; - - std::set used_extruders; - - auto it_start = ticks.lower_bound(TickCode{tick}); - auto it = it_start; - if (it == ticks.begin() && it->type == ToolChange && tick != it->tick) // In case of switch of ToolChange to ColorChange, when tick exists, - // we shouldn't change color for extruder, which will be deleted - { - used_extruders.emplace(it->extruder); - if (tick < it->tick) used_extruders.emplace(default_initial_extruder); - } - - while (it != ticks.begin()) { - --it; - if (it->type == ToolChange && tick != it->tick) { - used_extruders.emplace(it->extruder); - break; - } - } - - if (it == ticks.begin() && used_extruders.empty()) used_extruders.emplace(default_initial_extruder); - - for (it = it_start; it != ticks.end(); ++it) - if (it->type == ToolChange && tick != it->tick) used_extruders.emplace(it->extruder); - - return used_extruders; -} - IMSlider::IMSlider(int lowerValue, int higherValue, int minValue, int maxValue, long style) { m_lower_value = lowerValue; @@ -521,11 +219,6 @@ Info IMSlider::GetTicksValues() const void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) { - if (!m_can_change_color) { - m_ticks.erase_all_ticks_with_code(ToolChange); - return; - } - if (m_values.empty()) { m_ticks.mode = m_mode; return; @@ -542,10 +235,12 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) if (!was_empty && m_ticks.empty()) // Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one - post_ticks_changed_event(); + ;// post_ticks_changed_event(); - // init extruder sequence in respect to the extruders count - if (m_ticks.empty()) m_extruders_sequence.init(m_extruder_colors.size()); + if (m_ticks.has_tick_with_code(ToolChange) && !m_can_change_color) { + m_ticks.erase_all_ticks_with_code(ToolChange); + post_ticks_changed_event(); + } if (custom_gcode_per_print_z.mode && !custom_gcode_per_print_z.gcodes.empty()) m_ticks.mode = custom_gcode_per_print_z.mode; @@ -597,9 +292,23 @@ void IMSlider::SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, UseDefaultColors(m_mode == SingleExtruder); - m_is_wipe_tower = m_mode != SingleExtruder; + auto curr_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + auto curr_print_seq = curr_plate->get_real_print_seq(); + + if (curr_print_seq == PrintSequence::ByObject) + m_is_wipe_tower = false; + else + m_is_wipe_tower = m_mode != SingleExtruder; + + auto config = wxGetApp().preset_bundle->full_config(); + m_is_spiral_vase = config.option("spiral_mode")->value; m_can_change_color = can_change_color; + + // close opened menu window after reslice + m_show_menu = false; + m_show_custom_gcode_window = false; + m_show_go_to_layer_dialog = false; } void IMSlider::SetExtruderColors( const std::vector& extruder_colors) @@ -713,33 +422,17 @@ bool IMSlider::switch_one_layer_mode() return true; } -void IMSlider::draw_background(const ImRect& groove) { - const ImU32 bg_rect_col = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); - const ImU32 groove_col = m_is_dark ? IM_COL32(45, 45, 49, 255) : IM_COL32(206, 206, 206, 255); +void IMSlider::draw_background_and_groove(const ImRect& bg_rect, const ImRect& groove) { + const ImU32 bg_rect_col = m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT; + const ImU32 groove_col = m_is_dark ? GROOVE_COLOR_DARK : GROOVE_COLOR_LIGHT; - if (is_horizontal() || m_ticks.empty()) { - ImVec2 groove_padding = ImVec2(2.0f, 2.0f) * m_scale; - - ImRect bg_rect = groove; - bg_rect.Expand(groove_padding); - - // draw bg of slider - ImGui::RenderFrame(bg_rect.Min, bg_rect.Max, bg_rect_col, false, 0.5 * bg_rect.GetWidth()); - // draw bg of scroll - ImGui::RenderFrame(groove.Min, groove.Max, groove_col, false, 0.5 * groove.GetWidth()); - } - else { - ImVec2 groove_padding = ImVec2(5.0f, 7.0f) * m_scale; - - ImRect bg_rect = groove; - bg_rect.Expand(groove_padding); - - // draw bg of slider - ImGui::RenderFrame(bg_rect.Min, bg_rect.Max, bg_rect_col, false, bg_rect.GetWidth() * 0.5); - } + // draw bg of slider + ImGui::RenderFrame(bg_rect.Min, bg_rect.Max, bg_rect_col, false, 0.5 * bg_rect.GetWidth()); + // draw groove + ImGui::RenderFrame(groove.Min, groove.Max, groove_col, false, 0.5 * groove.GetWidth()); } -bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int v_max, const ImVec2& pos, const ImVec2& size, float scale) +bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int v_max, const ImVec2& size, float scale) { ImGuiWindow* window = ImGui::GetCurrentWindow(); if (window->SkipItems) @@ -748,36 +441,34 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int ImGuiContext& context = *GImGui; const ImGuiID id = window->GetID(str_id); + const ImVec2 pos = window->DC.CursorPos; const ImRect draw_region(pos, pos + size); ImGui::ItemSize(draw_region); - float bottom_dummy = 44.0f * m_scale; - float handle_dummy_width = 17.0f * m_scale; - float text_right_dummy = 50.0f * scale * m_scale; - float groove_y = 8.0f * m_scale; - float draggable_region_y = 19.0f * m_scale; - float handle_radius = 14.0f * m_scale; - float handle_border = 2.0f * m_scale; - float rounding = 2.0f * m_scale; - float text_start_offset = 8.0f * m_scale; - ImVec2 text_padding = ImVec2(5.0f, 2.0f) * m_scale; - float triangle_offsets[3] = {-3.5f * m_scale, 3.5f * m_scale, -6.06f * m_scale}; + const float handle_dummy_width = 10.0f * m_scale; + const float text_right_dummy = 50.0f * scale * m_scale; + const float handle_radius = 12.0f * m_scale; + const float handle_border = 2.0f * m_scale; - const ImU32 white_bg = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); - const ImU32 handle_clr = IM_COL32(0, 150, 136, 255); - const ImU32 handle_border_clr = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(248, 248, 248, 255); + const float text_frame_rounding = 2.0f * scale * m_scale; + const float text_start_offset = 8.0f * m_scale; + const ImVec2 text_padding = ImVec2(5.0f, 2.0f) * m_scale; + const float triangle_offsets[3] = {-3.5f * m_scale, 3.5f * m_scale, -6.06f * m_scale}; - // calc groove size - ImVec2 groove_start = ImVec2(pos.x + handle_dummy_width, pos.y + size.y - groove_y - bottom_dummy); - ImVec2 groove_size = ImVec2(size.x - 2 * handle_dummy_width - text_right_dummy, groove_y); - ImRect groove = ImRect(groove_start, groove_start + groove_size); + const ImU32 white_bg = m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT; + const ImU32 handle_clr = BRAND_COLOR; + const ImU32 handle_border_clr = m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT; - // set active(draggable) region. - ImRect draggable_region = ImRect(groove.Min.x, groove.GetCenter().y, groove.Max.x, groove.GetCenter().y); - draggable_region.Expand(ImVec2(handle_radius, draggable_region_y)); - float mid_y = draggable_region.GetCenter().y; - bool hovered = ImGui::ItemHoverable(draggable_region, id); + // calculate groove size + const ImVec2 groove_start = ImVec2(pos.x + handle_dummy_width, pos.y + size.y - ONE_LAYER_MARGIN.y * m_scale - ONE_LAYER_BUTTON_SIZE.y * m_scale * 0.5f - GROOVE_WIDTH * m_scale * 0.5f); + const ImVec2 groove_size = ImVec2(size.x - 2 * handle_dummy_width - text_right_dummy, GROOVE_WIDTH * m_scale); + const ImRect groove = ImRect(groove_start, groove_start + groove_size); + const ImRect bg_rect = ImRect(groove.Min - ImVec2(6.0f, 6.0f) * m_scale, groove.Max + ImVec2(6.0f, 6.0f) * m_scale); + const float mid_y = groove.GetCenter().y; + + // set mouse active region. active region. + bool hovered = ImGui::ItemHoverable(draw_region, id); if (hovered && context.IO.MouseDown[0]) { ImGui::SetActiveID(id, window); ImGui::SetFocusID(id, window); @@ -785,11 +476,10 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int } // draw background - draw_background(groove); + draw_background_and_groove(bg_rect, groove); - // set slideable region - ImRect slideable_region = draggable_region; - slideable_region.Expand(ImVec2(-handle_radius, 0)); + // set scrollable region + const ImRect slideable_region = ImRect(bg_rect.Min + ImVec2(handle_radius, 0.0f), bg_rect.Max - ImVec2(handle_radius, 0.0f)); // initialize the handle float handle_pos = get_pos_from_value(v_min, v_max, *value, groove); @@ -800,8 +490,8 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int ImVec2 handle_center = handle.GetCenter(); // draw scroll line - ImRect scroll_line = ImRect(ImVec2(groove.Min.x, mid_y - groove_y / 2), ImVec2(handle_center.x, mid_y + groove_y / 2)); - window->DrawList->AddRectFilled(scroll_line.Min, scroll_line.Max, handle_clr, rounding); + ImRect scroll_line = ImRect(groove.Min, ImVec2(handle_center.x, groove.Max.y)); + window->DrawList->AddRectFilled(scroll_line.Min, scroll_line.Max, handle_clr, 0.5f * GROOVE_WIDTH * m_scale); // draw handle window->DrawList->AddCircleFilled(handle_center, handle_radius, handle_border_clr); @@ -813,7 +503,7 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int ImVec2 text_size = text_content_size + text_padding * 2; ImVec2 text_start = ImVec2(handle_center.x + handle_radius + text_start_offset, handle_center.y - 0.5 * text_size.y); ImRect text_rect(text_start, text_start + text_size); - ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, rounding); + ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, text_frame_rounding); ImVec2 pos_1 = ImVec2(text_rect.Min.x, text_rect.GetCenter().y + triangle_offsets[0]); ImVec2 pos_2 = ImVec2(text_rect.Min.x, text_rect.GetCenter().y + triangle_offsets[1]); ImVec2 pos_3 = ImVec2(text_rect.Min.x + triangle_offsets[2], text_rect.GetCenter().y); @@ -824,27 +514,42 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int } void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_region) { - if (m_ticks.empty()) + if (!m_ticks.has_tick_with_code(ToolChange)) return; - const ImU32 blank_col = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); + ImRect main_band = groove; - ImVec2 blank_padding = ImVec2(6.0f, 5.0f) * m_scale; - float blank_width = 1.0f * m_scale; - - ImRect blank_rect = ImRect(groove.GetCenter().x - blank_width, groove.Min.y, groove.GetCenter().x + blank_width, groove.Max.y); - - ImRect main_band = ImRect(blank_rect); - main_band.Expand(blank_padding); - - auto draw_band = [](const ImU32& clr, const ImRect& band_rc) + auto draw_band = [this](const ImU32& clr, const ImRect& band_rc) { - ImGui::RenderFrame(band_rc.Min, band_rc.Max, clr, false, band_rc.GetWidth() * 0.5); - //cover round corner - ImGui::RenderFrame(ImVec2(band_rc.Min.x, band_rc.Max.y - band_rc.GetWidth() * 0.5), band_rc.Max, clr, false); + if (clr == m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT) { + ImRect rc = band_rc; + rc.Min += ImVec2(1, 1) * m_scale; + rc.Max -= ImVec2(1, 1) * m_scale; + ImGui::RenderFrame(band_rc.Min, band_rc.Max, m_is_dark ? GROOVE_COLOR_DARK : GROOVE_COLOR_LIGHT, false, band_rc.GetWidth() * 0.5); + //cover round corner + ImGui::RenderFrame(ImVec2(band_rc.Min.x, band_rc.Max.y - band_rc.GetWidth() * 0.5), band_rc.Max, m_is_dark ? GROOVE_COLOR_DARK : GROOVE_COLOR_LIGHT, false); + + ImGui::RenderFrame(rc.Min, rc.Max, clr, false, rc.GetWidth() * 0.5); + //cover round corner + ImGui::RenderFrame(ImVec2(rc.Min.x, rc.Max.y - rc.GetWidth() * 0.5), rc.Max, clr, false); + } + else { + ImGui::RenderFrame(band_rc.Min, band_rc.Max, clr, false, band_rc.GetWidth() * 0.5); + //cover round corner + ImGui::RenderFrame(ImVec2(band_rc.Min.x, band_rc.Max.y - band_rc.GetWidth() * 0.5), band_rc.Max, clr, false); + } }; auto draw_main_band = [&main_band, this](const ImU32& clr) { - ImGui::RenderFrame(main_band.Min, main_band.Max, clr, false, main_band.GetWidth() * 0.5); + if (clr == m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT) { + ImRect rc = main_band; + rc.Min += ImVec2(1, 1) * m_scale; + rc.Max -= ImVec2(1, 1) * m_scale; + ImGui::RenderFrame(main_band.Min, main_band.Max, m_is_dark ? GROOVE_COLOR_DARK : GROOVE_COLOR_LIGHT, false, main_band.GetWidth() * 0.5); + ImGui::RenderFrame(rc.Min, rc.Max, clr, false, rc.GetWidth() * 0.5); + } + else { + ImGui::RenderFrame(main_band.Min, main_band.Max, clr, false, main_band.GetWidth() * 0.5); + } }; //draw main colored band const int default_color_idx = m_mode == MultiAsSingle ? std::max(m_only_extruder - 1, 0) : 0; @@ -878,9 +583,6 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r } tick_it++; } - - //draw blank line - ImGui::RenderFrame(blank_rect.Min, blank_rect.Max, blank_col, false, blank_rect.GetWidth() * 0.5); } void IMSlider::draw_ticks(const ImRect& slideable_region) { @@ -893,10 +595,10 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { ImGuiContext &context = *GImGui; - ImVec2 tick_box = ImVec2(46.0f, 16.0f) * m_scale; - ImVec2 tick_offset = ImVec2(19.0f, 11.0f) * m_scale; + ImVec2 tick_box = ImVec2(52.0f, 16.0f) * m_scale; + ImVec2 tick_offset = ImVec2(22.0f, 14.0f) * m_scale; float tick_width = 1.0f * m_scale; - ImVec2 icon_offset = ImVec2(13.0f, 7.0f) * m_scale; + ImVec2 icon_offset = ImVec2(16.0f, 7.0f) * m_scale; ImVec2 icon_size = ImVec2(14.0f, 14.0f) * m_scale; const ImU32 tick_clr = IM_COL32(144, 144, 144, 255); @@ -920,7 +622,10 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { if (ImGui::IsMouseHoveringRect(tick_hover_box.Min, tick_hover_box.Max)) { - ImGui::RenderFrame(tick_hover_box.Min, tick_hover_box.Max, tick_hover_box_clr, false); + // render left tick box + ImGui::RenderFrame(tick_hover_box.Min, { slideable_region.Min.x, tick_hover_box.Max.y }, tick_hover_box_clr, false); + // render right tick box + ImGui::RenderFrame({ slideable_region.Max.x, tick_hover_box.Min.y }, tick_hover_box.Max, tick_hover_box_clr, false); if (context.IO.MouseClicked[0]) { m_tick_value = tick_it->tick; m_tick_rect = ImVec4(tick_hover_box.Min.x, tick_hover_box.Min.y, tick_hover_box.Max.x, tick_hover_box.Max.y); @@ -945,10 +650,6 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { ImTextureID pause_icon_id = m_pause_icon_id; ImVec2 icon_pos = ImVec2(slideable_region.GetCenter().x + icon_offset.x, tick_pos - icon_offset.y); button_with_pos(pause_icon_id, icon_size, icon_pos); - if (ImGui::IsMouseHoveringRect(icon_pos, icon_pos + icon_size)) { - if(context.IO.MouseClicked[0]) - int a = 0; - } } ++tick_it; } @@ -958,7 +659,6 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { m_ticks.ticks.end(); if (tick_it != m_ticks.ticks.end()) { // draw delete icon - ImTextureID delete_icon_id = m_delete_icon_id; ImVec2 icon_pos = ImVec2(slideable_region.GetCenter().x + icon_offset.x, get_tick_pos(tick_it->tick) - icon_offset.y); button_with_pos(m_delete_icon_id, icon_size, icon_pos); if (ImGui::IsMouseHoveringRect(icon_pos, icon_pos + icon_size)) { @@ -973,7 +673,7 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { } -bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label,int v_min, int v_max, const ImVec2& pos,const ImVec2& size, SelectedSlider& selection, bool one_layer_flag, float scale) +bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label,int v_min, int v_max, const ImVec2& size, SelectedSlider& selection, bool one_layer_flag, float scale) { ImGuiWindow* window = ImGui::GetCurrentWindow(); if (window->SkipItems) @@ -982,39 +682,38 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower ImGuiContext& context = *GImGui; const ImGuiID id = window->GetID(str_id); + const ImVec2 pos = window->DC.CursorPos; const ImRect draw_region(pos, pos + size); ImGui::ItemSize(draw_region); - float right_dummy = 24.0f * m_scale; - float text_dummy_height = 34.0f * scale * m_scale; - float groove_x = 8.0f * m_scale; - float draggable_region_x = 40.0f * m_scale; - float handle_radius = 14.0f * m_scale; - float handle_border = 2.0f * m_scale; - float rounding = 2.0f * m_scale; - float line_width = 2.0f * m_scale; - float line_offset = 9.0f * m_scale; - float one_handle_offset = 26.0f * m_scale; - float bar_width = 12.0f * m_scale; - ImVec2 text_padding = ImVec2(5.0f, 2.0f) * m_scale; - ImVec2 triangle_offsets[3] = {ImVec2(2.0f, 0.0f) * m_scale, ImVec2(0.0f, 8.0f) * m_scale, ImVec2(9.0f, 0.0f) * m_scale}; + const float text_dummy_height = 30.0f * scale * m_scale; + + const float handle_radius = 12.0f * m_scale; + const float handle_border = 2.0f * m_scale; + const float line_width = 1.0f * m_scale; + const float line_length = 12.0f * m_scale; + const float one_handle_offset = 26.0f * m_scale; + const float bar_width = 28.0f * m_scale; + + const float text_frame_rounding = 2.0f * scale * m_scale; + const ImVec2 text_padding = ImVec2(5.0f, 2.0f) * m_scale; + const ImVec2 triangle_offsets[3] = {ImVec2(2.0f, 0.0f) * m_scale, ImVec2(0.0f, 8.0f) * m_scale, ImVec2(9.0f, 0.0f) * m_scale}; ImVec2 text_content_size; ImVec2 text_size; - const ImU32 white_bg = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); - const ImU32 handle_clr = IM_COL32(0, 150, 136, 255); - const ImU32 handle_border_clr = m_is_dark ? IM_COL32(65, 65, 71, 255) : IM_COL32(248, 248, 248, 255); + const ImU32 white_bg = m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT; + const ImU32 handle_clr = BRAND_COLOR; + const ImU32 handle_border_clr = m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT; + // calculate slider groove size + const ImVec2 groove_start = ImVec2(pos.x + size.x - ONE_LAYER_MARGIN.x * m_scale - ONE_LAYER_BUTTON_SIZE.x * m_scale * 0.5f - GROOVE_WIDTH * m_scale * 0.5f, pos.y + text_dummy_height); + const ImVec2 groove_size = ImVec2(GROOVE_WIDTH * m_scale, size.y - 2 * text_dummy_height); + const ImRect groove = ImRect(groove_start, groove_start + groove_size); + const ImRect bg_rect = ImRect(groove.Min - ImVec2(6.0f, 6.0f) * m_scale, groove.Max + ImVec2(6.0f, 6.0f) * m_scale); + const float mid_x = groove.GetCenter().x; - // calc slider groove size - ImVec2 groove_start = ImVec2(pos.x + size.x - groove_x - right_dummy, pos.y + text_dummy_height); - ImVec2 groove_size = ImVec2(groove_x, size.y - 2 * text_dummy_height); - ImRect groove = ImRect(groove_start, groove_start + groove_size); - - // set active(draggable) region. - ImRect draggable_region = ImRect(groove.GetCenter().x, groove.Min.y, groove.GetCenter().x, groove.Max.y); - draggable_region.Expand(ImVec2(draggable_region_x, 0)); - float mid_x = draggable_region.GetCenter().x; - bool hovered = ImGui::ItemHoverable(draggable_region, id) && !ImGui::ItemHoverable(m_tick_rect, id); + // set mouse active region. + const ImRect active_region = ImRect(ImVec2(draw_region.Min.x + 35.0f * m_scale, draw_region.Min.y), draw_region.Max); + bool hovered = ImGui::ItemHoverable(active_region, id) && !ImGui::ItemHoverable(m_tick_rect, id); if (hovered && context.IO.MouseDown[0]) { ImGui::SetActiveID(id, window); ImGui::SetFocusID(id, window); @@ -1022,14 +721,14 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower } // draw background - draw_background(groove); - + draw_background_and_groove(bg_rect, groove); // Processing interacting - // set slideable region - ImRect higher_slideable_region = ImRect(draggable_region.Min, draggable_region.Max - ImVec2(0, handle_radius)); - ImRect lower_slideable_region = ImRect(draggable_region.Min + ImVec2(0, handle_radius), draggable_region.Max); - ImRect one_slideable_region = draggable_region; + // set scrollable region + const ImRect region = ImRect(bg_rect.Min + ImVec2(0.0f, handle_radius), bg_rect.Max - ImVec2(0.0f, handle_radius)); + const ImRect higher_slideable_region = ImRect(region.Min, region.Max - ImVec2(0, handle_radius)); + const ImRect lower_slideable_region = ImRect(region.Min + ImVec2(0, handle_radius), region.Max); + const ImRect one_slideable_region = region; // initialize the handles. float higher_handle_pos = get_pos_from_value(v_min, v_max, *higher_value, higher_slideable_region); @@ -1040,12 +739,11 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower ImRect one_handle = ImRect(higher_handle.Min - ImVec2(one_handle_offset, 0), higher_handle.Max - ImVec2(one_handle_offset, 0)); - //static bool become_del_handle = false; bool value_changed = false; if (!one_layer_flag) { // select higher handle by default - bool h_selected = (selection == ssHigher); + static bool h_selected = (selection == ssHigher); if (ImGui::ItemHoverable(higher_handle, id) && context.IO.MouseClicked[0]) { selection = ssHigher; h_selected = true; @@ -1092,17 +790,17 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower context.IO.MouseClicked[0]) m_show_menu = false; - if (!m_ticks.empty()) { // draw ticks draw_ticks(h_selected ? higher_slideable_region : lower_slideable_region); // draw colored band draw_colored_band(groove, h_selected ? higher_slideable_region : lower_slideable_region); } - else { + + if (!m_ticks.has_tick_with_code(ToolChange)) { // draw scroll line - ImRect scroll_line = ImRect(ImVec2(mid_x - groove_x / 2, higher_handle_center.y), ImVec2(mid_x + groove_x / 2, lower_handle_center.y)); - window->DrawList->AddRectFilled(scroll_line.Min, scroll_line.Max, handle_clr, rounding); + ImRect scroll_line = ImRect(ImVec2(groove.Min.x, higher_handle_center.y), ImVec2(groove.Max.x, lower_handle_center.y)); + window->DrawList->AddRectFilled(scroll_line.Min, scroll_line.Max, handle_clr); } // draw handles @@ -1113,12 +811,12 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower if (h_selected) { window->DrawList->AddCircleFilled(higher_handle_center, handle_radius, handle_border_clr); window->DrawList->AddCircleFilled(higher_handle_center, handle_radius - handle_border, handle_clr); - window->DrawList->AddLine(higher_handle_center + ImVec2(-line_offset, 0.0f), higher_handle_center + ImVec2(line_offset, 0.0f), white_bg, line_width); - window->DrawList->AddLine(higher_handle_center + ImVec2(0.0f, -line_offset), higher_handle_center + ImVec2(0.0f, line_offset), white_bg, line_width); + window->DrawList->AddLine(higher_handle_center + ImVec2(-0.5f * line_length, 0.0f), higher_handle_center + ImVec2(0.5f * line_length, 0.0f), white_bg, line_width); + window->DrawList->AddLine(higher_handle_center + ImVec2(0.0f, -0.5f * line_length), higher_handle_center + ImVec2(0.0f, 0.5f * line_length), white_bg, line_width); } if (!h_selected) { - window->DrawList->AddLine(lower_handle_center + ImVec2(-line_offset, 0.0f), lower_handle_center + ImVec2(line_offset, 0.0f), white_bg, line_width); - window->DrawList->AddLine(lower_handle_center + ImVec2(0.0f, -line_offset), lower_handle_center + ImVec2(0.0f, line_offset), white_bg, line_width); + window->DrawList->AddLine(lower_handle_center + ImVec2(-0.5f * line_length, 0.0f), lower_handle_center + ImVec2(0.5f * line_length, 0.0f), white_bg, line_width); + window->DrawList->AddLine(lower_handle_center + ImVec2(0.0f, -0.5f * line_length), lower_handle_center + ImVec2(0.0f, 0.5f * line_length), white_bg, line_width); } // draw higher label @@ -1127,7 +825,7 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower text_size = text_content_size + text_padding * 2; ImVec2 text_start = ImVec2(higher_handle.Min.x - text_size.x - triangle_offsets[2].x, higher_handle_center.y - text_size.y); ImRect text_rect(text_start, text_start + text_size); - ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, rounding); + ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, text_frame_rounding); ImVec2 pos_1 = text_rect.Max - triangle_offsets[0]; ImVec2 pos_2 = pos_1 - triangle_offsets[1]; ImVec2 pos_3 = pos_1 + triangle_offsets[2]; @@ -1139,7 +837,7 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower text_size = text_content_size + text_padding * 2; text_start = ImVec2(lower_handle.Min.x - text_size.x - triangle_offsets[2].x, lower_handle_center.y); text_rect = ImRect(text_start, text_start + text_size); - ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, rounding); + ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, text_frame_rounding); pos_1 = ImVec2(text_rect.Max.x, text_rect.Min.y) - triangle_offsets[0]; pos_2 = pos_1 + triangle_offsets[1]; pos_3 = pos_1 + triangle_offsets[2]; @@ -1172,11 +870,11 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower } // draw handle - window->DrawList->AddLine(ImVec2(mid_x - bar_width, handle_center.y), ImVec2(mid_x + bar_width, handle_center.y), handle_clr, line_width); + window->DrawList->AddLine(ImVec2(mid_x - 0.5 * bar_width, handle_center.y), ImVec2(mid_x + 0.5 * bar_width, handle_center.y), handle_clr, 2 * line_width); window->DrawList->AddCircleFilled(handle_center, handle_radius, handle_border_clr); window->DrawList->AddCircleFilled(handle_center, handle_radius - handle_border, handle_clr); - window->DrawList->AddLine(handle_center + ImVec2(-line_offset, 0.0f), handle_center + ImVec2(line_offset, 0.0f), white_bg, line_width); - window->DrawList->AddLine(handle_center + ImVec2(0.0f, -line_offset), handle_center + ImVec2(0.0f, line_offset), white_bg, line_width); + window->DrawList->AddLine(handle_center + ImVec2(-0.5f * line_length, 0.0f), handle_center + ImVec2(0.5f * line_length, 0.0f), white_bg, line_width); + window->DrawList->AddLine(handle_center + ImVec2(0.0f, -0.5f * line_length), handle_center + ImVec2(0.0f, 0.5f * line_length), white_bg, line_width); // draw label auto text_utf8 = into_u8(higher_label); @@ -1184,7 +882,7 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower text_size = text_content_size + text_padding * 2; ImVec2 text_start = ImVec2(one_handle.Min.x - text_size.x, handle_center.y - 0.5 * text_size.y); ImRect text_rect = ImRect(text_start, text_start + text_size); - ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, rounding); + ImGui::RenderFrame(text_rect.Min, text_rect.Max, white_bg, false, text_frame_rounding); ImGui::RenderText(text_start + text_padding, higher_label.c_str()); } @@ -1211,27 +909,19 @@ bool IMSlider::render(int canvas_width, int canvas_height) float scale = (float) wxGetApp().em_unit() / 10.0f; - render_input_custom_gcode(); - - render_go_to_layer_dialog(); - if (is_horizontal()) { - float pos_x = std::max(LEFT_MARGIN, 0.2f * canvas_width); - float pos_y = (canvas_height - HORIZONTAL_SLIDER_SIZE.y * m_scale); - ImVec2 size = ImVec2(canvas_width - 2 * pos_x, HORIZONTAL_SLIDER_SIZE.y * m_scale); - imgui.set_next_window_pos(pos_x, pos_y, ImGuiCond_Always); + ImVec2 size = ImVec2(canvas_width - 2 * std::max(LEFT_MARGIN * m_scale, 0.2f * canvas_width), HORIZONTAL_SLIDER_WINDOW_HEIGHT * m_scale); + imgui.set_next_window_pos(0.5f * static_cast(canvas_width), canvas_height, ImGuiCond_Always, 0.5f, 1.0f); imgui.begin(std::string("moves_slider"), windows_flag); int value = GetHigherValue(); - if (horizontal_slider("moves_slider", &value, GetMinValue(), GetMaxValue(),ImVec2(pos_x, pos_y), size, scale)) { + if (horizontal_slider("moves_slider", &value, GetMinValue(), GetMaxValue(), size, scale)) { result = true; SetHigherValue(value); } imgui.end(); } else { - float pos_x = canvas_width - (VERTICAL_SLIDER_SIZE.x + TEXT_WIDTH_DUMMY * scale - TEXT_WIDTH_DUMMY + ONE_LAYER_MARGIN) * m_scale; - float pos_y = std::max(ONE_LAYER_OFFSET.y, 0.15f * canvas_height - (VERTICAL_SLIDER_SIZE.y - SLIDER_LENGTH) * scale); - ImVec2 size = ImVec2((VERTICAL_SLIDER_SIZE.x + TEXT_WIDTH_DUMMY * scale - TEXT_WIDTH_DUMMY + ONE_LAYER_MARGIN) * m_scale, canvas_height - 2 * pos_y); - imgui.set_next_window_pos(pos_x, pos_y, ImGuiCond_Always); + ImVec2 size = ImVec2(VERTICAL_SLIDER_WINDOW_WIDTH * m_scale, 0.8f * canvas_height); + imgui.set_next_window_pos(canvas_width, 0.5f * static_cast(canvas_height), ImGuiCond_Always, 1.0f, 0.5f); imgui.begin(std::string("laysers_slider"), windows_flag); render_menu(); @@ -1243,26 +933,27 @@ bool IMSlider::render(int canvas_width, int canvas_height) int temp_higher_value = higher_value; int temp_lower_value = lower_value; if (vertical_slider("laysers_slider", &higher_value, &lower_value, higher_label, lower_label, GetMinValue(), GetMaxValue(), - ImVec2(pos_x, pos_y), size, m_selection, is_one_layer(), scale)) { + size, m_selection, is_one_layer(), scale)) { if (temp_higher_value != higher_value) SetHigherValue(higher_value); if (temp_lower_value != lower_value) SetLowerValue(lower_value); result = true; } + imgui.end(); - ImGui::Spacing(); - ImGui::SameLine((VERTICAL_SLIDER_SIZE.x - ONE_LAYER_OFFSET.x) * scale * m_scale); + imgui.set_next_window_pos(canvas_width, canvas_height, ImGuiCond_Always, 1.0f, 1.0f); + ImGui::SetNextWindowSize((ONE_LAYER_BUTTON_SIZE + ONE_LAYER_MARGIN) * m_scale, 0); + imgui.begin(std::string("one_layer_button"), windows_flag); ImTextureID normal_id = m_is_dark ? is_one_layer() ? m_one_layer_on_dark_id : m_one_layer_off_dark_id : is_one_layer() ? m_one_layer_on_id : m_one_layer_off_id; ImTextureID hover_id = m_is_dark ? is_one_layer() ? m_one_layer_on_hover_dark_id : m_one_layer_off_hover_dark_id : is_one_layer() ? m_one_layer_on_hover_id : m_one_layer_off_hover_id; - if (ImGui::ImageButton3(normal_id, hover_id, ImVec2(28 * m_scale, 28 * m_scale))) { + if (ImGui::ImageButton3(normal_id, hover_id, ONE_LAYER_BUTTON_SIZE * m_scale)) { switch_one_layer_mode(); } - imgui.end(); } @@ -1274,67 +965,77 @@ bool IMSlider::render(int canvas_width, int canvas_height) void IMSlider::render_input_custom_gcode() { - if (!m_show_custom_gcode_window) - return; - ImGuiWrapper& imgui = *wxGetApp().imgui(); - static bool move_to_center = true; - static bool set_focus = true; - if (move_to_center) { - auto pos_x = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_width() / 2; - auto pos_y = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_height() / 2; - imgui.set_next_window_pos(pos_x, pos_y, ImGuiCond_Always, 0.5f, 0.5f); - move_to_center = false; - } + if (m_show_custom_gcode_window) + ImGui::OpenPopup((_u8L("Custom G-code")).c_str()); - imgui.push_common_window_style(m_scale); + ImGuiWrapper& imgui = *wxGetApp().imgui(); + ImVec2 center = ImGui::GetMainViewport()->GetCenter(); + static bool set_focus = true; + + ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); + imgui.push_menu_style(m_scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20, 10) * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 12.f * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10, 3) * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10, 7) * m_scale); - int windows_flag = + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, m_is_dark ? ImVec4(54 / 255.0f, 54 / 255.0f, 60 / 255.0f, 1.00f) : ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); + ImGui::GetCurrentContext()->DimBgRatio = 1.0f; + int windows_flag = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse; - imgui.begin(_u8L("Custom G-code"), windows_flag); - imgui.text(_u8L("Enter Custom G-code used on current layer:")); - if (ImGui::IsMouseClicked(0)) { - set_focus = false; - } - if (set_focus && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0)) { - ImGui::SetKeyboardFocusHere(0); - } - int text_height = 6; - ImGui::InputTextMultiline("##text", m_custom_gcode, sizeof(m_custom_gcode), ImVec2(-1, ImGui::GetTextLineHeight() * text_height)); - //text_height = 5; - //for (int i = 0; m_custom_gcode[i] != '\0'; ++i){ - // if ('\n' == m_custom_gcode[i] && text_height < 12) - // ++text_height; - //} + if (ImGui::BeginPopupModal((_u8L("Custom G-code")).c_str(), NULL, windows_flag)) + { + imgui.text(_u8L("Enter Custom G-code used on current layer:")); + if (ImGui::IsMouseClicked(0)) { + set_focus = false; + } + if (set_focus && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0)) { + wxGetApp().plater()->get_current_canvas3D()->force_set_focus(); + ImGui::SetKeyboardFocusHere(0); + } + const int text_height = 6; + ImGui::InputTextMultiline("##text", m_custom_gcode, sizeof(m_custom_gcode), ImVec2(-1, ImGui::GetTextLineHeight() * text_height)); - ImGui::NewLine(); - ImGui::SameLine(ImGui::GetStyle().WindowPadding.x * 14); - imgui.push_confirm_button_style(); - if (imgui.bbl_button(_L("OK")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Enter))) { - m_show_custom_gcode_window = false; - add_custom_gcode(m_custom_gcode); - move_to_center = true; - set_focus = true; - } - imgui.pop_confirm_button_style(); + ImGui::NewLine(); + ImGui::SameLine(ImGui::GetStyle().WindowPadding.x * 14); + imgui.push_confirm_button_style(); - ImGui::SameLine(); - imgui.push_cancel_button_style(); - if (imgui.bbl_button(_L("Cancel")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Escape))) { - m_show_custom_gcode_window = false; - move_to_center = true; - set_focus = true; - } - imgui.pop_cancel_button_style(); + bool disable_button = false; + if (strlen(m_custom_gcode) == 0) + disable_button = true; + if (disable_button) { + ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); + imgui.push_button_disable_style(); + } + if (imgui.bbl_button(_L("OK"))) { + add_custom_gcode(m_custom_gcode); + m_show_custom_gcode_window = false; + ImGui::CloseCurrentPopup(); + set_focus = true; + } + if (disable_button) { + ImGui::PopItemFlag(); + imgui.pop_button_disable_style(); + } + imgui.pop_confirm_button_style(); - imgui.end(); - ImGui::PopStyleVar(3); - imgui.pop_common_window_style(); + ImGui::SameLine(); + imgui.push_cancel_button_style(); + if (imgui.bbl_button(_L("Cancel")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Escape))) { + m_show_custom_gcode_window = false; + ImGui::CloseCurrentPopup(); + set_focus = true; + } + imgui.pop_cancel_button_style(); + + ImGui::EndPopup(); + } + ImGui::PopStyleVar(4); + ImGui::PopStyleColor(); + imgui.pop_menu_style(); } void IMSlider::do_go_to_layer(size_t layer_number) { @@ -1342,87 +1043,90 @@ void IMSlider::do_go_to_layer(size_t layer_number) { GetSelection() == ssLower ? SetLowerValue(layer_number) : SetHigherValue(layer_number); } -void IMSlider::render_go_to_layer_dialog(){ - if (!m_show_go_to_layer_dialog) - return; - ImGuiWrapper& imgui = *wxGetApp().imgui(); - static bool move_to_center = true; - static bool set_focus = true; - if (move_to_center) { - auto pos_x = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_width() / 2; - auto pos_y = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_height() / 2; - imgui.set_next_window_pos(pos_x, pos_y, ImGuiCond_Always, 0.5f, 0.5f); - move_to_center = false; - } +void IMSlider::render_go_to_layer_dialog() +{ + if (m_show_go_to_layer_dialog) + ImGui::OpenPopup((_u8L("Jump to layer")).c_str()); - imgui.push_common_window_style(m_scale); + ImGuiWrapper& imgui = *wxGetApp().imgui(); + ImVec2 center = ImGui::GetMainViewport()->GetCenter(); + ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); + static bool set_focus = true; + + imgui.push_menu_style(m_scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20, 10) * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 12.f * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10, 3) * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10, 7) * m_scale); + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, m_is_dark ? ImVec4(54 / 255.0f, 54 / 255.0f, 60 / 255.0f, 1.00f) : ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); + ImGui::GetCurrentContext()->DimBgRatio = 1.0f; int windows_flag = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse; - imgui.begin(_u8L("Jump to layer"), windows_flag); - imgui.text(_u8L("Please enter the layer number") + " (" + std::to_string(m_min_value + 1) + " - " + std::to_string(m_max_value + 1) + "):"); - if (ImGui::IsMouseClicked(0)) { - set_focus = false; - } - if (set_focus && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0)) { - ImGui::SetKeyboardFocusHere(0); - } - ImGui::InputText("##input_layer_number", m_layer_number, sizeof(m_layer_number)); + if (ImGui::BeginPopupModal((_u8L("Jump to layer")).c_str(), NULL, windows_flag)) + { + imgui.text(_u8L("Please enter the layer number") + " (" + std::to_string(m_min_value + 1) + " - " + std::to_string(m_max_value + 1) + "):"); + if (ImGui::IsMouseClicked(0)) { + set_focus = false; + } + if (set_focus && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0)) { + wxGetApp().plater()->get_current_canvas3D()->force_set_focus(); + ImGui::SetKeyboardFocusHere(0); + } + ImGui::InputText("##input_layer_number", m_layer_number, sizeof(m_layer_number)); - ImGui::NewLine(); - ImGui::SameLine(GImGui->Style.WindowPadding.x * 8); - imgui.push_confirm_button_style(); - bool disable_button = false; - if (strlen(m_layer_number) == 0) - disable_button = true; - else { - for (size_t i = 0; i< strlen(m_layer_number); i++) - if (!isdigit(m_layer_number[i])) - disable_button = true; - if (!disable_button && (m_min_value > atoi(m_layer_number) - 1 || atoi(m_layer_number) - 1 > m_max_value)) + ImGui::NewLine(); + ImGui::SameLine(GImGui->Style.WindowPadding.x * 8); + imgui.push_confirm_button_style(); + bool disable_button = false; + if (strlen(m_layer_number) == 0) disable_button = true; - } - if (disable_button) { - ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); - imgui.push_button_disable_style(); - } - if (imgui.bbl_button(_L("OK")) || (!disable_button && ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Enter)))) { - do_go_to_layer(atoi(m_layer_number) - 1); - m_show_go_to_layer_dialog = false; - move_to_center = true; - set_focus = true; - } - if (disable_button) { - ImGui::PopItemFlag(); - imgui.pop_button_disable_style(); - } - imgui.pop_confirm_button_style(); + else { + for (size_t i = 0; i < strlen(m_layer_number); i++) + if (!isdigit(m_layer_number[i])) + disable_button = true; + if (!disable_button && (m_min_value > atoi(m_layer_number) - 1 || atoi(m_layer_number) - 1 > m_max_value)) + disable_button = true; + } + if (disable_button) { + ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); + imgui.push_button_disable_style(); + } + if (imgui.bbl_button(_L("OK")) || (!disable_button && ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Enter)))) { + do_go_to_layer(atoi(m_layer_number) - 1); + m_show_go_to_layer_dialog = false; + ImGui::CloseCurrentPopup(); + set_focus = true; + } + if (disable_button) { + ImGui::PopItemFlag(); + imgui.pop_button_disable_style(); + } + imgui.pop_confirm_button_style(); - ImGui::SameLine(); - imgui.push_cancel_button_style(); - if (imgui.bbl_button(_L("Cancel")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Escape))) { - m_show_go_to_layer_dialog = false; - move_to_center = true; - set_focus = true; - } - imgui.pop_cancel_button_style(); + ImGui::SameLine(); + imgui.push_cancel_button_style(); + if (imgui.bbl_button(_L("Cancel")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Escape))) { + m_show_go_to_layer_dialog = false; + ImGui::CloseCurrentPopup(); + set_focus = true; + } + imgui.pop_cancel_button_style(); - imgui.end(); - ImGui::PopStyleVar(3); - imgui.pop_common_window_style(); + ImGui::EndPopup(); + } + ImGui::PopStyleVar(4); + ImGui::PopStyleColor(); + imgui.pop_menu_style(); } void IMSlider::render_menu() { ImGuiWrapper::push_menu_style(m_scale); - std::vector colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - int extruder_num = colors.size(); + int extruder_num = m_extruder_colors.size(); if (m_show_menu) { ImGui::OpenPopup("slider_menu_popup"); @@ -1430,22 +1134,23 @@ void IMSlider::render_menu() ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_ChildRounding, 4.0f * m_scale); if (ImGui::BeginPopup("slider_menu_popup")) { - if ((m_selection == ssLower && GetLowerValueD() == m_zero_layer_height) || (m_selection == ssHigher && GetHigherValueD() == m_zero_layer_height)) + bool menu_item_enable = m_draw_mode != dmSequentialFffPrint; + //if ((m_selection == ssLower && GetLowerValueD() == m_zero_layer_height) || (m_selection == ssHigher && GetHigherValueD() == m_zero_layer_height)) + //{ + // if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) { + // m_show_go_to_layer_dialog = true; + // } + //} + //else { - if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) { - m_show_go_to_layer_dialog = true; - } - } - else - { - if (menu_item_with_icon(_u8L("Add Pause").c_str(), "")) { + if (menu_item_with_icon(_u8L("Add Pause").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { add_code_as_tick(PausePrint); } - if (menu_item_with_icon(_u8L("Add Custom G-code").c_str(), "")) { + if (menu_item_with_icon(_u8L("Add Custom G-code").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { m_show_custom_gcode_window = true; } if (!gcode(Template).empty()) { - if (menu_item_with_icon(_u8L("Add Custom Template").c_str(), "")) { + if (menu_item_with_icon(_u8L("Add Custom Template").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { add_code_as_tick(Template); } } @@ -1456,12 +1161,12 @@ void IMSlider::render_menu() //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { - if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { + if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint || m_is_spiral_vase) { begin_menu(_u8L("Change Filament").c_str(), false); } else if (begin_menu(_u8L("Change Filament").c_str())) { for (int i = 0; i < extruder_num; i++) { - std::array rgba = decode_color_to_float_array(colors[i]); + std::array rgba = decode_color_to_float_array(m_extruder_colors[i]); ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr)) add_code_as_tick(ToolChange, i + 1); } @@ -1473,6 +1178,9 @@ void IMSlider::render_menu() ImGui::PopStyleVar(1); ImGuiWrapper::pop_menu_style(); + + render_input_custom_gcode(); + render_go_to_layer_dialog(); } void IMSlider::on_change_color_mode(bool is_dark) { diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index 73b36c43cb..7d1e10c6c1 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -1,16 +1,9 @@ #ifndef slic3r_GUI_IMSlider_hpp_ #define slic3r_GUI_IMSlider_hpp_ -#include "libslic3r/CustomGCode.hpp" -#include "wxExtensions.hpp" -#include "IMSlider_Utils.hpp" +#include "TickCode.hpp" #include -#include -#include -#include -#include -#include #include class wxMenu; @@ -43,42 +36,6 @@ enum SelectedSlider { ssHigher = 2 }; -enum FocusedItem { - fiNone, - fiRevertIcon, - fiOneLayerIcon, - fiCogIcon, - fiColorBand, - fiActionIcon, - fiLowerThumb, - fiHigherThumb, - fiSmartWipeTower, - fiTick -}; - -enum ConflictType -{ - ctNone, - ctModeConflict, - ctMeaninglessColorChange, - ctMeaninglessToolChange, - ctRedundant -}; - -enum MouseAction -{ - maNone, - maAddMenu, // show "Add" context menu for NOTexist active tick - maEditMenu, // show "Edit" context menu for exist active tick - maCogIconMenu, // show context for "cog" icon - maForceColorEdit, // force color editing from colored band - maAddTick, // force tick adding - maDeleteTick, // force tick deleting - maCogIconClick, // LeftMouseClick on "cog" icon - maOneLayerIconClick, // LeftMouseClick on "one_layer" icon - maRevertIconClick, // LeftMouseClick on "revert" icon -}; - enum DrawMode { dmRegular, @@ -94,116 +51,6 @@ enum LabelType ltEstimatedTime, }; -enum VSliderMode -{ - Regular, - Colored, -}; - -struct TickCode -{ - bool operator<(const TickCode& other) const { return other.tick > this->tick; } - bool operator>(const TickCode& other) const { return other.tick < this->tick; } - - int tick = 0; - Type type = ColorChange; - int extruder = 0; - std::string color; - std::string extra; -}; - -class TickCodeInfo -{ - std::string custom_gcode; - std::string pause_print_msg; - bool m_suppress_plus = false; - bool m_suppress_minus = false; - bool m_use_default_colors= false; -// int m_default_color_idx = 0; - - std::vector* m_colors {nullptr}; - ColorGenerator color_generator; - - std::string get_color_for_tick(TickCode tick, Type type, const int extruder); - -public: - std::set ticks {}; - Mode mode = Undef; - - bool empty() const { return ticks.empty(); } - void set_pause_print_msg(const std::string& message) { pause_print_msg = message; } - - bool add_tick(const int tick, Type type, int extruder, double print_z); - bool edit_tick(std::set::iterator it, double print_z); - void switch_code(Type type_from, Type type_to); - bool switch_code_for_tick(std::set::iterator it, Type type_to, const int extruder); - void erase_all_ticks_with_code(Type type); - - bool has_tick_with_code(Type type); - bool has_tick(int tick); - ConflictType is_conflict_tick(const TickCode& tick, Mode out_mode, int only_extruder, double print_z); - - // Get used extruders for tick. - // Means all extruders(tools) which will be used during printing from current tick to the end - std::set get_used_extruders_for_tick(int tick, int only_extruder, double print_z, Mode force_mode = Undef) const; - - void suppress_plus (bool suppress) { m_suppress_plus = suppress; } - void suppress_minus(bool suppress) { m_suppress_minus = suppress; } - bool suppressed_plus () { return m_suppress_plus; } - bool suppressed_minus() { return m_suppress_minus; } - void set_default_colors(bool default_colors_on) { m_use_default_colors = default_colors_on; } - - void set_extruder_colors(std::vector* extruder_colors) { m_colors = extruder_colors; } -}; - - -struct ExtrudersSequence -{ - bool is_mm_intervals = true; - double interval_by_mm = 3.0; - int interval_by_layers = 10; - bool random_sequence { false }; - bool color_repetition { false }; - std::vector extruders = { 0 }; - - bool operator==(const ExtrudersSequence& other) const - { - return (other.is_mm_intervals == this->is_mm_intervals ) && - (other.interval_by_mm == this->interval_by_mm ) && - (other.interval_by_layers == this->interval_by_layers ) && - (other.random_sequence == this->random_sequence ) && - (other.color_repetition == this->color_repetition ) && - (other.extruders == this->extruders ) ; - } - bool operator!=(const ExtrudersSequence& other) const - { - return (other.is_mm_intervals != this->is_mm_intervals ) || - (other.interval_by_mm != this->interval_by_mm ) || - (other.interval_by_layers != this->interval_by_layers ) || - (other.random_sequence != this->random_sequence ) || - (other.color_repetition != this->color_repetition ) || - (other.extruders != this->extruders ) ; - } - - void add_extruder(size_t pos, size_t extruder_id = size_t(0)) - { - extruders.insert(extruders.begin() + pos+1, extruder_id); - } - - void delete_extruder(size_t pos) - { - if (extruders.size() == 1) - return;// last item can't be deleted - extruders.erase(extruders.begin() + pos); - } - - void init(size_t extruders_count) - { - extruders.clear(); - for (size_t extruder = 0; extruder < extruders_count; extruder++) - extruders.push_back(extruder); - } -}; class IMSlider { @@ -262,7 +109,7 @@ public: void UseDefaultColors(bool def_colors_on) { m_ticks.set_default_colors(def_colors_on); } void on_mouse_wheel(wxMouseEvent& evt); - void post_ticks_changed_event(Type type = Custom); + void post_ticks_changed_event(Type type = Unknown); bool check_ticks_changed_event(Type type); bool switch_one_layer_mode(); void show_go_to_layer(bool show) { m_show_go_to_layer_dialog = show; } @@ -279,7 +126,6 @@ public: } Type get_post_tick_event_type() { return m_tick_change_event_type; } - ExtrudersSequence m_extruders_sequence; float m_scale = 1.0; void set_scale(float scale = 1.0); void on_change_color_mode(bool is_dark); @@ -290,16 +136,16 @@ protected: void do_go_to_layer(size_t layer_number); void correct_lower_value(); void correct_higher_value(); - bool horizontal_slider(const char* str_id, int* v, int v_min, int v_max, const ImVec2& pos, const ImVec2& size, float scale = 1.0); + bool horizontal_slider(const char* str_id, int* v, int v_min, int v_max, const ImVec2& size, float scale = 1.0); void render_go_to_layer_dialog(); void render_input_custom_gcode(); void render_menu(); - void draw_background(const ImRect& groove); + void draw_background_and_groove(const ImRect& bg_rect, const ImRect& groove); void draw_colored_band(const ImRect& groove, const ImRect& slideable_region); void draw_ticks(const ImRect& slideable_region); bool vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label, - int v_min, int v_max, const ImVec2& pos, const ImVec2& size, + int v_min, int v_max, const ImVec2& size, SelectedSlider& selection, bool one_layer_flag = false, float scale = 1.0f); bool is_wipe_tower_layer(int tick) const; @@ -340,6 +186,7 @@ private: bool m_enable_action_icon = true; bool m_enable_cog_icon = false; bool m_is_wipe_tower = false; // This flag indicates that there is multiple extruder print with wipe tower + bool m_is_spiral_vase = false; bool m_display_lower = true; bool m_display_higher = true; int m_selected_tick_value = -1; @@ -362,7 +209,6 @@ private: DrawMode m_draw_mode = dmRegular; Mode m_mode = SingleExtruder; - VSliderMode m_vslider_mode = Regular; int m_only_extruder = -1; long m_style; diff --git a/src/slic3r/GUI/IMToolbar.cpp b/src/slic3r/GUI/IMToolbar.cpp index f1d3481f3d..e14cdb2ffc 100644 --- a/src/slic3r/GUI/IMToolbar.cpp +++ b/src/slic3r/GUI/IMToolbar.cpp @@ -52,6 +52,11 @@ void IMToolbar::del_all_item() m_items.clear(); } +void IMToolbar::del_stats_item() +{ + delete m_all_plates_stats_item; + m_all_plates_stats_item = nullptr; +} bool IMReturnToolbar::init() { diff --git a/src/slic3r/GUI/IMToolbar.hpp b/src/slic3r/GUI/IMToolbar.hpp index c30b2e6ef0..681045fdb8 100644 --- a/src/slic3r/GUI/IMToolbar.hpp +++ b/src/slic3r/GUI/IMToolbar.hpp @@ -27,10 +27,11 @@ public: bool selected{ false }; float percent; - ImTextureID texture_id { 0 }; GLTexture image_texture; + GLTexture image_texture_transparent; SliceState slice_state; + ImTextureID texture_id { 0 }; std::vector image_data; unsigned int image_width; unsigned int image_height; @@ -47,6 +48,7 @@ public: float icon_width; float icon_height; bool is_display_scrollbar; + bool show_stats_item{ false }; IMToolbar() { icon_width = DEFAULT_TOOLBAR_BUTTON_WIDTH; @@ -54,7 +56,9 @@ public: } void del_all_item(); + void del_stats_item(); + IMToolbarItem* m_all_plates_stats_item = nullptr; std::vector m_items; float fontScale; diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 3f5d2a4ba0..547f718c5e 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -82,6 +82,8 @@ static const std::map font_icons = { {ImGui::GapFillDarkIcon , "gap_fill_dark" }, {ImGui::SphereButtonDarkIcon , "toolbar_modifier_sphere_dark" }, + {ImGui::TextSearchIcon , "im_text_search" }, + {ImGui::TextSearchCloseIcon , "im_text_search_close" }, }; static const std::map font_icons_large = { {ImGui::CloseNotifButton , "notification_close" }, @@ -542,6 +544,123 @@ void ImGuiWrapper::set_next_window_size(float x, float y, ImGuiCond cond) } /* BBL style widgets */ +bool ImGuiWrapper::bbl_combo_with_filter(const char* label, const std::string& preview_value, const std::vector& all_items, std::vector* filtered_items_idx, bool* is_filtered, float item_height) +{ + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + ImGuiWindow* window = ImGui::GetCurrentWindow(); + if (window->SkipItems) + return false; + + static char pattern_buffer[256] = { 0 }; + auto simple_match = [](const char* pattern, const char* str) { + wxString sub_str = wxString(pattern).Lower(); + wxString main_str = wxString(str).Lower(); + return main_str.Find(sub_str); + }; + + bool is_filtering = false; + bool is_new_open = false; + + float sz = ImGui::GetFrameHeight(); + ImVec2 arrow_size(sz, sz); + ImVec2 CursorPos = window->DC.CursorPos; + const ImRect arrow_bb(CursorPos, CursorPos + arrow_size); + + float ButtonTextAlignX = g.Style.ButtonTextAlign.x; + g.Style.ButtonTextAlign.x = 0; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { sz, style.FramePadding.y}); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered)); + if (button(preview_value + label, ImGui::CalcItemWidth(), 0)) + { + ImGui::OpenPopup(label); + is_new_open = true; + } + g.Style.ButtonTextAlign.x = ButtonTextAlignX; + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); + ImGui::BBLRenderArrow(window->DrawList, arrow_bb.Min + ImVec2(ImMax(0.0f, (arrow_size.x - g.FontSize) * 0.5f), ImMax(0.0f, (arrow_size.y - g.FontSize) * 0.5f)), ImGui::GetColorU32(ImGuiCol_Text), ImGuiDir_Down); + + if (is_new_open) + memset(pattern_buffer, 0, IM_ARRAYSIZE(pattern_buffer)); + + float item_rect_width = ImGui::GetItemRectSize().x; + float item_rect_height = item_height ? item_height : ImGui::GetItemRectSize().y; + ImGui::SetNextWindowPos({ CursorPos.x, ImGui::GetItemRectMax().y + 4 * m_style_scaling }); + ImGui::SetNextWindowSize({ item_rect_width, 0 }); + if (ImGui::BeginPopup(label)) + { + ImGuiWindow* popup_window = ImGui::GetCurrentWindow(); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(8.0f * m_style_scaling, item_rect_height - g.FontSize) * 0.5f); + wchar_t ICON_SEARCH = *pattern_buffer != '\0' ? ImGui::TextSearchCloseIcon : ImGui::TextSearchIcon; + const ImVec2 label_size = ImGui::CalcTextSize(into_u8(ICON_SEARCH).c_str(), nullptr, true); + const ImVec2 search_icon_pos(ImGui::GetItemRectMax().x - label_size.x, popup_window->DC.CursorPos.y + style.FramePadding.y); + ImGui::RenderText(search_icon_pos, into_u8(ICON_SEARCH).c_str()); + + auto temp = popup_window->DC.CursorPos; + popup_window->DC.CursorPos = search_icon_pos; + ImGui::PushStyleColor(ImGuiCol_Button, {0, 0, 0, 0}); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImGui::GetStyleColorVec4(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGui::GetStyleColorVec4(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGui::GetStyleColorVec4(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_Border, { 0, 0, 0, 0 }); + if (button("##invisible_clear_button", label_size.x, label_size.y)) + { + if (*pattern_buffer != '\0') + memset(pattern_buffer, 0, IM_ARRAYSIZE(pattern_buffer)); + } + ImGui::PopStyleColor(5); + popup_window->DC.CursorPos = temp; + + + ImGui::PushItemWidth(item_rect_width); + if (is_new_open) + ImGui::SetKeyboardFocusHere(); + ImGui::InputText("##bbl_combo_with_filter_inputText", pattern_buffer, sizeof(pattern_buffer)); + ImGui::PopItemWidth(); + ImGui::PopStyleVar(); + + if (*pattern_buffer != '\0') + is_filtering = true; + + if (is_filtering) + { + std::vector > filtered_items_with_priority;// std::pair + for (int i = 0; i < all_items.size(); i++) + { + int priority = simple_match(pattern_buffer, all_items[i].c_str()); + if (priority != wxNOT_FOUND) + filtered_items_with_priority.push_back({ i, priority }); + } + std::sort(filtered_items_with_priority.begin(), filtered_items_with_priority.end(), [](const std::pair& a, const std::pair& b) {return (b.second > a.second); }); + for (auto item : filtered_items_with_priority) + { + filtered_items_idx->push_back(item.first); + } + } + + *is_filtered = is_filtering; + + popup_window->DC.CursorPos.y -= 1 * m_style_scaling; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(1.0f, 1.0f) * m_style_scaling); + if (ImGui::BeginListBox("##bbl_combo_with_filter_listBox", { item_rect_width, item_rect_height * 7.75f})) { + ImGui::PopStyleVar(2); + return true; + } + else + { + ImGui::PopStyleVar(2); + ImGui::EndPopup(); + return false; + } + } + else + return false; +} + bool ImGuiWrapper::bbl_input_double(const wxString& label, const double& value, const std::string& format) { //return ImGui::InputDouble(label.c_str(), const_cast(&value), 0.0f, 0.0f, format.c_str(), ImGuiInputTextFlags_CharsDecimal); @@ -1636,7 +1755,7 @@ static const ImWchar ranges_keyboard_shortcuts[] = #endif // __APPLE__ -std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height) +std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height, unsigned *outwidth, unsigned *outheight) { std::vector empty_vector; @@ -1667,6 +1786,9 @@ std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name ::nsvgDeleteRasterizer(rast); ::nsvgDelete(image); + *outwidth = width; + *outheight = height; + return data; } @@ -1951,11 +2073,12 @@ void ImGuiWrapper::init_font(bool compress) if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) { assert(rect->Width == icon_sz); assert(rect->Height == icon_sz); - std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz); + unsigned outwidth, outheight; + std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz, &outwidth, &outheight); const ImU32* pIn = (ImU32*)raw_data.data(); - for (int y = 0; y < icon_sz; y++) { + for (unsigned y = 0; y < outheight; y++) { ImU32* pOut = (ImU32*)pixels + (rect->Y + y) * width + (rect->X); - for (int x = 0; x < icon_sz; x++) + for (unsigned x = 0; x < outwidth; x++) *pOut++ = *pIn++; } } @@ -1967,11 +2090,12 @@ void ImGuiWrapper::init_font(bool compress) if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) { assert(rect->Width == icon_sz); assert(rect->Height == icon_sz); - std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz); + unsigned outwidth, outheight; + std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz, &outwidth, &outheight); const ImU32* pIn = (ImU32*)raw_data.data(); - for (int y = 0; y < icon_sz; y++) { + for (unsigned y = 0; y < outheight; y++) { ImU32* pOut = (ImU32*)pixels + (rect->Y + y) * width + (rect->X); - for (int x = 0; x < icon_sz; x++) + for (unsigned x = 0; x < outwidth; x++) *pOut++ = *pIn++; } } @@ -1983,11 +2107,12 @@ void ImGuiWrapper::init_font(bool compress) if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) { assert(rect->Width == icon_sz); assert(rect->Height == icon_sz); - std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz); + unsigned outwidth, outheight; + std::vector raw_data = load_svg(icon.second, icon_sz, icon_sz, &outwidth, &outheight); const ImU32* pIn = (ImU32*)raw_data.data(); - for (int y = 0; y < icon_sz; y++) { + for (unsigned y = 0; y < outheight; y++) { ImU32* pOut = (ImU32*)pixels + (rect->Y + y) * width + (rect->X); - for (int x = 0; x < icon_sz; x++) + for (unsigned x = 0; x < outwidth; x++) *pOut++ = *pIn++; } } diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 6b584a60c0..001f9bea49 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -99,6 +99,7 @@ public: void set_next_window_size(float x, float y, ImGuiCond cond); /* BBL style widgets */ + bool bbl_combo_with_filter(const char* label, const std::string& preview_value, const std::vector& all_items, std::vector* filtered_items_idx, bool* is_filtered, float item_height = 0.0f); bool bbl_input_double(const wxString &label, const double &value, const std::string &format = "%0.2f"); bool bbl_slider_float(const std::string &label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f, bool clamp = true, const wxString& tooltip = {}); bool bbl_slider_float_style(const std::string &label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f, bool clamp = true, const wxString& tooltip = {}); @@ -223,7 +224,7 @@ private: void render_draw_data(ImDrawData *draw_data); bool display_initialized() const; void destroy_font(); - std::vector load_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height); + std::vector load_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height, unsigned *outwidth, unsigned *outheight); static const char* clipboard_get(void* user_data); static void clipboard_set(void* user_data, const char* text); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 187e1dc270..9b81736a66 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -335,6 +335,7 @@ void ArrangeJob::prepare_partplate() { return; } + params.is_seq_print = plate->get_real_print_seq() == PrintSequence::ByObject; Model& model = m_plater->model(); // Go through the objects and check if inside the selection diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index a989023a1f..ea56483f34 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -34,6 +34,12 @@ PrintJob::PrintJob(std::shared_ptr pri, Plater* plater, std:: void PrintJob::prepare() { m_plater->get_print_job_data(&job_data); + if (&job_data) { + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); + } } void PrintJob::on_exception(const std::exception_ptr &eptr) @@ -53,53 +59,60 @@ void PrintJob::on_success(std::function success) wxString PrintJob::get_http_error_msg(unsigned int status, std::string body) { - int code = 0; - std::string error; - std::string message; - wxString result; - if (status >= 400 && status < 500) - try { - json j = json::parse(body); - if (j.contains("code")) { - if (!j["code"].is_null()) - code = j["code"].get(); + try { + int code = 0; + std::string error; + std::string message; + wxString result; + if (status >= 400 && status < 500) + try { + json j = json::parse(body); + if (j.contains("code")) { + if (!j["code"].is_null()) + code = j["code"].get(); + } + if (j.contains("error")) { + if (!j["error"].is_null()) + error = j["error"].get(); + } + if (j.contains("message")) { + if (!j["message"].is_null()) + message = j["message"].get(); + } + switch (status) { + ; + } } - if (j.contains("error")) { - if (!j["error"].is_null()) - error = j["error"].get(); - } - if (j.contains("message")) { - if (!j["message"].is_null()) - message = j["message"].get(); - } - switch (status) { + catch (...) { ; } - } - catch (...) { + else if (status == 503) { + return _L("Service Unavailable"); + } + else { + wxString unkown_text = _L("Unkown Error."); + unkown_text += wxString::Format("status=%u, body=%s", status, body); + BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error; + return unkown_text; + } + + BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error; + + result = wxString::Format("code=%u, error=%s", code, from_u8(error)); + return result; + } catch(...) { ; } - else if (status == 503) { - return _L("Service Unavailable"); - } - else { - wxString unkown_text = _L("Unkown Error."); - unkown_text += wxString::Format("status=%u, body=%s", status, body); - BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error; - return unkown_text; - } - - BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error; - - result = wxString::Format("code=%u, error=%s", code, from_u8(error)); - return result; -} + return wxEmptyString; +} void PrintJob::process() { /* display info */ wxString msg; int curr_percent = 10; + NetworkAgent* m_agent = wxGetApp().getAgent(); + AppConfig* config = wxGetApp().app_config; if (this->connection_type == "lan") { msg = _L("Sending print job over LAN"); @@ -144,8 +157,34 @@ void PrintJob::process() else curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + BBL::PrintParams params; + + // local print access + params.dev_ip = m_dev_ip; + params.use_ssl = m_local_use_ssl; + params.username = "bblp"; + params.password = m_access_code; + + + // check access code and ip address + if (this->connection_type == "lan") { + params.dev_id = m_dev_id; + params.project_name = "verify_job"; + params.filename = job_data._temp_path.string(); + params.connection_type = this->connection_type; + + result = m_agent->start_send_gcode_to_sdcard(params, nullptr, nullptr); + if (result != 0) { + BOOST_LOG_TRIVIAL(error) << "access code is invalid"; + m_enter_ip_address_fun_fail(); + m_job_finished = true; + return; + } + } + params.dev_id = m_dev_id; + params.ftp_folder = m_ftp_folder; //params.project_name = project_name; params.project_name = m_project_name; params.preset_name = wxGetApp().preset_bundle->prints.get_selected_preset_name(); @@ -161,12 +200,24 @@ void PrintJob::process() params.ams_mapping_info = this->task_ams_mapping_info; params.connection_type = this->connection_type; params.task_use_ams = this->task_use_ams; + if (wxGetApp().model().model_info && wxGetApp().model().model_info.get()) { + ModelInfo* model_info = wxGetApp().model().model_info.get(); + auto origin_profile_id = model_info->metadata_items.find(BBL_DESIGNER_PROFILE_ID_TAG); + if (origin_profile_id != model_info->metadata_items.end()) { + try { + params.origin_profile_id = stoi(origin_profile_id->second.c_str()); + } + catch(...) {} + } + auto origin_model_id = model_info->metadata_items.find(BBL_DESIGNER_MODEL_ID_TAG); + if (origin_model_id != model_info->metadata_items.end()) { + try { + params.origin_model_id = origin_model_id->second; + } + catch(...) {} + } + } - // local print access - params.dev_ip = m_dev_ip; - params.use_ssl = m_local_use_ssl; - params.username = "bblp"; - params.password = m_access_code; wxString error_text; wxString msg_text; @@ -247,9 +298,6 @@ void PrintJob::process() return was_canceled(); }; - - NetworkAgent* m_agent = wxGetApp().getAgent(); - if (params.connection_type != "lan") { if (params.dev_ip.empty()) params.comments = "no_ip"; @@ -260,32 +308,56 @@ void PrintJob::process() else if (params.password.empty()) params.comments = "no_password"; - if (!this->cloud_print_only - && !params.password.empty() - && !params.dev_ip.empty() - && this->has_sdcard) { - // try to send local with record - BOOST_LOG_TRIVIAL(info) << "print_job: try to start local print with record"; - this->update_status(curr_percent, _L("Sending print job over LAN")); - result = m_agent->start_local_print_with_record(params, update_fn, cancel_fn); - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - params.comments = "wrong_code"; - } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { - params.comments = "upload_failed"; - } else { - params.comments = (boost::format("failed(%1%)") % result).str(); + + //use ftp only + if (!wxGetApp().app_config->get("lan_mode_only").empty() && wxGetApp().app_config->get("lan_mode_only") == "1") { + + if (params.password.empty() || params.dev_ip.empty()) { + error_text = wxString::Format("Access code:%s Ip address:%s", params.password, params.dev_ip); + result = BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED; } - if (result < 0) { - // try to send with cloud - BOOST_LOG_TRIVIAL(warning) << "print_job: try to send with cloud"; + else { + BOOST_LOG_TRIVIAL(info) << "print_job: use ftp send print only"; + this->update_status(curr_percent, _L("Sending print job over LAN")); + result = m_agent->start_local_print_with_record(params, update_fn, cancel_fn); + if (result < 0) { + error_text = wxString::Format("Access code:%s Ip address:%s", params.password, params.dev_ip); + // try to send with cloud + BOOST_LOG_TRIVIAL(warning) << "print_job: use ftp send print failed"; + } + } + } + else { + if (!this->cloud_print_only + && !params.password.empty() + && !params.dev_ip.empty() + && this->has_sdcard) { + // try to send local with record + BOOST_LOG_TRIVIAL(info) << "print_job: try to start local print with record"; + this->update_status(curr_percent, _L("Sending print job over LAN")); + result = m_agent->start_local_print_with_record(params, update_fn, cancel_fn); + if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { + params.comments = "wrong_code"; + } + else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { + params.comments = "upload_failed"; + } + else { + params.comments = (boost::format("failed(%1%)") % result).str(); + } + if (result < 0) { + // try to send with cloud + BOOST_LOG_TRIVIAL(warning) << "print_job: try to send with cloud"; + this->update_status(curr_percent, _L("Sending print job through cloud service")); + result = m_agent->start_print(params, update_fn, cancel_fn); + } + } + else { + BOOST_LOG_TRIVIAL(info) << "print_job: send with cloud"; this->update_status(curr_percent, _L("Sending print job through cloud service")); result = m_agent->start_print(params, update_fn, cancel_fn); } - } else { - BOOST_LOG_TRIVIAL(info) << "print_job: send with cloud"; - this->update_status(curr_percent, _L("Sending print job through cloud service")); - result = m_agent->start_print(params, update_fn, cancel_fn); - } + } } else { if (this->has_sdcard) { this->update_status(curr_percent, _L("Sending print job over LAN")); @@ -344,4 +416,14 @@ void PrintJob::set_project_name(std::string name) m_project_name = name; } +void PrintJob::on_check_ip_address_fail(std::function func) +{ + m_enter_ip_address_fun_fail = func; +} + +void PrintJob::on_check_ip_address_success(std::function func) +{ + m_enter_ip_address_fun_success = func; +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Jobs/PrintJob.hpp b/src/slic3r/GUI/Jobs/PrintJob.hpp index 56aed8fa7c..588a6f84e4 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.hpp +++ b/src/slic3r/GUI/Jobs/PrintJob.hpp @@ -29,6 +29,8 @@ class PrintJob : public PlaterJob std::string m_dev_id; bool m_job_finished{ false }; int m_print_job_completed_id = 0; + std::function m_enter_ip_address_fun_fail{ nullptr }; + std::function m_enter_ip_address_fun_success{ nullptr }; protected: @@ -40,6 +42,7 @@ public: std::string m_project_name; std::string m_dev_ip; + std::string m_ftp_folder; bool m_local_use_ssl { true }; std::string m_access_code; std::string task_bed_type; @@ -78,6 +81,8 @@ public: void process() override; void finalize() override; void set_project_name(std::string name); + void on_check_ip_address_fail(std::function func); + void on_check_ip_address_success(std::function func); }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index ebd4bce800..eb3a065dc2 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -18,6 +18,7 @@ static wxString file_over_size_str = _L("The print file exceeds the max static wxString print_canceled_str = _L("Task canceled"); static wxString upload_failed_str = _L("Failed uploading print file"); static wxString upload_login_failed_str = _L("Wrong Access code"); +static wxString upload_no_space_left_str = _L("No space left on Printer SD card"); static wxString sending_over_lan_str = _L("Sending gcode file over LAN"); @@ -39,7 +40,6 @@ void SendJob::prepare() BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; job_data._temp_path = fs::path(check_access_code_path); } - } void SendJob::on_exception(const std::exception_ptr &eptr) @@ -130,31 +130,33 @@ void SendJob::process() params.use_ssl = m_local_use_ssl; // check access code and ip address - if (m_is_check_mode) { - params.dev_id = m_dev_id; - params.project_name = "verify_job"; - params.filename = job_data._temp_path.string(); - params.connection_type = this->connection_type; + params.dev_id = m_dev_id; + params.project_name = "verify_job"; + params.filename = job_data._temp_path.string(); + params.connection_type = this->connection_type; - result = m_agent->start_send_gcode_to_sdcard(params, nullptr, nullptr); - if (result != 0) { - BOOST_LOG_TRIVIAL(error) << "access code is invalid"; - m_enter_ip_address_fun_fail(); - } - else { - m_enter_ip_address_fun_success(); - } + result = m_agent->start_send_gcode_to_sdcard(params, nullptr, nullptr); + if (result != 0) { + BOOST_LOG_TRIVIAL(error) << "access code is invalid"; + m_enter_ip_address_fun_fail(); m_job_finished = true; return; } - /* display info */ + else if(m_is_check_mode && !m_check_and_continue){ + m_enter_ip_address_fun_success(); + m_job_finished = true; + return; + } + - if (this->connection_type == "lan") { + /* display info */ + msg = _L("Sending gcode file over LAN"); + /* if (this->connection_type == "lan") { msg = _L("Sending gcode file over LAN"); } else { msg = _L("Sending gcode file through cloud service"); - } + }*/ int total_plate_num = m_plater->get_partplate_list().get_plate_count(); @@ -313,9 +315,11 @@ void SendJob::process() } if (result < 0) { - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { + if (result == BAMBU_NETWORK_ERR_NO_SPACE_LEFT_ON_DEVICE) { + msg_text = upload_no_space_left_str; + } else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { msg_text = upload_login_failed_str; - } if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) { + } else if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) { msg_text = file_is_not_exists_str; } else if (result == BAMBU_NETWORK_ERR_FILE_OVER_SIZE) { msg_text = file_over_size_str; diff --git a/src/slic3r/GUI/Jobs/SendJob.hpp b/src/slic3r/GUI/Jobs/SendJob.hpp index 6945ddcba2..e35b35bd41 100644 --- a/src/slic3r/GUI/Jobs/SendJob.hpp +++ b/src/slic3r/GUI/Jobs/SendJob.hpp @@ -21,6 +21,7 @@ class SendJob : public PlaterJob bool m_job_finished{ false }; int m_print_job_completed_id = 0; bool m_is_check_mode{false}; + bool m_check_and_continue{false}; std::function m_success_fun{nullptr}; std::function m_enter_ip_address_fun_fail{nullptr}; std::function m_enter_ip_address_fun_success{nullptr}; @@ -54,6 +55,7 @@ public: wxString get_http_error_msg(unsigned int status, std::string body); void set_check_mode() {m_is_check_mode = true;}; + void check_and_continue() {m_check_and_continue = true;}; bool is_finished() { return m_job_finished; } void process() override; void on_success(std::function success); diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 8d4bf8a71e..7e5b9b31cd 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -177,7 +177,13 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "S", L("Save Project") }, { ctrl + alt + "S", L("Save Project as") }, // File>Import - { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files.") }, + { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, + // File>Export + { ctrl + "G", L("Export plate sliced file")}, + // Slice plate + { ctrl + "R", L("Slice plate")}, + // Send to Print + { ctrl + "Shift" + "G", L("Print plate")}, // Edit { ctrl + "X", L("Cut") }, { ctrl + "C", L("Copy to clipboard") }, diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 204d632368..aa502e7ac5 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -72,9 +72,15 @@ namespace GUI { wxDEFINE_EVENT(EVT_SELECT_TAB, wxCommandEvent); wxDEFINE_EVENT(EVT_HTTP_ERROR, wxCommandEvent); wxDEFINE_EVENT(EVT_USER_LOGIN, wxCommandEvent); +wxDEFINE_EVENT(EVT_USER_LOGIN_HANDLE, wxCommandEvent); +wxDEFINE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); +wxDEFINE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDEFINE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); +wxDEFINE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); + + // BBS: backup wxDEFINE_EVENT(EVT_BACKUP_POST, wxCommandEvent); wxDEFINE_EVENT(EVT_LOAD_URL, wxCommandEvent); @@ -522,7 +528,19 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ } return;} #endif - if (evt.CmdDown() && evt.GetKeyCode() == 'J') { m_printhost_queue_dlg->Show(); return; } + if (evt.CmdDown() && evt.GetKeyCode() == 'R') { if (m_slice_enable) { wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_PLATE)); this->m_tabpanel->SetSelection(tpPreview); } return; } + if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'G') { + m_plater->apply_background_progress(); + m_print_enable = get_enable_print_status(); + m_print_btn->Enable(m_print_enable); + if (m_print_enable) { + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); + } + evt.Skip(); + return; + } + else if (evt.CmdDown() && evt.GetKeyCode() == 'G') { if (can_export_gcode()) { wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); } evt.Skip(); return; } + if (evt.CmdDown() && evt.GetKeyCode() == 'J') { m_printhost_queue_dlg->Show(); return; } if (evt.CmdDown() && evt.GetKeyCode() == 'N') { m_plater->new_project(); return;} if (evt.CmdDown() && evt.GetKeyCode() == 'O') { m_plater->load_project(); return;} if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'S') { if (can_save_as()) m_plater->save_project(true); return;} @@ -693,6 +711,8 @@ void MainFrame::update_layout() { // jump to 3deditor under preview_only mode if (evt.GetId() == tp3DEditor){ + m_plater->update(true); + if (!preview_only_hint()) return; } @@ -942,6 +962,7 @@ void MainFrame::init_tabpanel() } m_plater = new Plater(this, this); + m_plater->SetBackgroundColour(*wxWHITE); m_plater->Hide(); wxGetApp().plater_ = m_plater; @@ -1017,11 +1038,9 @@ bool MainFrame::preview_only_hint() preview_only_to_editor = true; }); confirm_dlg.update_btn_label(_L("Yes"), _L("No")); - auto filename = wxString((m_plater->get_preview_only_filename()).c_str(), wxConvUTF8); - //if size of filename is beyond limit - auto format_filename = confirm_dlg.format_text(filename, FromDIP(240)); + auto filename = m_plater->get_preview_only_filename(); - confirm_dlg.update_text(format_filename + _L(" will be closed before creating a new model. Do you want to continue?")); + confirm_dlg.update_text(filename + " " + _L("will be closed before creating a new model. Do you want to continue?")); confirm_dlg.on_show(); if (preview_only_to_editor) { m_plater->new_project(); @@ -1354,9 +1373,9 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_select = eSlicePlate; m_print_select = ePrintPlate; - m_slice_btn = new SideButton(this, _L("Slice"), ""); + m_slice_btn = new SideButton(this, _L("Slice plate"), ""); m_slice_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14)); - m_print_btn = new SideButton(this, _L("Print"), ""); + m_print_btn = new SideButton(this, _L("Print plate"), ""); m_print_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14)); update_side_button_style(); @@ -2108,12 +2127,12 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) m_plater->export_core_3mf(); }, "menu_export_sliced_file", nullptr, [this](){return can_export_model(); }, this); // BBS export .gcode.3mf - append_menu_item(export_menu, wxID_ANY, _L("Export plate sliced file") + dots/* + "\tCtrl+G"*/, _L("Export current sliced file"), + append_menu_item(export_menu, wxID_ANY, _L("Export plate sliced file") + dots + "\tCtrl+G", _L("Export current sliced file"), [this](wxCommandEvent&) { if (m_plater) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); }, "menu_export_sliced_file", nullptr, [this](){return can_export_gcode(); }, this); append_menu_item(export_menu, wxID_ANY, _L("Export all plate sliced file") + dots/* + "\tCtrl+G"*/, _L("Export all plate sliced file"), - [this](wxCommandEvent&) { if (m_plater) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); }, "menu_export_sliced_file", nullptr, + [this](wxCommandEvent&) { if (m_plater) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE)); }, "menu_export_sliced_file", nullptr, [this]() {return can_export_all_gcode(); }, this); append_menu_item(export_menu, wxID_ANY, _L("Export G-code") + dots/* + "\tCtrl+G"*/, _L("Export current plate as G-code"), @@ -2730,8 +2749,8 @@ struct ConfigsOverwriteConfirmDialog : MessageDialog { ConfigsOverwriteConfirmDialog(wxWindow *parent, wxString name, bool exported) : MessageDialog(parent, - wxString::Format(exported ? _("A file exists with the same name: %s, do you wan't to override it.") : - _("A config exists with the same name: %s, do you wan't to override it."), + wxString::Format(exported ? _L("A file exists with the same name: %s, do you want to override it.") : + _L("A config exists with the same name: %s, do you want to override it."), name), _L(exported ? "Overwrite file" : "Overwrite config"), wxYES_NO | wxNO_DEFAULT) @@ -3065,7 +3084,7 @@ void MainFrame::set_print_button_to_default(PrintSelectType select_type) m_print_btn->SetLabel(_L("Print")); m_print_select = eSendGcode; if (m_print_enable) - m_print_enable = get_enable_print_status(); + m_print_enable = get_enable_print_status() && can_send_gcode(); m_print_btn->Enable(m_print_enable); this->Layout(); } else { @@ -3293,7 +3312,7 @@ void MainFrame::on_select_default_preset(SimpleEvent& evt) { case wxID_YES: { wxGetApp().app_config->set_bool("sync_user_preset", true); - wxGetApp().start_sync_user_preset(true); + wxGetApp().start_sync_user_preset(true, true); break; } case wxID_NO: diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 28fc05508f..046849a7bc 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -386,9 +386,15 @@ public: wxDECLARE_EVENT(EVT_HTTP_ERROR, wxCommandEvent); wxDECLARE_EVENT(EVT_USER_LOGIN, wxCommandEvent); +wxDECLARE_EVENT(EVT_USER_LOGIN_HANDLE, wxCommandEvent); +wxDECLARE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); +wxDECLARE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDECLARE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); +wxDECLARE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); + + } // GUI } //Slic3r diff --git a/src/slic3r/GUI/MarkdownTip.cpp b/src/slic3r/GUI/MarkdownTip.cpp index f4c2b919f6..63eafd361b 100644 --- a/src/slic3r/GUI/MarkdownTip.cpp +++ b/src/slic3r/GUI/MarkdownTip.cpp @@ -81,16 +81,6 @@ MarkdownTip::MarkdownTip() _timer = new wxTimer; _timer->Bind(wxEVT_TIMER, &MarkdownTip::OnTimer, this); - - Bind(EVT_WEBVIEW_RECREATED, [this](auto &evt) { - Hide(); - _lastTip.clear(); -#ifdef __WXMSW__ - _tipView = dynamic_cast(evt.GetEventObject()); - GetSizer()->Add(_tipView, wxSizerFlags().Expand().Proportion(1)); - Layout(); -#endif - }); } MarkdownTip::~MarkdownTip() { delete _timer; } diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 04de02dc5e..2e88131df3 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -13,13 +13,9 @@ #include #ifdef __WIN32__ #include -#elif __APPLE__ +#else #include #include -#else -#include -#include /* For mode constants */ -#include /* For O_* constants */ #endif namespace Slic3r { @@ -31,6 +27,9 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w { SetBackgroundColour(*wxWHITE); m_media_ctrl->Bind(wxEVT_MEDIA_STATECHANGED, &MediaPlayCtrl::onStateChanged, this); +#if wxUSE_GSTREAMER_PLAYER + m_media_ctrl->Bind(wxEVT_MEDIA_LOADED, &MediaPlayCtrl::onStateChanged, this); +#endif m_button_play = new Button(this, "", "media_play", wxBORDER_NONE); m_button_play->SetCanFocus(false); @@ -87,7 +86,7 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj) m_lan_ip = obj->is_function_supported(PrinterFunction::FUNC_LOCAL_TUNNEL) ? obj->dev_ip : ""; m_lan_passwd = obj->is_function_supported(PrinterFunction::FUNC_LOCAL_TUNNEL) ? obj->get_access_code() : ""; m_tutk_support = obj->is_function_supported(PrinterFunction::FUNC_REMOTE_TUNNEL); - m_device_busy = obj->is_in_prepare(); + m_device_busy = obj->is_in_prepare() || obj->is_in_upgrading(); } else { m_camera_exists = false; m_lan_mode = false; @@ -141,8 +140,10 @@ void MediaPlayCtrl::Play() m_button_play->SetIcon("media_stop"); SetStatus(_L("Initializing...")); + NetworkAgent *agent = wxGetApp().getAgent(); + std::string agent_version = agent ? agent->get_version() : ""; if (!m_lan_ip.empty() && (!m_lan_mode || !m_lan_passwd.empty()) && !m_device_busy) { - m_url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; + m_url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd + "&device=" + m_machine + "&version=" + agent_version; m_last_state = MEDIASTATE_LOADING; SetStatus(_L("Loading...")); if (wxGetApp().app_config->get("dump_video") == "true") { @@ -182,9 +183,12 @@ void MediaPlayCtrl::Play() return; } - NetworkAgent* agent = wxGetApp().getAgent(); if (agent) { - agent->get_camera_url(m_machine, [this, m = m_machine](std::string url) { + agent->get_camera_url(m_machine, [this, m = m_machine, v = agent_version](std::string url) { + if (boost::algorithm::starts_with(url, "bambu:///")) { + url += "&device=" + m; + url += "&version=" + v; + } BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl camera_url: " << url << ", machine: " << m_machine; CallAfter([this, m, url] { if (m != m_machine) return; @@ -233,14 +237,16 @@ void MediaPlayCtrl::Stop(wxString const &msg) SetStatus(msg, false); } ++m_failed_retry; - if (m_failed_code != 0 && !m_tutk_support && m_failed_retry > 1) { + if (m_failed_code != 0 && !m_tutk_support && (m_failed_retry > 1 || m_user_triggered)) { m_next_retry = wxDateTime(); // stop retry if (wxGetApp().show_modal_ip_address_enter_dialog(_L("LAN Connection Failed (Failed to start liveview)"))) { m_failed_retry = 0; + m_user_triggered = true; m_next_retry = wxDateTime::Now(); return; } } + m_user_triggered = false; if (m_next_retry.IsValid()) m_next_retry = wxDateTime::Now() + wxTimeSpan::Seconds(5 * m_failed_retry); } @@ -252,6 +258,7 @@ void MediaPlayCtrl::TogglePlay() Stop(); } else { m_failed_retry = 0; + m_user_triggered = true; m_next_retry = wxDateTime::Now(); Play(); } @@ -315,8 +322,12 @@ void MediaPlayCtrl::ToggleStream() } NetworkAgent *agent = wxGetApp().getAgent(); if (!agent) return; - agent->get_camera_url(m_machine, [this, m = m_machine](std::string url) { - BOOST_LOG_TRIVIAL(info) << "camera_url: " << url; + agent->get_camera_url(m_machine, [this, m = m_machine, v = agent->get_version()](std::string url) { + if (boost::algorithm::starts_with(url, "bambu:///")) { + url += "&device=" + m; + url += "&version=" + v; + } + BOOST_LOG_TRIVIAL(info) << "camera_url: " << url; CallAfter([this, m, url] { if (m != m_machine) return; if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) { @@ -327,7 +338,7 @@ void MediaPlayCtrl::ToggleStream() } std::string file_url = data_dir() + "/cameratools/url.txt"; boost::nowide::ofstream file(file_url); - auto url2 = encode_path((url + "&device=" + m).c_str()); + auto url2 = encode_path(url.c_str()); file.write(url2.c_str(), url2.size()); file.close(); m_streaming = true; @@ -354,11 +365,11 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) Stop(); return; } - if (last_state == MEDIASTATE_LOADING && state == wxMEDIASTATE_STOPPED) { + if (last_state == MEDIASTATE_LOADING && (state == wxMEDIASTATE_STOPPED || state == wxMEDIASTATE_PAUSED || event.GetEventType() == wxEVT_MEDIA_LOADED)) { wxSize size = m_media_ctrl->GetVideoSize(); BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::onStateChanged: size: " << size.x << "x" << size.y; m_failed_code = m_media_ctrl->GetLastError(); - if (size.GetWidth() > 1000) { + if (size.GetWidth() > 1000 || (event.GetEventType() == wxEVT_MEDIA_LOADED)) { m_last_state = state; SetStatus(_L("Playing..."), false); m_failed_retry = 0; @@ -442,14 +453,6 @@ void MediaPlayCtrl::media_proc() } } -#ifdef __WIN32__ -struct detach_process - : public ::boost::process::detail::windows::handler_base_ext -{ - template void on_setup(Executor &exec) const { exec.creation_flags |= ::boost::winapi::CREATE_NO_WINDOW_; } -}; -#endif - bool MediaPlayCtrl::start_stream_service(bool *need_install) { #ifdef __WIN32__ @@ -487,16 +490,16 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) std::string file_dll2 = data_dir() + "/plugins/BambuSource.dll"; if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists); - boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::std_out > intermediate, detach_process(), - boost::process::start_dir(start_dir), boost::process::limit_handles); - boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate, detach_process(), boost::process::limit_handles); + boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::start_dir(start_dir), boost::process::windows::create_no_window, + boost::process::std_out > intermediate, boost::process::limit_handles); + boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::windows::create_no_window, + boost::process::std_in < intermediate, boost::process::limit_handles); #else boost::filesystem::permissions(file_source, boost::filesystem::owner_exe | boost::filesystem::add_perms); boost::filesystem::permissions(file_ffmpeg, boost::filesystem::owner_exe | boost::filesystem::add_perms); - // TODO: limit_handles has bugs on posix - boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::std_out > intermediate, - boost::process::start_dir(start_dir)); - boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate); + boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::start_dir(start_dir), + boost::process::std_out > intermediate, boost::process::limit_handles); + boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate, boost::process::limit_handles); #endif process_source.detach(); process_ffmpeg.detach(); @@ -521,7 +524,7 @@ bool MediaPlayCtrl::get_stream_url(std::string *url) } } CloseHandle(shm); -#elif __APPLE__ +#else std::string file_url = data_dir() + "/cameratools/url.txt"; key_t key = ::ftok(file_url.c_str(), 1000); int shm = ::shmget(key, 1024, 0); @@ -539,18 +542,6 @@ bool MediaPlayCtrl::get_stream_url(std::string *url) url = nullptr; } } -#else - int shm = ::shm_open("bambu_stream_url", O_RDONLY, 0); - if (shm == -1) return false; - if (url) { - char *addr = (char *) ::mmap(nullptr, 1024, PROT_READ, MAP_SHARED, shm, 0); - if (addr != MAP_FAILED) { - *url = addr; - ::munmap(addr, 1024); - url = nullptr; - } - } - ::close(shm); #endif return url == nullptr; } diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index 03a5362149..f3ab91f161 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -83,6 +83,7 @@ private: boost::thread m_thread; bool m_streaming = false; + bool m_user_triggered = false; int m_failed_retry = 0; int m_failed_code = 0; wxDateTime m_next_retry; diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index 9ae80d2bea..bcc0a7e554 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -147,7 +147,10 @@ namespace GUI { filename = j["data"]["filename"].get(); if (download_url.empty()) return; - wxGetApp().plater()->request_model_download(download_url, filename); + + wxGetApp().set_download_model_url(download_url); + wxGetApp().set_download_model_name(filename); + wxGetApp().plater()->request_model_download(); } else if(strCmd == "request_close_publish_window") { this->Hide(); diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index d78c05e324..c2f5fe086d 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -153,7 +153,7 @@ MonitorPanel::~MonitorPanel() if (!dev) return; MachineObject *obj_ = dev->get_selected_machine(); if (obj_) - GUI::wxGetApp().sidebar().load_ams_list(obj_->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj_->dev_id, obj_->amsList); } void MonitorPanel::init_tabpanel() @@ -228,7 +228,7 @@ void MonitorPanel::set_default() /* reset side tool*/ //m_bitmap_wifi_signal->SetBitmap(wxNullBitmap); - wxGetApp().sidebar().load_ams_list({}); + wxGetApp().sidebar().load_ams_list({}, {}); } wxWindow* MonitorPanel::create_side_tools() @@ -309,7 +309,7 @@ void MonitorPanel::on_update_all(wxMouseEvent &event) MachineObject *obj_ = dev->get_selected_machine(); if (obj_) - GUI::wxGetApp().sidebar().load_ams_list(obj_->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj_->dev_id, obj_->amsList); Layout(); Refresh(); @@ -478,6 +478,9 @@ bool MonitorPanel::Show(bool show) obj = dev->get_selected_machine(); if (obj == nullptr) { dev->load_last_machine(); + obj = dev->get_selected_machine(); + if (obj) + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); } else { obj->reset_update_time(); } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 23a2f1c2eb..7513d3397e 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -357,8 +357,21 @@ void NotificationManager::PopNotification::count_lines() if (text.empty()) return; + // handle with marks + if (pos_start == string::npos && pos_end == string::npos) { + pos_start = text.find(error_start); + if (pos_start != string::npos) { + text.erase(pos_start, error_start.length()); + pos_end = text.find(error_end); + if (pos_end != string::npos) { + text.erase(pos_end, error_end.length()); + } + } + m_text1 = text; + } + m_endlines.clear(); - while (last_end < text.length() - 1) + while (last_end < text.length()) { size_t next_hard_end = text.find_first_of('\n', last_end); if (next_hard_end != std::string::npos && ImGui::CalcTextSize(text.substr(last_end, next_hard_end - last_end).c_str()).x < m_window_width - m_window_width_offset) { @@ -481,7 +494,14 @@ void NotificationManager::PopNotification::render_text(ImGuiWrapper& imgui, cons if (m_text1.size() > m_endlines[i]) last_end += (m_text1[m_endlines[i]] == '\n' || m_text1[m_endlines[i]] == ' ' ? 1 : 0); - imgui.text(line.c_str()); + if (pos_start != string::npos && pos_end != string::npos&& m_endlines[i] - line.length() >= pos_start && m_endlines[i] <= pos_end) { + push_style_color(ImGuiCol_Text, m_ErrorColor, m_state == EState::FadingOut, m_current_fade_opacity); + imgui.text(line.c_str()); + ImGui::PopStyleColor(); + } + else { + imgui.text(line.c_str()); + } } } //hyperlink text @@ -819,6 +839,7 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { + auto scale = wxGetApp().plater()->get_current_canvas3D()->get_scale(); ImVec2 win_size(win_size_x, win_size_y); ImVec2 win_pos(win_pos_x, win_pos_y); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); @@ -836,20 +857,15 @@ void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiW { button_text = ImGui::EjectHoverButton; //tooltip - - long time_now = wxGetLocalTime(); - if (m_hover_time > 0 && m_hover_time < time_now) { - ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); - //ImGui::BeginTooltip(); - //imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T"); - //ImGui::EndTooltip(); - ImGui::PopStyleColor(); - } - if (m_hover_time == 0) - m_hover_time = time_now; + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); + ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 8 * scale, 1 * scale }); + ImGui::BeginTooltip(); + imgui.text(_u8L("Safely remove hardware.")); + ImGui::EndTooltip(); + ImGui::PopStyleColor(2); + ImGui::PopStyleVar(); } - else - m_hover_time = 0; ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); @@ -1248,7 +1264,7 @@ void NotificationManager::SlicingProgressNotification::set_status_text(const std break; case Slic3r::GUI::NotificationManager::SlicingProgressNotification::SlicingProgressState::SP_COMPLETED: { - NotificationData data{ NotificationType::SlicingProgress, NotificationLevel::ProgressBarNotificationLevel, 0, _u8L("Slice ok."), m_is_fff ? _u8L("Export G-Code.") : _u8L("Export.") }; + NotificationData data{ NotificationType::SlicingProgress, NotificationLevel::ProgressBarNotificationLevel, 0, _u8L("Slice ok.") }; update(data); m_state = EState::Shown; } @@ -1549,8 +1565,8 @@ NotificationManager::NotificationManager(wxEvtHandler* evt_handler) : void NotificationManager::on_change_color_mode(bool is_dark) { m_is_dark = is_dark; - for (std::unique_ptr& notification : m_pop_notifications){ - notification->on_change_color_mode(is_dark); + for (std::unique_ptr& notification : m_pop_notifications){ + notification->on_change_color_mode(is_dark); } } @@ -2322,7 +2338,6 @@ size_t NotificationManager::get_notification_count() const return ret; } - void NotificationManager::bbl_show_plateinfo_notification(const std::string &text) { NotificationData data{NotificationType::BBLPlateInfo, NotificationLevel::PrintInfoNotificationLevel, BBL_NOTICE_MAX_INTERVAL, text}; @@ -2339,6 +2354,30 @@ void NotificationManager::bbl_show_plateinfo_notification(const std::string &tex push_notification_data(std::move(notification), 0); } +void NotificationManager::bbl_close_3mf_warn_notification() +{ + for (std::unique_ptr ¬ification : m_pop_notifications) + if (notification->get_type() == NotificationType::BBL3MFInfo) { + notification->close(); + } +} + +void NotificationManager::bbl_show_3mf_warn_notification(const std::string &text) +{ + NotificationData data{NotificationType::BBL3MFInfo, NotificationLevel::ErrorNotificationLevel, BBL_NOTICE_MAX_INTERVAL, text}; + + for (std::unique_ptr ¬ification : m_pop_notifications) { + if (notification->get_type() == NotificationType::BBL3MFInfo) { + notification->reinit(); + notification->update(data); + return; + } + } + + auto notification = std::make_unique(data, m_id_provider, m_evt_handler); + push_notification_data(std::move(notification), 0); +} + void NotificationManager::bbl_close_plateinfo_notification() { for (std::unique_ptr ¬ification : m_pop_notifications) @@ -2347,6 +2386,7 @@ void NotificationManager::bbl_close_plateinfo_notification() } } + void NotificationManager::bbl_show_preview_only_notification(const std::string &text) { NotificationData data{NotificationType::BBLPreviewOnlyMode, NotificationLevel::WarningNotificationLevel, 0, text}; diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index a821acc905..9016a3df26 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -123,6 +123,8 @@ enum class NotificationType ArrangeOngoing, // BBL: Plate Info ,Design For @YangLeDuo BBLPlateInfo, + // BBL: 3MF warnings + BBL3MFInfo, // BBL: Some Objects Info, Design For @YangLeDuo BBLObjectInfo, // BBL: Objects have empty layer when Slicing @@ -282,6 +284,10 @@ public: void bbl_show_plateinfo_notification(const std::string &text); void bbl_close_plateinfo_notification(); + //BBS-- 3mf warning + void bbl_show_3mf_warn_notification(const std::string &text); + void bbl_close_3mf_warn_notification(); + //BBS--preview only mode void bbl_show_preview_only_notification(const std::string &text); void bbl_close_preview_only_notification(); @@ -488,6 +494,11 @@ private: std::string m_hypertext; // Aditional text after hypertext - currently not used std::string m_text2; + // mark for render operation + size_t pos_start = string::npos; + size_t pos_end = string::npos; + std::string error_start = ""; + std::string error_end = ""; // inner variables to position notification window, texts and buttons correctly diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index f1a771716b..39fa9e9ebf 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -952,14 +952,9 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config case coInts: ret = config.option(opt_key)->get_at(idx); break; - case coPoints: - if (opt_key == "bed_shape") - ret = config.option(opt_key)->values; - else if (opt_key == "thumbnails") - ret = get_thumbnails_string(config.option(opt_key)->values); - else - ret = config.option(opt_key)->get_at(idx); - break; + case coEnums: + ret = config.option(opt_key)->get_at(idx); + break; default: break; } @@ -1233,13 +1228,22 @@ void ExtruderOptionsGroup::on_change_OG(const t_config_option_key& opt_id, const wxString OptionsGroup::get_url(const std::string& path_end) { + //BBS + wxString str = from_u8(path_end); + auto pos = str.find(L'#'); + if (pos != size_t(-1)) { + pos++; + wxString anchor = str.Mid(pos).Lower(); + anchor.Replace(L" ", "-"); + str = str.Left(pos) + anchor; + } // Softfever: point to sf wiki for seam parameters if (path_end == "Seam") { return wxString::Format(L"https://github.com/SoftFever/BambuStudio-SoftFever/wiki/%s", from_u8(path_end)); } else { //BBS - return wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/%s", L"en", from_u8(path_end)); + return wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/%s", L"en", str); } } diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index efbe156648..9fc6c1b768 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -134,7 +134,7 @@ void ParamsPanel::Highlighter::set_timer_owner(wxEvtHandler *owner, int timerid m_timer.SetOwner(owner, timerid); } -void ParamsPanel::Highlighter::init(std::pair params, wxWindow *parent) +void ParamsPanel::Highlighter::init(std::pair params, wxWindow *parent) { if (m_timer.IsRunning()) invalidate(); if (!params.first || !params.second) return; @@ -185,7 +185,6 @@ void ParamsPanel::Highlighter::blink() ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) { - init_bitmaps(); // BBS: new layout SetBackgroundColour(*wxWHITE); #if __WXOSX__ @@ -223,7 +222,7 @@ ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, c m_mode_region->SetMaxSize({em_unit(this) * 12, -1}); m_mode_region->SetLabels(_L("Global"), _L("Objects")); //m_mode_region->GetSize(&width, &height); - m_tips_arrow = new wxStaticBitmap(m_top_panel, wxID_ANY, m_tips_arrow_icon); + m_tips_arrow = new ScalableButton(m_top_panel, wxID_ANY, "tips_arrow"); m_tips_arrow->Hide(); m_title_view = new Label(m_top_panel, _L("Advance")); @@ -348,11 +347,6 @@ ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, c //m_import_from_file->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { wxGetApp().mainframe->load_config_file(); }); } -void ParamsPanel::init_bitmaps() -{ - m_tips_arrow_icon = create_scaled_bitmap("tips_arrow", nullptr, 24); -} - void ParamsPanel::create_layout() { #ifdef __WINDOWS__ @@ -370,19 +364,18 @@ void ParamsPanel::create_layout() m_mode_sizer->Add(m_process_icon, 0, wxALIGN_CENTER); m_mode_sizer->AddSpacer(FromDIP(11)); m_mode_sizer->Add( m_title_label, 0, wxALIGN_CENTER ); - m_mode_sizer->AddSpacer(FromDIP(9)); - m_mode_sizer->Add( m_mode_region, 0, wxALIGN_CENTER ); - m_mode_sizer->AddSpacer(FromDIP(9)); - m_mode_sizer->Add( m_tips_arrow, 0, wxALIGN_CENTER); + m_mode_sizer->AddStretchSpacer(2); + m_mode_sizer->Add(m_mode_region, 0, wxALIGN_CENTER); m_mode_sizer->AddStretchSpacer(1); + m_mode_sizer->Add(m_tips_arrow, 0, wxALIGN_CENTER); + m_mode_sizer->AddStretchSpacer(8); m_mode_sizer->Add( m_title_view, 0, wxALIGN_CENTER ); - m_mode_sizer->AddSpacer(FromDIP(9)); - m_mode_sizer->Add( m_mode_view, 0, wxALIGN_CENTER ); - m_mode_sizer->AddSpacer(FromDIP(16)); - m_mode_sizer->Add( m_setting_btn, 0, wxALIGN_CENTER ); - - m_mode_sizer->AddSpacer(FromDIP(16)); - m_mode_sizer->Add( m_compare_btn, 0, wxALIGN_CENTER ); + m_mode_sizer->AddSpacer(FromDIP(2)); + m_mode_sizer->Add(m_mode_view, 0, wxALIGN_CENTER); + m_mode_sizer->AddStretchSpacer(2); + m_mode_sizer->Add(m_setting_btn, 0, wxALIGN_CENTER); + m_mode_sizer->AddSpacer(FromDIP(2)); + m_mode_sizer->Add(m_compare_btn, 0, wxALIGN_CENTER); m_mode_sizer->AddSpacer(FromDIP(8)); //m_mode_sizer->Add( m_search_btn, 0, wxALIGN_CENTER ); @@ -649,6 +642,7 @@ void ParamsPanel::msw_rescale() if (m_setting_btn) m_setting_btn->msw_rescale(); if (m_search_btn) m_search_btn->msw_rescale(); if (m_compare_btn) m_compare_btn->msw_rescale(); + if (m_tips_arrow) m_tips_arrow->msw_rescale(); m_left_sizer->SetMinSize(wxSize(40 * em_unit(this), -1)); if (m_mode_sizer) m_mode_sizer->SetMinSize(-1, 3 * em_unit(this)); diff --git a/src/slic3r/GUI/ParamsPanel.hpp b/src/slic3r/GUI/ParamsPanel.hpp index 81bc48acae..c39f7cfbc9 100644 --- a/src/slic3r/GUI/ParamsPanel.hpp +++ b/src/slic3r/GUI/ParamsPanel.hpp @@ -82,7 +82,7 @@ class ParamsPanel : public wxPanel ScalableButton* m_process_icon{ nullptr }; wxStaticText* m_title_label { nullptr }; SwitchButton* m_mode_region { nullptr }; - wxStaticBitmap* m_tips_arrow{ nullptr }; + ScalableButton *m_tips_arrow{nullptr}; bool m_tips_arror_blink{false}; wxStaticText* m_title_view { nullptr }; SwitchButton* m_mode_view { nullptr }; @@ -116,7 +116,6 @@ class ParamsPanel : public wxPanel wxBitmap m_toggle_on_icon; wxBitmap m_toggle_off_icon; - wxBitmap m_tips_arrow_icon; wxPanel* m_current_tab { nullptr }; @@ -125,12 +124,12 @@ class ParamsPanel : public wxPanel struct Highlighter { void set_timer_owner(wxEvtHandler *owner, int timerid = wxID_ANY); - void init(std::pair, wxWindow *parent = nullptr); + void init(std::pair, wxWindow *parent = nullptr); void blink(); void invalidate(); private: - wxStaticBitmap *m_bitmap { nullptr }; + wxWindow * m_bitmap{nullptr}; bool * m_show_blink_ptr{nullptr}; int m_blink_counter{0}; wxTimer m_timer; @@ -143,7 +142,6 @@ class ParamsPanel : public wxPanel ParamsPanel( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 1800,1080 ), long style = wxTAB_TRAVERSAL, const wxString& type = wxEmptyString ); ~ParamsPanel(); - void init_bitmaps(); void rebuild_panels(); void create_layout(); //clear the right page diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 303e307a5c..8784cec8e6 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -133,7 +133,7 @@ void PartPlate::init() m_print = nullptr; } -BedType PartPlate::get_bed_type(bool check_global/*= true*/) const +BedType PartPlate::get_bed_type() const { std::string bed_type_key = "curr_bed_type"; @@ -141,32 +141,26 @@ BedType PartPlate::get_bed_type(bool check_global/*= true*/) const assert(m_plater != nullptr); if (m_config.has(bed_type_key)) { BedType bed_type = m_config.opt_enum(bed_type_key); - if (bed_type != btDefault) - return bed_type; + return bed_type; } - if (!check_global) - return btDefault; - - if (m_plater) { - // In GUI mode - DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; - if (proj_cfg.has(bed_type_key)) - return proj_cfg.opt_enum(bed_type_key); - } - - return BedType::btPC; + return btDefault; } void PartPlate::set_bed_type(BedType bed_type) { - std::string bed_type_key = "curr_bed_type"; + std::string bed_type_key = "curr_bed_type"; - // should be called in GUI context - assert(m_plater != nullptr); + // should be called in GUI context + assert(m_plater != nullptr); // update slice state BedType old_real_bed_type = get_bed_type(); + if (old_real_bed_type == btDefault) { + DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + if (proj_cfg.has(bed_type_key)) + old_real_bed_type = proj_cfg.opt_enum(bed_type_key); + } BedType new_real_bed_type = bed_type; if (bed_type == BedType::btDefault) { DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; @@ -177,18 +171,74 @@ void PartPlate::set_bed_type(BedType bed_type) update_slice_result_valid_state(false); } - if (bed_type == BedType::btDefault) - m_config.erase(bed_type_key); - else - m_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); - - if (m_plater) - m_plater->update_project_dirty_from_presets(); + if (bed_type == BedType::btDefault) + m_config.erase(bed_type_key); + else + m_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); } void PartPlate::reset_bed_type() { - m_config.erase("curr_bed_type"); + m_config.erase("curr_bed_type"); +} + +void PartPlate::set_print_seq(PrintSequence print_seq) +{ + std::string print_seq_key = "print_sequence"; + + // should be called in GUI context + assert(m_plater != nullptr); + + // update slice state + PrintSequence old_real_print_seq = get_print_seq(); + if (old_real_print_seq == PrintSequence::ByDefault) { + auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + if (curr_preset_config.has(print_seq_key)) + old_real_print_seq = curr_preset_config.option>(print_seq_key)->value; + } + + PrintSequence new_real_print_seq = print_seq; + + if (print_seq == PrintSequence::ByDefault) { + auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + if (curr_preset_config.has(print_seq_key)) + new_real_print_seq = curr_preset_config.option>(print_seq_key)->value; + } + + if (old_real_print_seq != new_real_print_seq) { + update_slice_result_valid_state(false); + } + + //print_seq_same_global = same_global; + if (print_seq == PrintSequence::ByDefault) + m_config.erase(print_seq_key); + else + m_config.set_key_value(print_seq_key, new ConfigOptionEnum(print_seq)); +} + +PrintSequence PartPlate::get_print_seq() const +{ + std::string print_seq_key = "print_sequence"; + + // should be called in GUI context + assert(m_plater != nullptr); + + if (m_config.has(print_seq_key)) { + PrintSequence print_seq = m_config.opt_enum(print_seq_key); + return print_seq; + } + + return PrintSequence::ByDefault; +} + +PrintSequence PartPlate::get_real_print_seq() const +{ + PrintSequence curr_plate_seq = get_print_seq(); + if (curr_plate_seq == PrintSequence::ByDefault) { + auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + if (curr_preset_config.has("print_sequence")) curr_plate_seq = curr_preset_config.option>("print_sequence")->value; + } + return curr_plate_seq; } bool PartPlate::valid_instance(int obj_id, int instance_id) @@ -545,7 +595,7 @@ void PartPlate::render_logo(bool bottom) const //canvas.request_extra_frame(); } - + if (m_vbo_id == 0) { unsigned int* vbo_id_ptr = const_cast(&m_vbo_id); glsafe(::glGenBuffers(1, vbo_id_ptr)); @@ -561,13 +611,19 @@ void PartPlate::render_logo(bool bottom) const m_partplate_list->load_bedtype_textures(); // btDefault should be skipped - int bed_type_idx = (int)get_bed_type(); + auto curr_bed_type = get_bed_type(); + if (curr_bed_type == btDefault) { + DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + if (proj_cfg.has(std::string("curr_bed_type"))) + curr_bed_type = proj_cfg.opt_enum(std::string("curr_bed_type")); + } + int bed_type_idx = (int)curr_bed_type; for (auto &part : m_partplate_list->bed_texture_info[bed_type_idx].parts) { if (part.texture) { if (part.buffer && part.buffer->get_vertices_count() > 0 //&& part.vbo_id != 0 ) { - if (part.offset.x() != m_origin.x() || part.offset.y() != m_origin.y()) { + if (part.offset.x() != m_origin.x() || part.offset.y() != m_origin.y()) { part.offset = Vec2d(m_origin.x(), m_origin.y()); part.update_buffer(); } @@ -739,18 +795,18 @@ void PartPlate::render_icons(bool bottom, int hover_id) const render_icon_texture(position_id, tex_coords_id, m_lock_icon, m_partplate_list->m_lockopen_texture, m_lock_vbo_id); } - if (m_partplate_list->render_bedtype_setting) { + if (m_partplate_list->render_plate_settings) { if (hover_id == 5) { - if (get_bed_type(false) == BedType::btDefault) - render_icon_texture(position_id, tex_coords_id, m_bedtype_icon, m_partplate_list->m_bedtype_hovered_texture, m_bedtype_vbo_id); + if (get_bed_type() == BedType::btDefault && get_print_seq() == PrintSequence::ByDefault) + render_icon_texture(position_id, tex_coords_id, m_plate_settings_icon, m_partplate_list->m_plate_settings_hovered_texture, m_plate_settings_vbo_id); else - render_icon_texture(position_id, tex_coords_id, m_bedtype_icon, m_partplate_list->m_bedtype_changed_hovered_texture, m_bedtype_vbo_id); + render_icon_texture(position_id, tex_coords_id, m_plate_settings_icon, m_partplate_list->m_plate_settings_changed_hovered_texture, m_plate_settings_vbo_id); } else { - if (get_bed_type(false) == BedType::btDefault) - render_icon_texture(position_id, tex_coords_id, m_bedtype_icon, m_partplate_list->m_bedtype_texture, m_bedtype_vbo_id); + if (get_bed_type() == BedType::btDefault && get_print_seq() == PrintSequence::ByDefault) + render_icon_texture(position_id, tex_coords_id, m_plate_settings_icon, m_partplate_list->m_plate_settings_texture, m_plate_settings_vbo_id); else - render_icon_texture(position_id, tex_coords_id, m_bedtype_icon, m_partplate_list->m_bedtype_changed_texture, m_bedtype_vbo_id); + render_icon_texture(position_id, tex_coords_id, m_plate_settings_icon, m_partplate_list->m_plate_settings_changed_texture, m_plate_settings_vbo_id); } } @@ -1088,8 +1144,8 @@ void PartPlate::on_render_for_picking() const { m_grabber_color[1] = color[1]; m_grabber_color[2] = color[2]; m_grabber_color[3] = color[3]; - if (m_partplate_list->render_bedtype_setting) - render_rectangle_for_picking(m_bedtype_icon, m_grabber_color); + if (m_partplate_list->render_plate_settings) + render_rectangle_for_picking(m_plate_settings_icon, m_grabber_color); } std::array PartPlate::picking_color_component(int idx) const @@ -1126,9 +1182,9 @@ void PartPlate::release_opengl_resource() glsafe(::glDeleteBuffers(1, &m_lock_vbo_id)); m_lock_vbo_id = 0; } - if (m_bedtype_vbo_id > 0) { - glsafe(::glDeleteBuffers(1, &m_bedtype_vbo_id)); - m_bedtype_vbo_id = 0; + if (m_plate_settings_vbo_id > 0) { + glsafe(::glDeleteBuffers(1, &m_plate_settings_vbo_id)); + m_plate_settings_vbo_id = 0; } if (m_plate_idx_vbo_id > 0) { glsafe(::glDeleteBuffers(1, &m_plate_idx_vbo_id)); @@ -1136,7 +1192,7 @@ void PartPlate::release_opengl_resource() } } -std::vector PartPlate::get_extruders() const +std::vector PartPlate::get_extruders(bool conside_custom_gcode) const { std::vector plate_extruders; // if gcode.3mf file @@ -1152,6 +1208,7 @@ std::vector PartPlate::get_extruders() const int glb_support_intf_extr = glb_config.opt_int("support_interface_filament"); int glb_support_extr = glb_config.opt_int("support_filament"); bool glb_support = glb_config.opt_bool("enable_support"); + glb_support |= glb_config.opt_int("raft_layers") > 0; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { if (!contain_instance_totally(obj_idx, 0)) @@ -1165,8 +1222,13 @@ std::vector PartPlate::get_extruders() const bool obj_support = false; const ConfigOption* obj_support_opt = mo->config.option("enable_support"); - if (obj_support_opt != nullptr) - obj_support = obj_support_opt->getBool(); + const ConfigOption *obj_raft_opt = mo->config.option("raft_layers"); + if (obj_support_opt != nullptr || obj_raft_opt != nullptr) { + if (obj_support_opt != nullptr) + obj_support = obj_support_opt->getBool(); + if (obj_raft_opt != nullptr) + obj_support |= obj_raft_opt->getInt() > 0; + } else obj_support = glb_support; @@ -1192,6 +1254,16 @@ std::vector PartPlate::get_extruders() const plate_extruders.push_back(glb_support_extr); } + if (conside_custom_gcode) { + //BBS + if (m_model->plates_custom_gcodes.find(m_plate_index) != m_model->plates_custom_gcodes.end()) { + for (auto item : m_model->plates_custom_gcodes.at(m_plate_index).gcodes) { + if (item.type == CustomGCode::Type::ToolChange) + plate_extruders.push_back(item.extruder); + } + } + } + std::sort(plate_extruders.begin(), plate_extruders.end()); auto it_end = std::unique(plate_extruders.begin(), plate_extruders.end()); plate_extruders.resize(std::distance(plate_extruders.begin(), it_end)); @@ -1223,7 +1295,7 @@ std::vector PartPlate::get_used_extruders() Vec3d PartPlate::estimate_wipe_tower_size(const double w, const double wipe_volume) const { Vec3d wipe_tower_size; - std::vector plate_extruders = get_extruders(); + std::vector plate_extruders = get_extruders(true); double layer_height = 0.08f; // hard code layer height double max_height = 0.f; wipe_tower_size.setZero(); @@ -1673,6 +1745,29 @@ int PartPlate::remove_instance(int obj_id, int instance_id) return result; } +//translate instance on the plate +void PartPlate::translate_all_instance(Vec3d position) +{ + for (std::set>::iterator it = obj_to_instance_set.begin(); it != obj_to_instance_set.end(); ++it) + { + int obj_id = it->first; + int instance_id = it->second; + + if ((obj_id >= 0) && (obj_id < m_model->objects.size())) + { + ModelObject* object = m_model->objects[obj_id]; + if ((instance_id >= 0) && (instance_id < object->instances.size())) + { + ModelInstance* instance = object->instances[instance_id]; + const Vec3d& offset = instance->get_offset(); + instance->set_offset(offset + position); + } + } + } + return; +} + + //update instance exclude state void PartPlate::update_instance_exclude_status(int obj_id, int instance_id, BoundingBoxf3* bounding_box) { @@ -1722,6 +1817,26 @@ void PartPlate::update_object_index(int obj_idx_removed, int obj_idx_max) } +int PartPlate::printable_instance_size() +{ + int size = 0; + for (std::set>::iterator it = obj_to_instance_set.begin(); it != obj_to_instance_set.end(); ++it) { + int obj_id = it->first; + int instance_id = it->second; + + if (obj_id >= m_model->objects.size()) + continue; + + ModelObject * object = m_model->objects[obj_id]; + ModelInstance *instance = object->instances[instance_id]; + + if ((instance->printable) && (instance_outside_set.find(std::pair(obj_id, instance_id)) == instance_outside_set.end())) { + size++; + } + } + return size; +} + //whether it is has printable instances bool PartPlate::has_printable_instances() { @@ -1917,17 +2032,27 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Vec2d position, float height_to_lid, float height_to_rod) { - if ((m_shape == shape)&&(m_exclude_area == exclude_areas) + Pointfs new_shape, new_exclude_areas; + + for (const Vec2d& p : shape) { + new_shape.push_back(Vec2d(p.x() + position.x(), p.y() + position.y())); + } + + for (const Vec2d& p : exclude_areas) { + new_exclude_areas.push_back(Vec2d(p.x() + position.x(), p.y() + position.y())); + } + if ((m_shape == new_shape)&&(m_exclude_area == new_exclude_areas) &&(m_height_to_lid == height_to_lid)&&(m_height_to_rod == height_to_rod)) { - BOOST_LOG_TRIVIAL(trace) << "PartPlate same shape"; + BOOST_LOG_TRIVIAL(info) << "PartPlate same shape, skip directly"; return false; } + m_height_to_lid = height_to_lid; m_height_to_rod = height_to_rod; - if ((m_shape != shape) || (m_exclude_area != exclude_areas)) + if ((m_shape != new_shape) || (m_exclude_area != new_exclude_areas)) { - m_shape.clear(); + /*m_shape.clear(); for (const Vec2d& p : shape) { m_shape.push_back(Vec2d(p.x() + position.x(), p.y() + position.y())); } @@ -1935,7 +2060,9 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve m_exclude_area.clear(); for (const Vec2d& p : exclude_areas) { m_exclude_area.push_back(Vec2d(p.x() + position.x(), p.y() + position.y())); - } + }*/ + m_shape = std::move(new_shape); + m_exclude_area = std::move(new_exclude_areas); calc_bounding_boxes(); @@ -1970,7 +2097,7 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve calc_vertex_for_icons(1, m_orient_icon); calc_vertex_for_icons(2, m_arrange_icon); calc_vertex_for_icons(3, m_lock_icon); - calc_vertex_for_icons(4, m_bedtype_icon); + calc_vertex_for_icons(4, m_plate_settings_icon); //calc_vertex_for_number(0, (m_plate_index < 9), m_plate_idx_icon); calc_vertex_for_number(0, false, m_plate_idx_icon); } @@ -2188,10 +2315,13 @@ int PartPlate::load_gcode_from_file(const std::string& filename) int ret = 0; // process gcode - m_print->apply(*m_model, wxGetApp().preset_bundle->full_config()); + DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(); + full_config.apply(m_config, true); + m_print->apply(*m_model, full_config); //BBS: need to apply two times, for after the first apply, the m_print got its object, //which will affect the config when new_full_config.normalize_fdm(used_filaments); - m_print->apply(*m_model, wxGetApp().preset_bundle->full_config()); + m_print->apply(*m_model, full_config); + // BBS: use backup path to save temp gcode // auto path = get_tmp_gcode_path(); // if (boost::filesystem::exists(boost::filesystem::path(path))) { @@ -2372,6 +2502,23 @@ Vec3d PartPlateList::compute_origin(int i, int cols) return origin; } +//compute the origin for printable plate with index i using new width +Vec3d PartPlateList::compute_origin_using_new_size(int i, int new_width, int new_depth) +{ + Vec3d origin; + int row, col; + + row = i / m_plate_cols; + col = i % m_plate_cols; + + origin(0) = col * (new_width * (1. + LOGICAL_PART_PLATE_GAP)); + origin(1) = -row * (new_depth * (1. + LOGICAL_PART_PLATE_GAP)); + origin(2) = 0; + + return origin; +} + + //compute the origin for printable plate with index i Vec3d PartPlateList::compute_origin_for_unprintable() { @@ -2489,32 +2636,32 @@ void PartPlateList::generate_icon_textures() //if (m_bedtype_texture.get_id() == 0) { - file_name = path + (m_is_dark ? "plate_set_bedtype_dark.svg" : "plate_set_bedtype.svg"); - if (!m_bedtype_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { + file_name = path + (m_is_dark ? "plate_settings_dark.svg" : "plate_settings.svg"); + if (!m_plate_settings_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } //if (m_bedtype_changed_texture.get_id() == 0) { - file_name = path + (m_is_dark ? "plate_set_bedtype_changed_dark.svg" : "plate_set_bedtype_changed.svg"); - if (!m_bedtype_changed_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { + file_name = path + (m_is_dark ? "plate_settings_changed_dark.svg" : "plate_settings_changed.svg"); + if (!m_plate_settings_changed_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } //if (m_bedtype_hovered_texture.get_id() == 0) { - file_name = path + (m_is_dark ? "plate_set_bedtype_hover_dark.svg" : "plate_set_bedtype_hover.svg"); - if (!m_bedtype_hovered_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { + file_name = path + (m_is_dark ? "plate_settings_hover_dark.svg" : "plate_settings_hover.svg"); + if (!m_plate_settings_hovered_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } //if (m_bedtype_changed_hovered_texture.get_id() == 0) { - file_name = path + (m_is_dark ? "plate_set_bedtype_changed_hover_dark.svg" : "plate_set_bedtype_changed_hover.svg"); - if (!m_bedtype_changed_hovered_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { + file_name = path + (m_is_dark ? "plate_settings_changed_hover_dark.svg" : "plate_settings_changed_hover.svg"); + if (!m_plate_settings_changed_hovered_texture.load_from_svg_file(file_name, true, false, false, icon_size)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } @@ -2575,10 +2722,10 @@ void PartPlateList::release_icon_textures() m_locked_hovered_texture.reset(); m_lockopen_texture.reset(); m_lockopen_hovered_texture.reset(); - m_bedtype_texture.reset(); - m_bedtype_changed_texture.reset(); - m_bedtype_hovered_texture.reset(); - m_bedtype_changed_hovered_texture.reset(); + m_plate_settings_texture.reset(); + m_plate_settings_texture.reset(); + m_plate_settings_texture.reset(); + m_plate_settings_hovered_texture.reset(); for (int i = 0;i < MAX_PLATE_COUNT; i++) { m_idx_textures[i].reset(); @@ -2603,7 +2750,7 @@ void PartPlateList::release_icon_textures() } //this may be happened after machine changed -void PartPlateList::reset_size(int width, int depth, int height) +void PartPlateList::reset_size(int width, int depth, int height, bool reload_objects, bool update_shapes) { Vec3d origin1, origin2; @@ -2615,7 +2762,13 @@ void PartPlateList::reset_size(int width, int depth, int height) m_plate_depth = depth; m_plate_height = height; update_all_plates_pos_and_size(false, false); - reload_all_objects(); + if (update_shapes) { + set_shapes(m_shape, m_exclude_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod); + } + if (reload_objects) + reload_all_objects(); + else + clear(false, false, false, -1); } return; @@ -2967,6 +3120,25 @@ PartPlate* PartPlateList::get_selected_plate() return m_plate_list[m_current_plate]; } +std::vector PartPlateList::get_nonempty_plate_list() +{ + std::vector nonempty_plate_list; + for (auto plate : m_plate_list){ + if (plate->get_extruders().size() != 0) { + nonempty_plate_list.push_back(plate); + } + } + return nonempty_plate_list; +} + +std::vector PartPlateList::get_nonempty_plates_slice_results() { + std::vector nonempty_plates_slice_result; + for (auto plate : get_nonempty_plate_list()) { + nonempty_plates_slice_result.push_back(plate->get_slice_result()); + } + return nonempty_plates_slice_result; +} + //select plate int PartPlateList::select_plate(int index) { @@ -2989,11 +3161,15 @@ int PartPlateList::select_plate(int index) m_current_plate = index; m_plate_list[m_current_plate]->set_selected(); + //BBS + if(m_model) + m_model->curr_plate_index = index; + //BBS update bed origin if (m_intialized && m_plater) { Vec2d pos = compute_shape_position(index, m_plate_cols); m_plater->set_bed_position(pos); - wxQueueEvent(m_plater, new SimpleEvent(EVT_GLCANVAS_PLATE_SELECT)); + //wxQueueEvent(m_plater, new SimpleEvent(EVT_GLCANVAS_PLATE_SELECT)); } return 0; @@ -3886,10 +4062,10 @@ void PartPlateList::render_for_picking_pass() return 0; }*/ -void PartPlateList::set_render_option(bool bedtype_texture, bool bedtype_setting) +void PartPlateList::set_render_option(bool bedtype_texture, bool plate_settings) { - render_bedtype_logo = bedtype_texture; - render_bedtype_setting = bedtype_setting; + render_bedtype_logo = bedtype_texture; + render_plate_settings = plate_settings; } int PartPlateList::select_plate_by_obj(int obj_index, int instance_index) @@ -4246,8 +4422,8 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w plate_data_item->objects_and_instances.emplace_back(it->first, it->second); } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <m_gcode_result->filename % with_slice_info %m_plate_list[i]->is_slice_result_valid(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <m_gcode_result->filename % with_slice_info %m_plate_list[i]->is_slice_result_valid()%plate_data_item->objects_and_instances.size(); if (with_slice_info) { if (m_plate_list[i]->get_slice_result() && m_plate_list[i]->is_slice_result_valid()) { @@ -4421,7 +4597,7 @@ void PartPlateList::BedTextureInfo::TexturePart::update_buffer() rectangle.push_back(Vec2d(x+w, y+h)); rectangle.push_back(Vec2d(x, y+h)); ExPolygon poly; - + for (int i = 0; i < 4; i++) { const Vec2d & p = rectangle[i]; for (auto& p : rectangle) { diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 2a44cdfa06..edc876d9b5 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -133,15 +133,12 @@ private: mutable unsigned int m_orient_vbo_id{ 0 }; GeometryBuffer m_lock_icon; mutable unsigned int m_lock_vbo_id{ 0 }; - GeometryBuffer m_bedtype_icon; - mutable unsigned int m_bedtype_vbo_id{ 0 }; + GeometryBuffer m_plate_settings_icon; + mutable unsigned int m_plate_settings_vbo_id{ 0 }; GeometryBuffer m_plate_idx_icon; mutable unsigned int m_plate_idx_vbo_id{ 0 }; GLTexture m_texture; - // plate render option - bool is_same_bedtype_with_global = true; - mutable float m_grabber_color[4]; float m_scale_factor{ 1.0f }; GLUquadricObject* m_quadric; @@ -213,11 +210,21 @@ public: //clear alll the instances in plate void clear(bool clear_sliced_result = true); - BedType get_bed_type(bool check_global = true) const; + BedType get_bed_type() const; void set_bed_type(BedType bed_type); void reset_bed_type(); DynamicPrintConfig* config() { return &m_config; } + // set print sequence per plate + //bool print_seq_same_global = true; + void set_print_seq(PrintSequence print_seq = PrintSequence::ByDefault); + PrintSequence get_print_seq() const; + // Get the real effective print sequence of current plate. + // If curr_plate's print_seq is ByDefault, use the global sequence + // @return PrintSequence::{ByLayer,ByObject} + PrintSequence get_real_print_seq() const; + + //static const int plate_x_offset = 20; //mm //static const double plate_x_gap = 0.2; ThumbnailData thumbnail_data; @@ -258,7 +265,7 @@ public: Vec3d get_origin() { return m_origin; } Vec3d estimate_wipe_tower_size(const double w, const double wipe_volume) const; - std::vector get_extruders() const; + std::vector get_extruders(bool conside_custom_gcode = false) const; std::vector get_used_extruders(); /* instance related operations*/ @@ -283,6 +290,9 @@ public: //remove instance from plate int remove_instance(int obj_id, int instance_id); + //translate instance on the plate + void translate_all_instance(Vec3d position); + //update instance exclude state void update_instance_exclude_status(int obj_id, int instance_id, BoundingBoxf3* bounding_box = nullptr); @@ -292,6 +302,8 @@ public: //whether it is empty bool empty() { return obj_to_instance_set.empty(); } + int printable_instance_size(); + //whether it is has printable instances bool has_printable_instances(); @@ -482,14 +494,14 @@ class PartPlateList : public ObjectBase GLTexture m_locked_hovered_texture; GLTexture m_lockopen_texture; GLTexture m_lockopen_hovered_texture; - GLTexture m_bedtype_texture; - GLTexture m_bedtype_changed_texture; - GLTexture m_bedtype_hovered_texture; - GLTexture m_bedtype_changed_hovered_texture; + GLTexture m_plate_settings_texture; + GLTexture m_plate_settings_changed_texture; + GLTexture m_plate_settings_hovered_texture; + GLTexture m_plate_settings_changed_hovered_texture; GLTexture m_idx_textures[MAX_PLATE_COUNT]; // set render option bool render_bedtype_logo = true; - bool render_bedtype_setting = true; + bool render_plate_settings = true; bool m_is_dark = false; @@ -559,11 +571,13 @@ public: ~PartPlateList(); //this may be happened after machine changed - void reset_size(int width, int depth, int height); + void reset_size(int width, int depth, int height, bool reload_objects = true, bool update_shapes = false); //clear all the instances in the plate, but keep the plates void clear(bool delete_plates = false, bool release_print_list = false, bool except_locked = false, int plate_index = -1); //clear all the instances in the plate, and delete the plates, only keep the first default plate void reset(bool do_init); + //compute the origin for printable plate with index i using new width + Vec3d compute_origin_using_new_size(int i, int new_width, int new_depth); //reset partplate to init states void reinit(); @@ -571,6 +585,11 @@ public: //get the plate stride double plate_stride_x(); double plate_stride_y(); + void get_plate_size(int& width, int& depth, int& height) { + width = m_plate_width; + depth = m_plate_depth; + height = m_plate_height; + } /*basic plate operations*/ //create an empty plate and return its index @@ -607,6 +626,10 @@ public: PartPlate* get_selected_plate(); + std::vector get_nonempty_plate_list(); + + std::vector get_nonempty_plates_slice_results(); + Vec3d get_current_plate_origin() { return compute_origin(m_current_plate, m_plate_cols); } Vec2d get_current_shape_position() { return compute_shape_position(m_current_plate, m_plate_cols); } Pointfs get_exclude_area() { return m_exclude_areas; } @@ -683,7 +706,7 @@ public: void on_change_color_mode(bool is_dark) { m_is_dark = is_dark; } void render(bool bottom, bool only_current = false, bool only_body = false, int hover_id = -1); void render_for_picking_pass(); - void set_render_option(bool bedtype_texture, bool bedtype_settings); + void set_render_option(bool bedtype_texture, bool plate_settings); BoundingBoxf3& get_bounding_box() { return m_bounding_box; } //int select_plate_by_hover_id(int hover_id); int select_plate_by_obj(int obj_index, int instance_index); diff --git a/src/slic3r/GUI/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp new file mode 100644 index 0000000000..376714789e --- /dev/null +++ b/src/slic3r/GUI/PlateSettingsDialog.cpp @@ -0,0 +1,158 @@ +#include "PlateSettingsDialog.hpp" + + +namespace Slic3r { namespace GUI { + +wxDEFINE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); + +PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) +:DPIDialog(parent, id, title, pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), -1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + + wxFlexGridSizer* top_sizer = new wxFlexGridSizer(0, 2, FromDIP(5), 0); + top_sizer->AddGrowableCol(0,1); + top_sizer->SetFlexibleDirection(wxBOTH); + top_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + m_bed_type_choice = new ComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240),-1), 0, NULL, wxCB_READONLY ); + for (BedType i = btDefault; i < btCount; i = BedType(int(i) + 1)) { + m_bed_type_choice->Append(to_bed_type_name(i)); + } + wxStaticText* m_bed_type_txt = new wxStaticText(this, wxID_ANY, _L("Bed type")); + m_bed_type_txt->SetFont(Label::Body_14); + top_sizer->Add(m_bed_type_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); + top_sizer->Add(m_bed_type_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + + wxBoxSizer* m_sizer_selectbox = new wxBoxSizer(wxHORIZONTAL); + m_print_seq_choice = new ComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240),-1), 0, NULL, wxCB_READONLY ); + m_print_seq_choice->Append(_L("Same as Global Print Sequence")); + for (auto i = PrintSequence::ByLayer; i < PrintSequence::ByDefault; i = PrintSequence(int(i) + 1)) { + m_print_seq_choice->Append(to_print_sequence_name(i)); + } + wxStaticText* m_print_seq_txt = new wxStaticText(this, wxID_ANY, _L("Print sequence")); + m_print_seq_txt->SetFont(Label::Body_14); + top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT |wxALL, FromDIP(5)); + top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + + m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxALL, FromDIP(30)); + + auto sizer_button = new wxBoxSizer(wxHORIZONTAL); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + m_button_ok = new Button(this, _L("OK")); + m_button_ok->SetBackgroundColor(btn_bg_green); + m_button_ok->SetBorderColor(*wxWHITE); + m_button_ok->SetTextColor(wxColour("#FFFFFE")); + m_button_ok->SetFont(Label::Body_12); + m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_ok->SetCornerRadius(FromDIP(12)); + m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_SET_BED_TYPE_CONFIRM, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + if (this->IsModal()) + EndModal(wxID_YES); + else + this->Close(); + }); + + m_button_cancel = new Button(this, _L("Cancel")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_cancel->SetCornerRadius(FromDIP(12)); + m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + if (this->IsModal()) + EndModal(wxID_NO); + else + this->Close(); + }); + + sizer_button->AddStretchSpacer(); + sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); + sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); + sizer_button->Add(FromDIP(30),0, 0, 0); + + m_sizer_main->Add(sizer_button, 0, wxEXPAND, FromDIP(20)); + + SetSizer(m_sizer_main); + Layout(); + m_sizer_main->Fit(this); + + CenterOnParent(); + + wxGetApp().UpdateDlgDarkUI(this); +} + +PlateSettingsDialog::~PlateSettingsDialog() +{ + +} + +void PlateSettingsDialog::sync_bed_type(BedType type) +{ + if (m_bed_type_choice != nullptr) { + m_bed_type_choice->SetSelection(int(type)); + } +} + +void PlateSettingsDialog::sync_print_seq(int print_seq) +{ + if (m_print_seq_choice != nullptr) { + m_print_seq_choice->SetSelection(print_seq); + } +} + +wxString PlateSettingsDialog::to_bed_type_name(BedType bed_type) { + switch (bed_type) { + case btDefault: + return _L("Same as Global Bed Type"); + case btPC: + return _L("Cool Plate"); + case btEP: + return _L("Engineering Plate"); + case btPEI: + return _L("High Temp Plate"); + case btPTE: + return _L("Textured PEI Plate"); + default: + return _L("Same as Global Bed Type"); + } + return _L("Same as Global Bed Type"); +} + +wxString PlateSettingsDialog::to_print_sequence_name(PrintSequence print_seq) { + switch (print_seq) { + case PrintSequence::ByLayer: + return _L("By Layer"); + case PrintSequence::ByObject: + return _L("By Object"); + default: + return _L("By Layer"); + } + return _L("By Layer"); +} + +void PlateSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + m_button_ok->Rescale(); + m_button_cancel->Rescale(); +} + +}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/PlateSettingsDialog.hpp b/src/slic3r/GUI/PlateSettingsDialog.hpp new file mode 100644 index 0000000000..6cb7b592fd --- /dev/null +++ b/src/slic3r/GUI/PlateSettingsDialog.hpp @@ -0,0 +1,61 @@ +#ifndef slic3r_GUI_PlateSettingsDialog_hpp_ +#define slic3r_GUI_PlateSettingsDialog_hpp_ + +#include "Plater.hpp" +#include "PartPlate.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/RadioBox.hpp" +#include "Widgets/ComboBox.hpp" + +namespace Slic3r { namespace GUI { + +wxDECLARE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); + +class PlateSettingsDialog : public DPIDialog +{ +public: + enum ButtonStyle { + ONLY_CONFIRM = 0, + CONFIRM_AND_CANCEL = 1, + MAX_STYLE_NUM = 2 + }; + PlateSettingsDialog( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCLOSE_BOX | wxCAPTION + ); + + ~PlateSettingsDialog(); + void sync_bed_type(BedType type); + void sync_print_seq(int print_seq = 0); + wxString to_bed_type_name(BedType bed_type); + wxString to_print_sequence_name(PrintSequence print_seq); + void on_dpi_changed(const wxRect& suggested_rect) override; + + int get_print_seq_choice() { + int choice = 0; + if (m_print_seq_choice != nullptr) + choice = m_print_seq_choice->GetSelection(); + return choice; + }; + + int get_bed_type_choice() { + int choice = 0; + if (m_bed_type_choice != nullptr) + choice = m_bed_type_choice->GetSelection(); + return choice; + }; + +protected: + ComboBox* m_print_seq_choice { nullptr }; + ComboBox* m_bed_type_choice { nullptr }; + Button* m_button_ok; + Button* m_button_cancel; +}; + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 09f08229c8..424c55e843 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -128,7 +128,7 @@ #include "PhysicalPrinterDialog.hpp" #include "PrintHostDialogs.hpp" -#include "SetBedTypeDialog.hpp" +#include "PlateSettingsDialog.hpp" using boost::optional; namespace fs = boost::filesystem; @@ -137,7 +137,7 @@ using Slic3r::Preset; using Slic3r::GUI::format_wxstr; using namespace nlohmann; -static const std::pair THUMBNAIL_SIZE_3MF = { 256, 256 }; +static const std::pair THUMBNAIL_SIZE_3MF = { 512, 512 }; namespace Slic3r { namespace GUI { @@ -334,6 +334,7 @@ struct Sidebar::priv bool is_collapsed {false}; Search::OptionsSearcher searcher; + std::string ams_list_device; priv(Plater *plater) : plater(plater) {} ~priv(); @@ -1360,7 +1361,7 @@ void Sidebar::on_filaments_change(size_t num_filaments) sizer->Hide(p->m_flushing_volume_btn); } - p->m_panel_filament_title->Layout(); + Layout(); p->m_panel_filament_title->Refresh(); update_ui_from_settings(); dynamic_filament_list.update(); @@ -1374,13 +1375,12 @@ void Sidebar::on_bed_type_change(BedType bed_type) m_bed_type_list->SetSelection(sel_idx); } -void Sidebar::load_ams_list(std::map const &list) +void Sidebar::load_ams_list(std::string const &device, std::map const &list) { std::vector filament_ams_list; for (auto ams : list) { char n = ams.first.front() - '0' + 'A'; for (auto tray : ams.second->trayList) { - if (tray.second->setting_id.empty()) continue; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": ams %1% tray %2% id %3% color %4%") % ams.first % tray.first % tray.second->setting_id % tray.second->color; char t = tray.first.front() - '0' + '1'; @@ -1392,6 +1392,8 @@ void Sidebar::load_ams_list(std::map const &list) filament_ams_list.emplace_back(std::move(ams)); } } + p->ams_list_device = device; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": %1% items") % filament_ams_list.size(); wxGetApp().preset_bundle->filament_ams_list = filament_ams_list; for (auto c : p->combos_filament) c->update(); @@ -1407,10 +1409,34 @@ void Sidebar::sync_ams_list() dlg.ShowModal(); return; } - MessageDialog dlg(this, - _L("Sync filaments with AMS will drop all current selected filament presets and colors. Do you want to continue?"), - _L("Sync filaments with AMS"), wxYES_NO); - if (dlg.ShowModal() != wxID_YES) return; + std::string ams_filament_ids = wxGetApp().app_config->get("ams_filament_ids", p->ams_list_device); + std::vector list2; + if (!ams_filament_ids.empty()) + boost::algorithm::split(list2, ams_filament_ids, boost::algorithm::is_any_of(",")); + struct SyncAmsDialog : MessageDialog { + SyncAmsDialog(wxWindow * parent, bool first): MessageDialog(parent, + first + ? _L("Sync filaments with AMS will drop all current selected filament presets and colors. Do you want to continue?") + : _L("Already did a synchronization, do you want to sync only changes or resync all?"), + _L("Sync filaments with AMS"), 0) + { + if (first) { + add_button(wxID_YES, true, _L("Yes")); + } else { + add_button(wxID_OK, true, _L("Sync")); + add_button(wxID_YES, false, _L("Resync")); + } + add_button(wxID_CANCEL, false, _L("Cancel")); + } + } dlg(this, ams_filament_ids.empty()); + auto res = dlg.ShowModal(); + if (res == wxID_CANCEL) return; + list2.resize(list.size()); + for (int i = 0; i < list.size(); ++i) { + auto filament_id = list[i].opt_string("filament_id", 0u); + list[i].set_key_value("filament_changed", new ConfigOptionBool{res == wxID_YES || list2[i] != filament_id}); + list2[i] = filament_id; + } unsigned int unknowns = 0; auto n = wxGetApp().preset_bundle->sync_ams_list(unknowns); if (n == 0) { @@ -1420,6 +1446,8 @@ void Sidebar::sync_ams_list() dlg.ShowModal(); return; } + ams_filament_ids = boost::algorithm::join(list2, ","); + wxGetApp().app_config ->set("ams_filament_ids", p->ams_list_device, ams_filament_ids); if (unknowns > 0) { MessageDialog dlg(this, _L("There are some unknown filaments mapped to generic preset. Please update Bambu Studio or restart Bambu Studio to check if there is an update to system presets."), @@ -1429,7 +1457,7 @@ void Sidebar::sync_ams_list() wxGetApp().plater()->on_filaments_change(n); for (auto &c : p->combos_filament) c->update(); - wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0]); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); dynamic_filament_list.update(); } @@ -1680,6 +1708,10 @@ struct Plater::priv bool m_is_slicing {false}; bool m_is_publishing {false}; int m_cur_slice_plate; + //BBS: m_slice_all in .gcode.3mf file case, set true when slice all + bool m_slice_all_only_has_gcode{ false }; + + bool m_need_update{false}; //BBS: add popup object table logic //ObjectTableDialog* m_popup_table{ nullptr }; @@ -1791,6 +1823,11 @@ struct Plater::priv priv(Plater *q, MainFrame *main_frame); ~priv(); + + bool need_update() const { return m_need_update; } + void set_need_update(bool need_update) { m_need_update = need_update; } + + void set_plater_dirty(bool is_dirty) { dirty_state.set_plater_dirty(is_dirty); } bool is_project_dirty() const { return dirty_state.is_dirty(); } bool is_presets_dirty() const { return dirty_state.is_presets_dirty(); } void update_project_dirty_from_presets() @@ -2064,6 +2101,7 @@ struct Plater::priv bool can_delete() const; bool can_delete_all() const; + bool can_edit_text() const; bool can_add_plate() const; bool can_delete_plate() const; bool can_increase_instances() const; @@ -2407,20 +2445,23 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); preview->get_wxglcanvas()->Bind(EVT_CUSTOMEVT_TICKSCHANGED, [this](wxCommandEvent& event) { Type tick_event_type = (Type)event.GetInt(); - Model &model = wxGetApp().plater()->model(); - model.custom_gcode_per_print_z = preview->get_canvas3d()->get_gcode_viewer().get_layers_slider()->GetTicksValues(); - preview->on_tick_changed(tick_event_type); + Model& model = wxGetApp().plater()->model(); + //BBS: replace model custom gcode with current plate custom gcode + model.plates_custom_gcodes[model.curr_plate_index] = preview->get_canvas3d()->get_gcode_viewer().get_layers_slider()->GetTicksValues(); // BBS set to invalid state only - if (tick_event_type == Type::ToolChange || tick_event_type == Type::Custom || tick_event_type == Type::Template) { + if (tick_event_type == Type::ToolChange || tick_event_type == Type::Custom || tick_event_type == Type::Template || tick_event_type == Type::PausePrint) { PartPlate *plate = this->q->get_partplate_list().get_curr_plate(); if (plate) { plate->update_slice_result_valid_state(false); } } + preview->on_tick_changed(tick_event_type); + // update slice and print button wxGetApp().mainframe->update_slice_print_status(MainFrame::SlicePrintEventType::eEventSliceUpdate, true, false); + set_need_update(true); }); } if (wxGetApp().is_gcode_viewer()) @@ -2893,6 +2934,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::vector empty_result; bool dlg_cont = true; bool is_user_cancel = false; + bool translate_old = false; + int current_width, current_depth, current_height; if (input_files.empty()) { return std::vector(); } @@ -3155,7 +3198,17 @@ std::vector Plater::priv::load_files(const std::vector& input_ return empty_result; } + Semver old_version(1, 5, 9); + if ((en_3mf_file_type == En3mfType::From_BBS) && (file_version < old_version) && load_model && load_config && !config_loaded.empty()) { + translate_old = true; + partplate_list.get_plate_size(current_width, current_depth, current_height); + } + if (load_config) { + if (translate_old) { + //set the size back + partplate_list.reset_size(current_width + Bed3D::Axes::DefaultTipRadius, current_depth + Bed3D::Axes::DefaultTipRadius, current_height, false); + } partplate_list.load_from_3mf_structure(plate_data); partplate_list.update_slice_context_to_current_plate(background_process); this->preview->update_gcode_result(partplate_list.get_current_slice_result()); @@ -3194,11 +3247,26 @@ std::vector Plater::priv::load_files(const std::vector& input_ config.apply(static_cast(FullPrintConfig::defaults())); // and place the loaded config over the base. config += std::move(config_loaded); + std::map validity = config.validate(); + if (!validity.empty()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("Param values in 3mf error: "); + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("%1%: %2%")%it->first %it->second; + // + NotificationManager *notify_manager = q->get_notification_manager(); + std::string error_message = L("Invalid values found in the 3mf:"); + error_message += "\n"; + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) + error_message += "-" + it->first + ": " + it->second + "\n"; + error_message += "\n"; + error_message += L("Please correct them in the param tabs"); + notify_manager->bbl_show_3mf_warn_notification(error_message); + } } if (!config_substitutions.empty()) show_substitutions_info(config_substitutions.substitutions, filename.string()); - this->model.custom_gcode_per_print_z = model.custom_gcode_per_print_z; // BBS + this->model.plates_custom_gcodes = model.plates_custom_gcodes; this->model.design_info = model.design_info; this->model.model_info = model.model_info; } @@ -3532,6 +3600,21 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (new_model) delete new_model; + //BBS: translate old 3mf to correct positions + if (translate_old) { + //translate the objects + int plate_count = partplate_list.get_plate_count(); + for (int index = 1; index < plate_count; index ++) { + PartPlate* cur_plate = (PartPlate *)partplate_list.get_plate(index); + + Vec3d cur_origin = cur_plate->get_origin(); + Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, current_width, current_depth); + + cur_plate->translate_all_instance(new_origin - cur_origin); + } + partplate_list.reset_size(current_width, current_depth, current_height, true, true); + } + //BBS: add gcode loading logic in the end q->m_exported_file = false; q->skip_thumbnail_invalid = false; @@ -4020,7 +4103,8 @@ void Plater::priv::delete_all_objects_from_model() sidebar->obj_list()->delete_all_objects_from_list(); object_list_changed(); - model.custom_gcode_per_print_z.gcodes.clear(); + //BBS + model.plates_custom_gcodes.clear(); } void Plater::priv::reset(bool apply_presets_change) @@ -4070,7 +4154,8 @@ void Plater::priv::reset(bool apply_presets_change) else wxGetApp().load_current_presets(false, false); - model.custom_gcode_per_print_z.gcodes.clear(); + //BBS + model.plates_custom_gcodes.clear(); // BBS m_saved_timestamp = m_backup_timestamp = size_t(-1); @@ -5009,15 +5094,12 @@ void Plater::priv::reload_from_disk() new_volume->config.apply(old_volume->config); new_volume->set_type(old_volume->type()); new_volume->set_material_id(old_volume->material_id()); -#if 0// ENABLE_WORLD_COORDINATE - new_volume->set_transformation(Geometry::translation_transform(old_volume->source.transform.get_offset()) * - old_volume->get_transformation().get_matrix_no_offset() * old_volume->source.transform.get_matrix_no_offset()); - new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); -#else - new_volume->set_transformation(Geometry::assemble_transform(old_volume->source.transform.get_offset()) * old_volume->get_transformation().get_matrix(true) * - old_volume->source.transform.get_matrix(true)); - new_volume->translate(new_volume->get_transformation().get_matrix(true) * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); -#endif // ENABLE_WORLD_COORDINATE + + Transform3d transform = Transform3d::Identity(); + transform.translate(new_volume->source.mesh_offset - old_volume->source.mesh_offset); + new_volume->set_transformation(old_volume->get_transformation().get_matrix() * old_volume->source.transform.get_matrix(true) * + transform * new_volume->source.transform.get_matrix(true).inverse()); + new_volume->source.object_idx = old_volume->source.object_idx; new_volume->source.volume_idx = old_volume->source.volume_idx; assert(!old_volume->source.is_converted_from_inches || !old_volume->source.is_converted_from_meters); @@ -5262,6 +5344,9 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) return; } + //BBS: wish to reset all plates stats item selected state when back to View3D Tab + preview->get_canvas3d()->reset_select_plate_toolbar_selection(); + wxPanel* old_panel = current_panel; //#if BBL_HAS_FIRST_PAGE if (!old_panel) { @@ -5470,7 +5555,7 @@ void Plater::priv::on_select_bed_type(wxCommandEvent &evt) //update slice status auto plate_list = partplate_list.get_plate_list(); for (auto plate : plate_list) { - if (plate->get_bed_type(false) == btDefault) { + if (plate->get_bed_type() == btDefault) { plate->update_slice_result_valid_state(false); } } @@ -5553,12 +5638,9 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) Slic3r::put_other_changes(); // update slice state and set bedtype default for 3rd-party printer - bool is_bbl_vendor_preset = wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle); auto plate_list = partplate_list.get_plate_list(); for (auto plate : plate_list) { plate->update_slice_result_valid_state(false); - if (!is_bbl_vendor_preset) - plate->set_bed_type(btDefault); } } @@ -5765,6 +5847,20 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) //BBS: add project slice logic bool is_finished = !m_slice_all || (m_cur_slice_plate == (partplate_list.get_plate_count() - 1)); + //BBS: slice .gcode.3mf file related logic, assign is_finished again + bool only_has_gcode_need_preview = false; + auto plate_list = this->partplate_list.get_plate_list(); + bool has_print_instances = false; + for (auto plate : plate_list) + has_print_instances = has_print_instances || plate->has_printable_instances(); + if (this->model.objects.empty() && !has_print_instances) + only_has_gcode_need_preview = true; + if (only_has_gcode_need_preview && m_slice_all_only_has_gcode) { + is_finished = (m_cur_slice_plate == (partplate_list.get_plate_count() - 1)); + if (is_finished) + m_slice_all_only_has_gcode = false; + } + // Stop the background task, wait until the thread goes into the "Idle" state. // At this point of time the thread should be either finished or canceled, // so the following call just confirms, that the produced data were consumed. @@ -5964,6 +6060,8 @@ void Plater::priv::on_action_add_plate(SimpleEvent&) if (q != nullptr) { take_snapshot("add partplate"); this->partplate_list.create_plate(); + int new_plate = this->partplate_list.get_plate_count() - 1; + this->partplate_list.select_plate(new_plate); update(); // BBS set default view @@ -6013,12 +6111,15 @@ void Plater::priv::on_action_slice_all(SimpleEvent&) Plater::setExtruderParams(Slic3r::Model::extruderParamsMap); Plater::setPrintSpeedTable(Slic3r::Model::printSpeedMap); m_slice_all = true; + m_slice_all_only_has_gcode = true; m_cur_slice_plate = 0; //select plate q->select_plate(m_cur_slice_plate); q->reslice(); if (!m_is_publishing) q->select_view_3D("Preview"); + //BBS: wish to select all plates stats item + preview->get_canvas3d()->_update_select_plate_toolbar_stats_item(true); } } @@ -6398,7 +6499,9 @@ PlateBBoxData Plater::priv::generate_first_layer_bbox() std::vector& id_bboxes = bboxdata.bbox_objs; BoundingBoxf bbox_all; auto print = this->background_process.m_fff_print; - bboxdata.is_seq_print = (print->config().print_sequence == PrintSequence::ByObject); + auto curr_plate = this->partplate_list.get_curr_plate(); + auto curr_plate_seq = curr_plate->get_real_print_seq(); + bboxdata.is_seq_print = (curr_plate_seq == PrintSequence::ByObject); bboxdata.first_extruder = print->get_tool_ordering().first_extruder(); bboxdata.bed_type = bed_type_to_gcode_string(print->config().curr_bed_type.value); // get nozzle diameter @@ -6890,7 +6993,7 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_ar double z = config->opt_float("printable_height"); //Pointfs& exclude_areas = config->option("bed_exclude_area")->values; - partplate_list.reset_size(max.x() - min.x(), max.y() - min.y(), z); + partplate_list.reset_size(max.x() - min.x() - Bed3D::Axes::DefaultTipRadius, max.y() - min.y() - Bed3D::Axes::DefaultTipRadius, z); partplate_list.set_shapes(shape, exclude_areas, custom_texture, height_to_lid, height_to_rod); Vec2d new_shape_position = partplate_list.get_current_shape_position(); @@ -6909,6 +7012,24 @@ bool Plater::priv::can_delete_all() const return !model.objects.empty(); } +bool Plater::priv::can_edit_text() const +{ + const Selection &selection = view3D->get_canvas3d()->get_selection(); + if (selection.is_single_full_instance()) + return true; + + if (selection.is_single_volume()) { + const GLVolume *gl_volume = selection.get_volume(*selection.get_volume_idxs().begin()); + int out_object_idx = gl_volume->object_idx(); + ModelObject * model_object = selection.get_model()->objects[out_object_idx]; + int out_volume_idx = gl_volume->volume_idx(); + ModelVolume * model_volume = model_object->volumes[out_volume_idx]; + if (model_volume) + return !model_volume->get_text_info().m_text.empty(); + } + return false; +} + bool Plater::priv::can_add_plate() const { return q->get_partplate_list().get_plate_count() < PartPlateList::MAX_PLATES_COUNT; @@ -7413,6 +7534,7 @@ bool Plater::Show(bool show) bool Plater::is_project_dirty() const { return p->is_project_dirty(); } bool Plater::is_presets_dirty() const { return p->is_presets_dirty(); } +void Plater::set_plater_dirty(bool is_dirty) { p->set_plater_dirty(is_dirty); } void Plater::update_project_dirty_from_presets() { p->update_project_dirty_from_presets(); } int Plater::save_project_if_dirty(const wxString& reason) { return p->save_project_if_dirty(reason); } void Plater::reset_project_dirty_after_save() { p->reset_project_dirty_after_save(); } @@ -7452,8 +7574,10 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ m_only_gcode = false; m_exported_file = false; + m_loading_project = false; get_notification_manager()->bbl_close_plateinfo_notification(); get_notification_manager()->bbl_close_preview_only_notification(); + get_notification_manager()->bbl_close_3mf_warn_notification(); if (!silent) wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); @@ -7478,7 +7602,12 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ Model m; model().load_from(m); // new id avoid same path name + + //select first plate get_partplate_list().select_plate(0); + SimpleEvent event(EVT_GLCANVAS_PLATE_SELECT); + p->on_plate_selected(event); + p->load_auxiliary_files(); wxGetApp().app_config->update_last_backup_dir(model().get_backup_path()); @@ -7521,10 +7650,21 @@ void Plater::load_project(wxString const& filename2, //BBS: add only gcode mode bool previous_gcode = m_only_gcode; + // BBS + if (m_loading_project) { + //some error cases happens + //return directly + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": current loading other project, return directly"); + return; + } + else + m_loading_project = true; + m_only_gcode = false; m_exported_file = false; get_notification_manager()->bbl_close_plateinfo_notification(); get_notification_manager()->bbl_close_preview_only_notification(); + get_notification_manager()->bbl_close_3mf_warn_notification(); auto path = into_path(filename); @@ -7585,6 +7725,8 @@ void Plater::load_project(wxString const& filename2, up_to_date(true, true); wxGetApp().params_panel()->switch_to_object_if_has_object_configs(); + + m_loading_project = false; } // BBS: save logic @@ -7624,15 +7766,15 @@ int Plater::save_project(bool saveAs) //BBS import model by model id void Plater::import_model_id(const std::string& download_info) { - std::string download_url = ""; - std::string filename = ""; + std::string download_url = wxGetApp().get_download_model_url(); + std::string filename = wxGetApp().get_download_model_name(); - auto selection_data_arr = wxSplit(download_info, '|'); + /* auto selection_data_arr = wxSplit(download_info, '|'); - if (selection_data_arr.size() == 2) { - download_url = selection_data_arr[0].ToStdString(); - filename = selection_data_arr[1].ToStdString(); - } + if (selection_data_arr.size() == 2) { + download_url = selection_data_arr[0].ToStdString(); + filename = selection_data_arr[1].ToStdString(); + }*/ bool download_ok = false; @@ -7809,10 +7951,9 @@ void Plater::download_project(const wxString& project_id) return; } -void Plater::request_model_download(std::string url, std::string filename) +void Plater::request_model_download() { wxCommandEvent* event = new wxCommandEvent(EVT_IMPORT_MODEL_ID); - event->SetString(wxString::Format("%s|%s", wxString(url), wxString(filename))); wxQueueEvent(this, event); } @@ -8365,7 +8506,13 @@ void Plater::force_update_all_plate_thumbnails() } // BBS: backup -std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) { return p->load_files(input_files, strategy, ask_multi); } +std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) { + //BBS: wish to reset state when load a new file + p->m_slice_all_only_has_gcode = false; + //BBS: wish to reset all plates stats item selected state when load a new file + p->preview->get_canvas3d()->reset_select_plate_toolbar_selection(); + return p->load_files(input_files, strategy, ask_multi); +} // To be called when providing a list of files to the GUI slic3r on command line. std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) @@ -8997,7 +9144,17 @@ void Plater::add_file() } } -void Plater::update() { p->update(); } +void Plater::update(bool conside_update_flag) +{ + if (conside_update_flag) { + if (need_update()) { + p->update(); + p->set_need_update(false); + } + } + else + p->update(); +} void Plater::object_list_changed() { p->object_list_changed(); } @@ -9091,6 +9248,18 @@ void Plater::delete_all_objects_from_model() p->delete_all_objects_from_model(); } +void Plater::set_selected_visible(bool visible) +{ + if (p->get_curr_selection().is_empty()) + return; + + Plater::TakeSnapshot snapshot(this, "Set Selected Objects Visible in AssembleView"); + p->m_ui_jobs.cancel_all(); + + p->get_current_canvas3D()->set_selected_visible(visible); +} + + void Plater::remove_selected() { /*if (p->get_selection().is_empty()) @@ -10358,6 +10527,24 @@ bool Plater::update_filament_colors_in_full_config() return true; } +void Plater::config_change_notification(const DynamicPrintConfig &config, const std::string& key) +{ + GLCanvas3D* view3d_canvas = get_view3D_canvas3D(); + if (key == std::string("print_sequence")) { + auto seq_print = config.option>("print_sequence"); + if (seq_print && view3d_canvas && view3d_canvas->is_initialized() && view3d_canvas->is_rendering_enabled()) { + NotificationManager* notify_manager = get_notification_manager(); + if (seq_print->value == PrintSequence::ByObject) { + std::string info_text = _u8L("Print By Object: \nSuggest to use auto-arrange to avoid collisions when printing."); + notify_manager->bbl_show_seqprintinfo_notification(info_text); + } + else + notify_manager->bbl_close_seqprintinfo_notification(); + } + } + // notification for more options +} + void Plater::on_config_change(const DynamicPrintConfig &config) { bool update_scheduled = false; @@ -10435,20 +10622,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) if (bed_shape_changed) set_bed_shape(); - GLCanvas3D* view3d_canvas = get_view3D_canvas3D(); - auto seq_print = config.option>("print_sequence"); - if ( seq_print && view3d_canvas && view3d_canvas->is_initialized() && view3d_canvas->is_rendering_enabled() ) { - NotificationManager *notify_manager = get_notification_manager(); - if (seq_print->value == PrintSequence::ByObject) { - std::string info_text = _u8L("Print By Object: \nSuggest to use auto-arrange to avoid collisions when printing."); - notify_manager->bbl_show_seqprintinfo_notification(info_text); - //always show label when switch to sequence print - //if (print_sequence_changed) - // this->show_view3D_labels(true); - } - else - notify_manager->bbl_close_seqprintinfo_notification(); - } + config_change_notification(config, std::string("print_sequence")); if (update_scheduled) update(); @@ -10553,7 +10727,6 @@ std::vector Plater::get_extruder_colors_from_plater_config(const GC std::vector Plater::get_colors_for_color_print(const GCodeProcessorResult* const result) const { std::vector colors = get_extruder_colors_from_plater_config(result); - colors.reserve(colors.size() + p->model.custom_gcode_per_print_z.gcodes.size()); if (wxGetApp().is_gcode_viewer() && result != nullptr) { for (const CustomGCode::Item& code : result->custom_gcode_per_print_z) { @@ -10562,7 +10735,9 @@ std::vector Plater::get_colors_for_color_print(const GCodeProcessor } } else { - for (const CustomGCode::Item& code : p->model.custom_gcode_per_print_z.gcodes) { + //BBS + colors.reserve(colors.size() + p->model.get_curr_plate_custom_gcodes().gcodes.size()); + for (const CustomGCode::Item& code : p->model.get_curr_plate_custom_gcodes().gcodes) { if (code.type == CustomGCode::ColorChange) colors.emplace_back(code.color); } @@ -11197,6 +11372,10 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click) { //select plate ret = p->partplate_list.select_plate(plate_index); + if (!ret) { + SimpleEvent event(EVT_GLCANVAS_PLATE_SELECT); + p->on_plate_selected(event); + } if ((!ret)&&(p->background_process.can_switch_print())) { //select successfully @@ -11317,15 +11496,38 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click) //set the plate type ret = select_plate(plate_index); if (!ret) { - SetBedTypeDialog dlg(this, wxID_ANY, _L("Select Bed Type")); + PlateSettingsDialog dlg(this, wxID_ANY, _L("Plate Settings")); PartPlate* curr_plate = p->partplate_list.get_curr_plate(); - dlg.sync_bed_type(curr_plate->get_bed_type(false)); - dlg.Bind(EVT_SET_BED_TYPE_CONFIRM, [this, plate_index](wxCommandEvent& e) { + dlg.sync_bed_type(curr_plate->get_bed_type()); + + auto curr_print_seq = curr_plate->get_print_seq(); + if (curr_print_seq != PrintSequence::ByDefault) { + dlg.sync_print_seq(int(curr_print_seq) + 1); + } + else + dlg.sync_print_seq(0); + + dlg.Bind(EVT_SET_BED_TYPE_CONFIRM, [this, plate_index, &dlg](wxCommandEvent& e) { PartPlate *curr_plate = p->partplate_list.get_curr_plate(); - BedType old_bed_type = curr_plate->get_bed_type(false); - auto type = (BedType)(e.GetInt()); - p->partplate_list.get_curr_plate()->set_bed_type(type); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("select bed type %1% for plate %2% at plate side")%type %plate_index; + BedType old_bed_type = curr_plate->get_bed_type(); + auto bt_sel = BedType(dlg.get_bed_type_choice()); + if (old_bed_type != bt_sel) { + curr_plate->set_bed_type(bt_sel); + update_project_dirty_from_presets(); + set_plater_dirty(true); + } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("select bed type %1% for plate %2% at plate side")%bt_sel %plate_index; + + int ps_sel = dlg.get_print_seq_choice(); + if (ps_sel != 0) + curr_plate->set_print_seq(PrintSequence(ps_sel - 1)); + else + curr_plate->set_print_seq(PrintSequence::ByDefault); + update_project_dirty_from_presets(); + set_plater_dirty(true); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("select print sequence %1% for plate %2% at plate side")%ps_sel %plate_index; + auto plate_config = *(curr_plate->config()); + wxGetApp().plater()->config_change_notification(plate_config, std::string("print_sequence")); }); dlg.ShowModal(); @@ -11468,13 +11670,15 @@ void Plater::show_object_info() wxString info_manifold; int non_manifold_edges = 0; auto mesh_errors = p->sidebar->obj_list()->get_mesh_errors_info(&info_manifold, &non_manifold_edges); - info_text += into_u8(info_manifold); #ifndef __WINDOWS__ if (non_manifold_edges > 0) { - info_text += into_u8("\n" + _L("Tips:") + "\n" +_L("\"Fix Model\" feature is currently only on Windows. Please repair the model on Bambu Studio(windows) or CAD softwares.")); + info_manifold += into_u8("\n" + _L("Tips:") + "\n" +_L("\"Fix Model\" feature is currently only on Windows. Please repair the model on Bambu Studio(windows) or CAD softwares.")); } #endif //APPLE & LINUX + + info_manifold = "" + info_manifold + ""; + info_text += into_u8(info_manifold); notify_manager->bbl_show_objectsinfo_notification(info_text, is_windows10()&&(non_manifold_edges > 0), !(p->current_panel == p->view3D)); } @@ -11496,7 +11700,8 @@ void Plater::post_process_string_object_exception(StringObjectException &err) break; } } - err.string = format(_L("Plate %d: %s does not support filament %s (%s)."), err.params[0], err.params[1], err.params[2], filament_name); + err.string = format(_L("Plate% d: %s is not suggested to be used to print filament %s(%s). If you still want to do this printing, please set this filament's bed temperature to non zero."), + err.params[0], err.params[1], err.params[2], filament_name); err.string += "\n"; } } catch (...) { @@ -11590,6 +11795,14 @@ void Plater::show_status_message(std::string s) BOOST_LOG_TRIVIAL(trace) << "show_status_message:" << s; } +void Plater::edit_text() +{ + auto &manager = get_view3D_canvas3D()->get_gizmos_manager(); + manager.open_gizmo(GLGizmosManager::Text); + update(); +} + +bool Plater::can_edit_text() const { return p->can_edit_text(); } bool Plater::can_delete() const { return p->can_delete(); } bool Plater::can_delete_all() const { return p->can_delete_all(); } bool Plater::can_add_model() const { return !is_background_process_slicing(); } @@ -11729,6 +11942,16 @@ void Plater::bring_instance_forward() p->bring_instance_forward(); } +bool Plater::need_update() const +{ + return p->need_update(); +} + +void Plater::set_need_update(bool need_update) +{ + p->set_need_update(need_update); +} + // BBS //BBS: add popup logic for table object bool Plater::PopupObjectTable(int object_id, int volume_id, const wxPoint& position) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 9c82a189f4..909f93925f 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -125,7 +125,7 @@ public: void on_filaments_change(size_t num_filaments); // BBS void on_bed_type_change(BedType bed_type); - void load_ams_list(std::map const &list); + void load_ams_list(std::string const & device, std::map const &list); void sync_ams_list(); ObjectList* obj_list(); @@ -189,6 +189,7 @@ public: bool is_project_dirty() const; bool is_presets_dirty() const; + void set_plater_dirty(bool is_dirty); void update_project_dirty_from_presets(); int save_project_if_dirty(const wxString& reason); void reset_project_dirty_after_save(); @@ -212,7 +213,7 @@ public: //BBS download project by project id void import_model_id(const std::string& download_info); void download_project(const wxString& project_id); - void request_model_download(std::string url, std::string filename); + void request_model_download(); void request_download_project(std::string project_id); // BBS: check snapshot bool up_to_date(bool saved, bool backup); @@ -265,7 +266,7 @@ public: const wxString& get_last_loaded_gcode() const { return m_last_loaded_gcode; } - void update(); + void update(bool conside_update_flag = false); //BBS void object_list_changed(); void stop_jobs(); @@ -303,6 +304,7 @@ public: void trigger_restore_project(int skip_confirm = 0); void delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); // BBS support refresh immediately void delete_all_objects_from_model(); //BBS delete all objects from model + void set_selected_visible(bool visible); void remove_selected(); void increase_instances(size_t num = 1); void decrease_instances(size_t num = 1); @@ -388,6 +390,7 @@ public: // BBS void on_bed_type_change(BedType bed_type); bool update_filament_colors_in_full_config(); + void config_change_notification(const DynamicPrintConfig &config, const std::string& key); void on_config_change(const DynamicPrintConfig &config); void force_filament_colors_update(); void force_print_bed_update(); @@ -453,6 +456,10 @@ public: //BBS: void fill_color(int extruder_id); + //BBS: + void edit_text(); + bool can_edit_text() const; + bool can_delete() const; bool can_delete_all() const; bool can_add_model() const; @@ -567,6 +574,9 @@ public: void bring_instance_forward(); + bool need_update() const; + void set_need_update(bool need_update); + // ROII wrapper for suppressing the Undo / Redo snapshot to be taken. class SuppressSnapshots { @@ -692,6 +702,7 @@ private: bool m_only_gcode { false }; bool m_exported_file { false }; bool skip_thumbnail_invalid { false }; + bool m_loading_project {false }; std::string m_preview_only_filename; int m_valid_plates_count { 0 }; diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index c18b19bc00..8c1b9c89e9 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -110,8 +110,6 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( auto language_name = vlist[i]->Description; if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE_SIMPLIFIED)) { - //language_name = _L(vlist[i]->Description); - //language_name = _L("Chinese (Simplified)"); language_name = wxString::FromUTF8("\xe4\xb8\xad\xe6\x96\x87\x28\xe7\xae\x80\xe4\xbd\x93\x29"); } else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_SPANISH)) { @@ -132,6 +130,9 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_HUNGARIAN)) { language_name = wxString::FromUTF8("Magyar"); } + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_JAPANESE)) { + language_name = wxString::FromUTF8("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E"); + } if (app_config->get(param) == vlist[i]->CanonicalName) { m_current_language_selected = i; @@ -157,7 +158,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( if (wxGetApp().plater()->is_project_dirty()) { auto result = MessageDialog(static_cast(this), _L("The current project has unsaved changes, save it before continue?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE).ShowModal(); - + if (result == wxID_YES) { wxGetApp().plater()->save_project(); } @@ -241,7 +242,7 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin auto region_index = e.GetSelection(); auto region = local_regions[region_index]; - auto area = ""; + /*auto area = ""; if (region == "CHN" || region == "China") area = "CN"; else if (region == "USA") @@ -253,7 +254,7 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin else if (region == "North America") area = "US"; else - area = "Others"; + area = "Others";*/ NetworkAgent* agent = wxGetApp().getAgent(); AppConfig* config = GUI::wxGetApp().app_config; @@ -265,10 +266,11 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin return; } else { wxGetApp().request_user_logout(); + config->set("region", region.ToStdString()); + auto area = config->get_country_code(); if (agent) { agent->set_country_code(area); } - config->set("region", region.ToStdString()); EndModal(wxID_CANCEL); } } else { @@ -497,7 +499,7 @@ wxBoxSizer* PreferencesDialog::create_item_darkmode_checkbox(wxString title, wxW #ifdef _MSW_DARK_MODE wxGetApp().force_colors_update(); wxGetApp().update_ui_from_settings(); - set_dark_mode(); + set_dark_mode(); #endif SimpleEvent evt = SimpleEvent(EVT_GLCANVAS_COLOR_MODE_CHANGED); wxPostEvent(wxGetApp().plater(), evt); @@ -729,7 +731,7 @@ void PreferencesDialog::create() Layout(); Fit(); int screen_height = wxGetDisplaySize().GetY(); - if (this->GetSize().GetY() > screen_height) + if (this->GetSize().GetY() > screen_height) this->SetSize(this->GetSize().GetX() + FromDIP(40), screen_height * 4 / 5); CenterOnParent(); @@ -789,7 +791,9 @@ wxWindow* PreferencesDialog::create_general_page() wxLANGUAGE_SPANISH, wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH, - wxLANGUAGE_HUNGARIAN }; + wxLANGUAGE_HUNGARIAN, + wxLANGUAGE_JAPANESE + }; auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); std::vector language_infos; @@ -848,7 +852,7 @@ wxWindow* PreferencesDialog::create_general_page() auto title_darkmode = create_item_title(_L("Dark Mode"), page, _L("Dark Mode")); auto item_darkmode = create_item_darkmode_checkbox(_L("Enable Dark mode"), page,_L("Enable Dark mode"), 50, "dark_color_mode"); #endif - + sizer_page->Add(title_general_settings, 0, wxEXPAND, 0); sizer_page->Add(item_language, 0, wxTOP, FromDIP(3)); @@ -953,9 +957,10 @@ void PreferencesDialog::create_shortcuts_page() sizer_page->Fit(page); } -wxBoxSizer* PreferencesDialog::create_debug_page() +wxWindow* PreferencesDialog::create_debug_page() { - //wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); + auto page = new wxWindow(m_scrolledWindow, wxID_ANY); + page->SetBackgroundColour(*wxWHITE); m_developer_mode_def = app_config->get("developer_mode"); m_dump_video_def = app_config->get("dump_video"); @@ -964,19 +969,19 @@ wxBoxSizer* PreferencesDialog::create_debug_page() wxBoxSizer *bSizer = new wxBoxSizer(wxVERTICAL); - auto title_develop_mode = create_item_title(_L("Develop mode"), m_scrolledWindow, _L("Develop mode")); - auto item_develop_mode = create_item_checkbox(_L("Develop mode"), m_scrolledWindow, _L("Develop mode"), 50, "developer_mode"); - auto item_dump_video = create_item_checkbox(_L("Dump video"), m_scrolledWindow, _L("Dump video"), 50, "dump_video"); + auto title_develop_mode = create_item_title(_L("Develop mode"), page, _L("Develop mode")); + auto item_develop_mode = create_item_checkbox(_L("Develop mode"), page, _L("Develop mode"), 50, "developer_mode"); + auto item_dump_video = create_item_checkbox(_L("Dump video"), page, _L("Dump video"), 50, "dump_video"); - auto title_log_level = create_item_title(_L("Log Level"), m_scrolledWindow, _L("Log Level")); + auto title_log_level = create_item_title(_L("Log Level"), page, _L("Log Level")); auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; - auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), m_scrolledWindow, _L("Log Level"), log_level_list); + auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), page, _L("Log Level"), log_level_list); - auto title_host = create_item_title(_L("Host Setting"), m_scrolledWindow, _L("Host Setting")); - auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "dev_host"); - auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "qa_host"); - auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), m_scrolledWindow, wxEmptyString, 50, 1, "pre_host"); - auto radio4 = create_item_radiobox(_L("Product host"), m_scrolledWindow, wxEmptyString, 50, 1, "product_host"); + auto title_host = create_item_title(_L("Host Setting"), page, _L("Host Setting")); + auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "dev_host"); + auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "qa_host"); + auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "pre_host"); + auto radio4 = create_item_radiobox(_L("Product host"), page, wxEmptyString, 50, 1, "product_host"); if (m_iot_environment_def == ENV_DEV_HOST) { on_select_radio("dev_host"); @@ -994,7 +999,7 @@ wxBoxSizer* PreferencesDialog::create_debug_page() std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - Button* debug_button = new Button(m_scrolledWindow, _L("debug save button")); + Button* debug_button = new Button(page, _L("debug save button")); debug_button->SetBackgroundColor(btn_bg_white); debug_button->SetBorderColor(btn_bd_white); debug_button->SetFont(Label::Body_13); @@ -1063,7 +1068,9 @@ wxBoxSizer* PreferencesDialog::create_debug_page() wxGetApp().request_user_logout(); agent->set_country_code(country_code); } - wxMessageBox(_L("Switch cloud environment, Please login again!")); + ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Warning"), ConfirmBeforeSendDialog::ButtonStyle::ONLY_CONFIRM); + confirm_dlg.update_text(_L("Switch cloud environment, Please login again!")); + confirm_dlg.on_show(); } // bbs backup @@ -1098,7 +1105,11 @@ wxBoxSizer* PreferencesDialog::create_debug_page() bSizer->Add(radio3, 0, wxEXPAND | wxTOP, FromDIP(3)); bSizer->Add(radio4, 0, wxEXPAND | wxTOP, FromDIP(3)); bSizer->Add(debug_button, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(15)); - return bSizer; + + page->SetSizer(bSizer); + page->Layout(); + bSizer->Fit(page); + return page; } void PreferencesDialog::on_select_radio(std::string param) diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 003f5337b9..cd497110d3 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -122,7 +122,7 @@ public: void create_gui_page(); void create_sync_page(); void create_shortcuts_page(); - wxBoxSizer* create_debug_page(); + wxWindow* create_debug_page(); void on_select_radio(std::string param); wxString get_select_radio(int groupid); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 641f9576c6..3429739c83 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -376,8 +376,14 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) auto &filaments = m_collection->get_presets(); for (auto &f : m_preset_bundle->filament_ams_list) { std::string filament_id = f.opt_string("filament_id", 0u); + if (filament_id.empty()) continue; auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == filament_id; }); + if (iter == filaments.end()) { + auto filament_type = "Generic " + f.opt_string("filament_type", 0u); + iter = std::find_if(filaments.begin(), filaments.end(), + [&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); }); + } if (iter == filaments.end()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; continue; diff --git a/src/slic3r/GUI/Printer/BambuTunnel.h b/src/slic3r/GUI/Printer/BambuTunnel.h index 405a44843f..572f8dd5a7 100644 --- a/src/slic3r/GUI/Printer/BambuTunnel.h +++ b/src/slic3r/GUI/Printer/BambuTunnel.h @@ -23,11 +23,6 @@ extern "C" { #ifndef __cplusplus #include - -/* We need these workarounds since we're compiling C source, not C++. */ -typedef enum Bambu_StreamType Bambu_StreamType; -typedef struct Bambu_StreamInfo Bambu_StreamInfo; -typedef struct Bambu_Sample Bambu_Sample; #endif #ifdef _WIN32 @@ -40,31 +35,33 @@ typedef void* Bambu_Tunnel; typedef void (*Logger)(void * context, int level, tchar const* msg); -enum Bambu_StreamType +typedef enum __Bambu_StreamType { VIDE, AUDI -}; +} Bambu_StreamType; -enum Bambu_VideoSubType +typedef enum __Bambu_VideoSubType { AVC1, -}; + MJPG, +} Bambu_VideoSubType; -enum Bambu_AudioSubType +typedef enum __Bambu_AudioSubType { MP4A -}; +} Bambu_AudioSubType; -enum Bambu_FormatType +typedef enum __Bambu_FormatType { video_avc_packet, video_avc_byte_stream, + video_jpeg, audio_raw, audio_adts -}; +} Bambu_FormatType; -struct Bambu_StreamInfo +typedef struct __Bambu_StreamInfo { Bambu_StreamType type; int sub_type; @@ -84,33 +81,34 @@ struct Bambu_StreamInfo } format; int format_type; int format_size; + int max_frame_size; unsigned char const * format_buffer; -}; +} Bambu_StreamInfo; -enum Bambu_SampleFlag +typedef enum __Bambu_SampleFlag { f_sync = 1 -}; +} Bambu_SampleFlag; -struct Bambu_Sample +typedef struct __Bambu_Sample { int itrack; int size; int flags; unsigned char const * buffer; unsigned long long decode_time; -}; +} Bambu_Sample; -enum Bambu_Error +typedef enum __Bambu_Error { Bambu_success, Bambu_stream_end, - Bambu_would_block, + Bambu_would_block, Bambu_buffer_limit -}; +} Bambu_Error; #ifdef BAMBU_DYNAMIC -struct BambuLib { +typedef struct __BambuLib { #endif BAMBU_EXPORT int BAMBU_FUNC(Bambu_Create)(Bambu_Tunnel* tunnel, char const* path); @@ -148,7 +146,7 @@ BAMBU_EXPORT char const* BAMBU_FUNC(Bambu_GetLastErrorMsg)(); BAMBU_EXPORT void BAMBU_FUNC(Bambu_FreeLogMsg)(tchar const* msg); #ifdef BAMBU_DYNAMIC -}; +} BambuLib; #endif #ifdef __cplusplus diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 0934599753..ff018bb413 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -895,7 +895,7 @@ StaticBambuLib &StaticBambuLib::get() { static StaticBambuLib lib; // first load the library - + if (lib.Bambu_Open) return lib; @@ -910,6 +910,8 @@ StaticBambuLib &StaticBambuLib::get() GET_FUNC(Bambu_Create); GET_FUNC(Bambu_Open); GET_FUNC(Bambu_StartStream); + GET_FUNC(Bambu_GetStreamCount); + GET_FUNC(Bambu_GetStreamInfo); GET_FUNC(Bambu_SendMessage); GET_FUNC(Bambu_ReadSample); GET_FUNC(Bambu_Close); @@ -922,6 +924,6 @@ StaticBambuLib &StaticBambuLib::get() return lib; } -extern "C" struct BambuLib *bambulib_get() { +extern "C" BambuLib *bambulib_get() { return &StaticBambuLib::get(); } diff --git a/src/slic3r/GUI/Printer/gstbambusrc.c b/src/slic3r/GUI/Printer/gstbambusrc.c index bfde2f5704..e7339ec177 100644 --- a/src/slic3r/GUI/Printer/gstbambusrc.c +++ b/src/slic3r/GUI/Printer/gstbambusrc.c @@ -2,7 +2,7 @@ * integration with proprietary Bambu Lab blob for getting raw h.264 video * * Copyright (C) 2023 Joshua Wise - * + * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation @@ -62,10 +62,10 @@ #ifdef __cplusplus extern "C" #else -extern +extern #endif -struct BambuLib *bambulib_get(); -static struct BambuLib *_lib = NULL; +BambuLib *bambulib_get(); +BambuLib *_lib = NULL; #define BAMBULIB(x) (_lib->x) #else @@ -78,7 +78,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_bambusrc_debug); static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS("video/x-h264,framerate=0/1,parsed=(boolean)false,stream-format=(string)byte-stream")); + GST_STATIC_CAPS_ANY); + //GST_STATIC_CAPS("video/x-h264,framerate=0/1,parsed=(boolean)false,stream-format=(string)byte-stream")); enum { @@ -264,22 +265,22 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) GstBambuSrc *src; src = GST_BAMBUSRC (psrc); - + (void) src; GST_DEBUG_OBJECT (src, "create()"); - + int rv; - struct Bambu_Sample sample; - + Bambu_Sample sample; + if (!src->tnl) { return GST_FLOW_ERROR; } - + while ((rv = BAMBULIB(Bambu_ReadSample)(src->tnl, &sample)) == Bambu_would_block) { GST_DEBUG_OBJECT(src, "create would block"); usleep(33333); /* 30Hz */ } - + if (rv == Bambu_stream_end) { return GST_FLOW_EOS; } @@ -287,7 +288,7 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) if (rv != Bambu_success) { return GST_FLOW_ERROR; } - + #if GLIB_CHECK_VERSION(2,68,0) gpointer sbuf = g_memdup2(sample.buffer, sample.size); #else @@ -299,12 +300,33 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) * need to feed this in too -- otherwise the GStreamer pipeline gets upset * and starts triggering QoS events. */ - if (!src->sttime) { - src->sttime = sample.decode_time * 100ULL; + if (src->video_type == AVC1) { + if (!src->sttime) { + src->sttime = sample.decode_time * 100ULL; + } + GST_BUFFER_DTS(*outbuf) = sample.decode_time * 100ULL - src->sttime; + GST_BUFFER_PTS(*outbuf) = GST_CLOCK_TIME_NONE; + GST_BUFFER_DURATION(*outbuf) = GST_CLOCK_TIME_NONE; } - GST_BUFFER_DTS(*outbuf) = sample.decode_time * 100ULL - src->sttime; - GST_BUFFER_PTS(*outbuf) = GST_CLOCK_TIME_NONE; - GST_BUFFER_DURATION(*outbuf) = GST_CLOCK_TIME_NONE; + else { + if (!src->sttime) { + //only available from 1.18 + //src->sttime = gst_element_get_current_clock_time((GstElement *)psrc); + src->sttime = gst_clock_get_time(((GstElement *)psrc)->clock); + //if (GST_CLOCK_TIME_NONE == src->sttime) + // src->sttime + GST_DEBUG_OBJECT(src, + "sttime init to %llu.", + src->sttime); + } + //GST_BUFFER_DTS(*outbuf) = gst_element_get_current_clock_time((GstElement *)psrc) - src->sttime; + GST_BUFFER_DTS(*outbuf) = gst_clock_get_time(((GstElement *)psrc)->clock) - src->sttime; + GST_BUFFER_PTS(*outbuf) = GST_CLOCK_TIME_NONE; + GST_BUFFER_DURATION(*outbuf) = GST_CLOCK_TIME_NONE; + } + GST_DEBUG_OBJECT(src, + "sttime:%llu, DTS:%llu, PTS: %llu~", + src->sttime, GST_BUFFER_DTS(*outbuf), GST_BUFFER_PTS(*outbuf)); return GST_FLOW_OK; } @@ -321,13 +343,13 @@ gst_bambusrc_start (GstBaseSrc * bsrc) GstBambuSrc *src = GST_BAMBUSRC (bsrc); GST_DEBUG_OBJECT (src, "start(\"%s\")", src->location); - + if (src->tnl) { BAMBULIB(Bambu_Close)(src->tnl); BAMBULIB(Bambu_Destroy)(src->tnl); src->tnl = NULL; } - + #ifdef BAMBU_DYNAMIC if (!_lib) { _lib = bambulib_get(); @@ -339,15 +361,15 @@ gst_bambusrc_start (GstBaseSrc * bsrc) if (BAMBULIB(Bambu_Create)(&src->tnl, src->location) != Bambu_success) { return FALSE; } - + BAMBULIB(Bambu_SetLogger)(src->tnl, _log, (void *)src); if (BAMBULIB(Bambu_Open)(src->tnl) != Bambu_success) { BAMBULIB(Bambu_Destroy)(src->tnl); src->tnl = NULL; return FALSE; } - - int rv; + + int rv, n = 0; while ((rv = BAMBULIB(Bambu_StartStream)(src->tnl, 1 /* video */)) == Bambu_would_block) { usleep(100000); } @@ -358,6 +380,21 @@ gst_bambusrc_start (GstBaseSrc * bsrc) return FALSE; } + src->video_type = AVC1; + n = BAMBULIB(Bambu_GetStreamCount)(src->tnl); + GST_INFO_OBJECT (src, "Bambu_GetStreamCount returned stream count=%d",n); + for (int i = 0; i < n; ++i) { + Bambu_StreamInfo info; + BAMBULIB(Bambu_GetStreamInfo)(src->tnl, i, &info); + + GST_INFO_OBJECT (src, "stream %d type=%d, sub_type=%d", i, info.type, info.sub_type); + if (info.type == VIDE) { + src->video_type = info.sub_type; + GST_INFO_OBJECT (src, " width %d height=%d, frame_rate=%d", + info.format.video.width, info.format.video.height, info.format.video.frame_rate); + } + } + src->sttime = 0; return TRUE; } @@ -383,9 +420,9 @@ gst_bambusrc_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret; GstBambuSrc *src; - + src = GST_BAMBUSRC (element); - + (void) src; switch (transition) { @@ -429,7 +466,7 @@ static gboolean gst_bambusrc_is_seekable (GstBaseSrc * bsrc) { GstBambuSrc *src = GST_BAMBUSRC (bsrc); - + (void) src; return FALSE; @@ -522,7 +559,7 @@ static void gst_bambusrc_uri_handler_init (gpointer g_iface, gpointer iface_data) { GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; - + iface->get_type = gst_bambusrc_uri_get_type; iface->get_protocols = gst_bambusrc_uri_get_protocols; iface->get_uri = gst_bambusrc_uri_get_uri; @@ -543,7 +580,7 @@ void gstbambusrc_register() if (did_register) return; did_register = 1; - + gst_plugin_register_static(GST_VERSION_MAJOR, GST_VERSION_MINOR, "bambusrc", "Bambu Lab source", gstbambusrc_init, "0.0.1", "GPL", "BambuStudio", "BambuStudio", "https://github.com/bambulab/BambuStudio"); } diff --git a/src/slic3r/GUI/Printer/gstbambusrc.h b/src/slic3r/GUI/Printer/gstbambusrc.h index 2348424035..fbffb2df03 100644 --- a/src/slic3r/GUI/Printer/gstbambusrc.h +++ b/src/slic3r/GUI/Printer/gstbambusrc.h @@ -2,7 +2,7 @@ * integration with proprietary Bambu Lab blob for getting raw h.264 video * * Copyright (C) 2023 Joshua Wise - * + * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation @@ -64,6 +64,7 @@ struct _GstBambuSrc gchar *location; Bambu_Tunnel tnl; GstClockTime sttime; + int video_type; }; extern void gstbambusrc_register(); diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp new file mode 100644 index 0000000000..c2d19a9377 --- /dev/null +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -0,0 +1,211 @@ +#include "PrivacyUpdateDialog.hpp" +#include "GUI_App.hpp" +#include "BitmapCache.hpp" +#include +#include + + +namespace Slic3r { namespace GUI { + +wxDEFINE_EVENT(EVT_PRIVACY_UPDATE_CONFIRM, wxCommandEvent); +wxDEFINE_EVENT(EVT_PRIVACY_UPDATE_CANCEL, wxCommandEvent); + +static std::string url_encode(const std::string& value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { + std::string::value_type c = (*i); + + // Keep alphanumeric and other accepted characters intact + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + escaped << c; + continue; + } + + // Any other characters are percent-encoded + escaped << std::uppercase; + escaped << '%' << std::setw(2) << int((unsigned char)c); + escaped << std::nouppercase; + } + return escaped.str(); +} + +PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style) + :DPIDialog(parent, id, title, pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + SetBackgroundColour(*wxWHITE); + m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(540), 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + + wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); + + m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(15)); + //webview + m_vebview_release_note = CreateTipView(this); + if (m_vebview_release_note == nullptr) { + wxLogError("Could not init m_browser"); + return; + } + m_vebview_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + m_vebview_release_note->SetSize(wxSize(FromDIP(540), FromDIP(340))); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(540), FromDIP(340))); + + fs::path ph(data_dir()); + ph /= "resources/tooltip/privacyupdate.html"; + if (!fs::exists(ph)) { + ph = resources_dir(); + ph /= "tooltip/privacyupdate.html"; + } + m_host_url = ph.string(); + std::replace(m_host_url.begin(), m_host_url.end(), '\\', '/'); + m_host_url = "file:///" + m_host_url; + m_vebview_release_note->LoadURL(from_u8(m_host_url)); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + + auto sizer_button = new wxBoxSizer(wxHORIZONTAL); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(220, 220, 220), StateColor::Hovered), + std::pair(wxColour(238, 238, 238), StateColor::Normal)); + +#ifndef __WINDOWS__ + m_vebview_release_note->Bind(wxEVT_WEBVIEW_LOADED, [this](auto& e) { +#else + m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATED, [this](auto& e) { +#endif + if (!m_mkdown_text.empty()) { + ShowReleaseNote(m_mkdown_text); + } + e.Skip(); + }); + + m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATING , &PrivacyUpdateDialog::OnNavigating, this); + + m_button_ok = new Button(this, _L("Accept")); + m_button_ok->SetBackgroundColor(btn_bg_green); + m_button_ok->SetBorderColor(*wxWHITE); + m_button_ok->SetTextColor(wxColour("#FFFFFE")); + m_button_ok->SetFont(Label::Body_12); + m_button_ok->SetSize(wxSize(-1, FromDIP(36))); + m_button_ok->SetMinSize(wxSize(-1, FromDIP(36))); + m_button_ok->SetCornerRadius(FromDIP(3)); + + m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_PRIVACY_UPDATE_CONFIRM, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + m_button_cancel = new Button(this, _L("Log Out")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(*wxWHITE); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetSize(wxSize(-1, FromDIP(36))); + m_button_cancel->SetMinSize(wxSize(-1, FromDIP(36))); + m_button_cancel->SetCornerRadius(FromDIP(3)); + + m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_PRIVACY_UPDATE_CANCEL); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) {e.Veto(); }); + + if (btn_style != CONFIRM_AND_CANCEL) + m_button_cancel->Hide(); + else + m_button_cancel->Show(); + + sizer_button->Add(m_button_cancel, 1, wxALL | wxEXPAND, FromDIP(10)); + sizer_button->Add(m_button_ok, 1, wxALL | wxEXPAND, FromDIP(10)); + + m_sizer_right->Add(sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(5)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); + + SetSizer(m_sizer_main); + Layout(); + m_sizer_main->Fit(this); + + CenterOnParent(); + wxGetApp().UpdateDlgDarkUI(this); +} + +wxWebView* PrivacyUpdateDialog::CreateTipView(wxWindow* parent) +{ + wxWebView* tipView = WebView::CreateWebView(parent, ""); + return tipView; +} + +void PrivacyUpdateDialog::OnNavigating(wxWebViewEvent& event) +{ + wxString jump_url = event.GetURL(); + if (jump_url != m_host_url) { + event.Veto(); + wxLaunchDefaultBrowser(jump_url); + } + else { + event.Skip(); + } +} + +bool PrivacyUpdateDialog::ShowReleaseNote(std::string content) +{ + auto script = "window.showMarkdown('" + url_encode(content) + "', true);"; + RunScript(script); + return true; +} + +void PrivacyUpdateDialog::RunScript(std::string script) +{ + WebView::RunScript(m_vebview_release_note, script); + script.clear(); +} + +void PrivacyUpdateDialog::on_show() +{ + wxGetApp().UpdateDlgDarkUI(this); + this->ShowModal(); +} + +void PrivacyUpdateDialog::on_hide() +{ + EndModal(wxID_OK); +} + +void PrivacyUpdateDialog::update_btn_label(wxString ok_btn_text, wxString cancel_btn_text) +{ + m_button_ok->SetLabel(ok_btn_text); + m_button_cancel->SetLabel(cancel_btn_text); + rescale(); +} + +PrivacyUpdateDialog::~PrivacyUpdateDialog() +{ + +} + +void PrivacyUpdateDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + rescale(); +} + +void PrivacyUpdateDialog::rescale() +{ + m_button_ok->Rescale(); + m_button_cancel->Rescale(); +} + +}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.hpp b/src/slic3r/GUI/PrivacyUpdateDialog.hpp new file mode 100644 index 0000000000..b737bcd486 --- /dev/null +++ b/src/slic3r/GUI/PrivacyUpdateDialog.hpp @@ -0,0 +1,56 @@ +#ifndef slic3r_GUI_PrivacyUpdateDialog_hpp_ +#define slic3r_GUI_PrivacyUpdateDialog_hpp_ + +#include "GUI_Utils.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/WebView.hpp" +#include +#include + +namespace Slic3r { namespace GUI { + +wxDECLARE_EVENT(EVT_PRIVACY_UPDATE_CONFIRM, wxCommandEvent); +wxDECLARE_EVENT(EVT_PRIVACY_UPDATE_CANCEL, wxCommandEvent); + +class PrivacyUpdateDialog : public DPIDialog +{ +public: + enum ButtonStyle { + ONLY_CONFIRM = 0, + CONFIRM_AND_CANCEL = 1, + MAX_STYLE_NUM = 2 + }; + PrivacyUpdateDialog( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + enum ButtonStyle btn_style = CONFIRM_AND_CANCEL, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxPD_APP_MODAL| wxCAPTION + ); + wxWebView* CreateTipView(wxWindow* parent); + void OnNavigating(wxWebViewEvent& event); + bool ShowReleaseNote(std::string content); + void RunScript(std::string script); + void set_text(std::string str) { m_mkdown_text = str; }; + void on_show(); + void on_hide(); + void update_btn_label(wxString ok_btn_text, wxString cancel_btn_text); + void rescale(); + ~PrivacyUpdateDialog(); + void on_dpi_changed(const wxRect& suggested_rect); + + wxBoxSizer* m_sizer_main; + wxWebView* m_vebview_release_note{ nullptr }; + Label* m_staticText_release_note{ nullptr }; + Button* m_button_ok; + Button* m_button_cancel; + std::string m_mkdown_text; + std::string m_host_url; +}; + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.cpp b/src/slic3r/GUI/ProjectDirtyStateManager.cpp index 0db5e6f2df..5d32ca3481 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.cpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.cpp @@ -17,7 +17,8 @@ namespace GUI { void ProjectDirtyStateManager::update_from_undo_redo_stack(bool dirty) { - m_plater_dirty = dirty; + if (!m_plater_dirty) + m_plater_dirty = dirty; if (const Plater *plater = wxGetApp().plater(); plater && wxGetApp().initialized()) wxGetApp().mainframe->update_title(); } diff --git a/src/slic3r/GUI/ProjectDirtyStateManager.hpp b/src/slic3r/GUI/ProjectDirtyStateManager.hpp index f17772199f..171d19e219 100644 --- a/src/slic3r/GUI/ProjectDirtyStateManager.hpp +++ b/src/slic3r/GUI/ProjectDirtyStateManager.hpp @@ -14,6 +14,7 @@ public: void reset_after_save(); void reset_initial_presets(); + void set_plater_dirty(bool is_dirty) { m_plater_dirty = is_dirty; } bool is_dirty() const { return m_plater_dirty || m_project_config_dirty || m_presets_dirty; } bool is_presets_dirty() const { return m_presets_dirty; } diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp index 04507202c8..ae09f660e9 100644 --- a/src/slic3r/GUI/RecenterDialog.cpp +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -10,9 +10,6 @@ const wxColour text_color(107, 107, 107); -wxString hint1 = _L("Please home all axes (click "); -wxString hint2 = _L(") to locate the toolhead's position. This prevents device moving beyond the printable boundary and causing equipment wear."); - namespace Slic3r { namespace GUI { RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : DPIDialog(parent, id, _L("Confirm"), pos, size, style) @@ -20,6 +17,9 @@ RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + hint1 = _L("Please home all axes (click "); + hint2 = _L(") to locate the toolhead's position. This prevents device moving beyond the printable boundary and causing equipment wear."); + init_bitmap(); SetBackgroundColour(*wxWHITE); @@ -130,7 +130,7 @@ void RecenterDialog::render(wxDC& dc) { break; } else { - fisrt_line = hint2.SubString(0, i); + fisrt_line = hint2.SubString(0, i - 1); remaining_line = hint2.SubString(i, hint2.length()); break; } diff --git a/src/slic3r/GUI/RecenterDialog.hpp b/src/slic3r/GUI/RecenterDialog.hpp index 566c1d9892..9351682704 100644 --- a/src/slic3r/GUI/RecenterDialog.hpp +++ b/src/slic3r/GUI/RecenterDialog.hpp @@ -15,6 +15,8 @@ private: Button* m_button_close; wxStaticBitmap* m_bitmap_home; ScalableBitmap m_home_bmp; + wxString hint1; + wxString hint2; void init_bitmap(); void OnPaint(wxPaintEvent& event); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 28f8f2264f..bcc6317324 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -26,6 +26,7 @@ namespace Slic3r { namespace GUI { wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); +wxDEFINE_EVENT(EVT_SECONDARY_CHECK_FUNC, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECKBOX_CHANGE, wxCommandEvent); wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent); @@ -57,7 +58,7 @@ ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); - m_text_up_info = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_text_up_info = new Label(this,wxEmptyString); m_text_up_info->SetFont(::Label::Head_14); m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30)); m_text_up_info->Wrap(-1); @@ -93,13 +94,15 @@ void ReleaseNoteDialog::update_release_note(wxString release_note, std::string v { m_text_up_info->SetLabel(wxString::Format(_L("version %s update information :"), version)); wxBoxSizer * sizer_text_release_note = new wxBoxSizer(wxVERTICAL); - auto m_staticText_release_note = new wxStaticText(m_vebview_release_note, wxID_ANY, release_note, wxDefaultPosition, wxDefaultSize, 0); - m_staticText_release_note->SetForegroundColour(*wxBLACK); + auto m_staticText_release_note = new ::Label(m_vebview_release_note, release_note); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(530), -1)); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(530), -1)); m_staticText_release_note->Wrap(FromDIP(530)); sizer_text_release_note->Add(m_staticText_release_note, 0, wxALL, 5); m_vebview_release_note->SetSizer(sizer_text_release_note); m_vebview_release_note->Layout(); m_vebview_release_note->Fit(); + wxGetApp().UpdateDlgDarkUI(this); } UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) @@ -124,7 +127,7 @@ UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); - m_text_up_info = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_text_up_info = new Label(this,wxEmptyString); m_text_up_info->SetFont(::Label::Head_13); m_text_up_info->SetMaxSize(wxSize(FromDIP(260), -1)); m_text_up_info->Wrap(FromDIP(260)); @@ -133,10 +136,9 @@ UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) operation_tips = new ::Label(this, _L("Click OK to update the Network plug-in when Bambu Studio launches next time.")); operation_tips->SetFont(::Label::Body_12); - operation_tips->SetSize(wxSize(FromDIP(260), -1)); + operation_tips->SetMinSize(wxSize(FromDIP(260), -1)); + operation_tips->SetMaxSize(wxSize(FromDIP(260), -1)); operation_tips->Wrap(FromDIP(260)); - operation_tips->SetForegroundColour(*wxBLACK); - m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); m_vebview_release_note->SetScrollRate(5, 5); @@ -146,7 +148,7 @@ UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) auto sizer_button = new wxBoxSizer(wxHORIZONTAL); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), @@ -224,8 +226,8 @@ void UpdatePluginDialog::update_info(std::string json_path) version_str = j["version"]; description_str = j["description"]; } - catch(nlohmann::detail::parse_error &err) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<SetMinSize(wxSize(FromDIP(260), -1)); m_text_up_info->SetMaxSize(wxSize(FromDIP(260), -1)); m_text_up_info->Wrap(FromDIP(260)); wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); auto m_text_label = new ::Label(m_vebview_release_note, description); m_text_label->SetFont(::Label::Body_13); - m_text_label->SetForegroundColour(*wxBLACK); + m_text_label->SetMinSize(wxSize(FromDIP(235), -1)); m_text_label->SetMaxSize(wxSize(FromDIP(235), -1)); m_text_label->Wrap(FromDIP(235)); @@ -246,6 +249,7 @@ void UpdatePluginDialog::update_info(std::string json_path) m_vebview_release_note->SetSizer(sizer_text_release_note); m_vebview_release_note->Layout(); m_vebview_release_note->Fit(); + wxGetApp().UpdateDlgDarkUI(this); Layout(); Fit(); } @@ -274,7 +278,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); - m_text_up_info = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_text_up_info = new Label(this,wxEmptyString); m_text_up_info->SetFont(::Label::Head_14); m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30)); m_text_up_info->Wrap(-1); @@ -297,8 +301,9 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_vebview_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); //m_vebview_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); + fs::path ph(data_dir()); - ph /= "resources/tooltip/common/releasenote.html"; + ph /= "resources/tooltip/releasenote.html"; if (!fs::exists(ph)) { ph = resources_dir(); ph /= "tooltip/releasenote.html"; @@ -496,8 +501,9 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve m_simplebook_release_note->SetSelection(0); m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); - auto m_staticText_release_note = new wxStaticText(m_scrollwindows_release_note, wxID_ANY, release_note, wxDefaultPosition, wxDefaultSize, 0); - m_staticText_release_note->SetForegroundColour(*wxBLACK); + auto m_staticText_release_note = new ::Label(m_scrollwindows_release_note, release_note); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(560), -1)); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(560), -1)); m_staticText_release_note->Wrap(FromDIP(530)); sizer_text_release_note->Add(m_staticText_release_note, 0, wxALL, 5); m_scrollwindows_release_note->SetSizer(sizer_text_release_note); @@ -506,6 +512,8 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve SetMinSize(GetSize()); SetMaxSize(GetSize()); //} + + wxGetApp().UpdateDlgDarkUI(this); Layout(); Fit(); } @@ -518,7 +526,7 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons SetBackgroundColour(*wxWHITE); m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(480), 1)); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); @@ -530,8 +538,8 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); m_vebview_release_note->SetScrollRate(0, 5); m_vebview_release_note->SetBackgroundColour(*wxWHITE); - m_vebview_release_note->SetMinSize(wxSize(FromDIP(280), FromDIP(280))); - m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(35)); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), FromDIP(380))); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); auto bottom_sizer = new wxBoxSizer(wxVERTICAL); @@ -544,12 +552,15 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons if (not_show_again_check) { + auto checkbox_sizer = new wxBoxSizer(wxHORIZONTAL); m_show_again_checkbox = new wxCheckBox(this, wxID_ANY, _L("Don't show again"), wxDefaultPosition, wxDefaultSize, 0); m_show_again_checkbox->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, [this](wxCommandEvent& e) { not_show_again = !not_show_again; m_show_again_checkbox->SetValue(not_show_again); }); - bottom_sizer->Add(m_show_again_checkbox, 0, wxALL, FromDIP(5)); + checkbox_sizer->Add(FromDIP(15), 0, 0, 0); + checkbox_sizer->Add(m_show_again_checkbox, 0, wxALL, FromDIP(5)); + bottom_sizer->Add(checkbox_sizer, 0, wxBOTTOM | wxEXPAND, 0); } m_button_ok = new Button(this, _L("Confirm")); m_button_ok->SetBackgroundColor(btn_bg_green); @@ -576,29 +587,52 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons m_button_cancel->SetCornerRadius(FromDIP(12)); m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - wxCommandEvent evt(EVT_SECONDARY_CHECK_CANCEL); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - this->on_hide(); + wxCommandEvent evt(EVT_SECONDARY_CHECK_CANCEL); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); }); - if (btn_style != CONFIRM_AND_CANCEL) - m_button_cancel->Hide(); - else + m_button_fn = new Button(this, _L("Done")); + m_button_fn->SetBackgroundColor(btn_bg_white); + m_button_fn->SetBorderColor(wxColour(38, 46, 48)); + m_button_fn->SetFont(Label::Body_12); + m_button_fn->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_fn->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_fn->SetCornerRadius(FromDIP(12)); + + m_button_fn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_FUNC)); + e.Skip(); + }); + + if (btn_style == CONFIRM_AND_CANCEL) { m_button_cancel->Show(); + m_button_fn->Hide(); + } else if (btn_style == CONFIRM_AND_FUNC) { + m_button_cancel->Hide(); + m_button_fn->Show(); + } else { + m_button_cancel->Hide(); + m_button_fn->Hide(); + } sizer_button->AddStretchSpacer(); + sizer_button->Add(m_button_fn, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); + sizer_button->Add(FromDIP(5),0, 0, 0); bottom_sizer->Add(sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, 0); - m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(35)); - m_sizer_right->Add(0, 0, 0, wxTOP,FromDIP(18)); + m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + m_sizer_right->Add(0, 0, 0, wxTOP,FromDIP(10)); + + m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->on_hide();}); - SetSizer(m_sizer_right); + SetSizer(m_sizer_main); Layout(); m_sizer_main->Fit(this); @@ -606,6 +640,16 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons wxGetApp().UpdateFrameDarkUI(this); } +void SecondaryCheckDialog::post_event(wxCommandEvent&& event) +{ + if (event_parent) { + event.SetString(""); + event.SetEventObject(event_parent); + wxPostEvent(event_parent, event); + event.Skip(); + } +} + void SecondaryCheckDialog::update_text(wxString text) { wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); @@ -613,11 +657,10 @@ void SecondaryCheckDialog::update_text(wxString text) if (!m_staticText_release_note) { m_staticText_release_note = new Label(m_vebview_release_note, text); } + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(330), -1)); m_staticText_release_note->SetLabelText(text); - m_staticText_release_note->SetSize(wxSize(FromDIP(260), -1)); - m_staticText_release_note->SetMaxSize(wxSize(FromDIP(260), -1)); - m_staticText_release_note->SetMinSize(wxSize(FromDIP(260), -1)); - m_staticText_release_note->Wrap(FromDIP(260)); + m_staticText_release_note->Wrap(FromDIP(330)); wxBoxSizer* top_blank_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* bottom_blank_sizer = new wxBoxSizer(wxVERTICAL); @@ -629,14 +672,19 @@ void SecondaryCheckDialog::update_text(wxString text) sizer_text_release_note->Add(bottom_blank_sizer, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); m_vebview_release_note->SetSizer(sizer_text_release_note); auto text_size = m_staticText_release_note->GetSize(); - if (text_size.y < FromDIP(280)) - m_vebview_release_note->SetMinSize(wxSize(FromDIP(280), text_size.y + FromDIP(25))); - else - m_vebview_release_note->SetMinSize(wxSize(FromDIP(300), FromDIP(280))); + if (text_size.y < FromDIP(360)) + m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), text_size.y + FromDIP(25))); + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), FromDIP(360))); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetLabelText(text); + m_staticText_release_note->Wrap(FromDIP(330)); + } m_vebview_release_note->Layout(); - m_sizer_main->Layout(); - m_sizer_main->Fit(this); + Layout(); + Fit(); } void SecondaryCheckDialog::on_show() @@ -664,6 +712,33 @@ void SecondaryCheckDialog::on_hide() } } +void SecondaryCheckDialog::update_title_style(wxString title, SecondaryCheckDialog::ButtonStyle style, wxWindow* parent) +{ + SetTitle(title); + + event_parent = parent; + + if (style == CONFIRM_AND_CANCEL) { + m_button_cancel->Show(); + m_button_fn->Hide(); + } + else if (style == CONFIRM_AND_FUNC) { + m_button_cancel->Hide(); + m_button_fn->Show(); + } + else { + m_button_cancel->Hide(); + m_button_fn->Hide(); + } + Layout(); +} + +void SecondaryCheckDialog::update_func_btn(wxString func_btn_text) +{ + m_button_fn->SetLabel(func_btn_text); + rescale(); +} + void SecondaryCheckDialog::update_btn_label(wxString ok_btn_text, wxString cancel_btn_text) { m_button_ok->SetLabel(ok_btn_text); @@ -695,7 +770,7 @@ ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id SetBackgroundColour(*wxWHITE); m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(480), 1)); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); @@ -707,8 +782,8 @@ ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); m_vebview_release_note->SetScrollRate(0, 5); m_vebview_release_note->SetBackgroundColour(*wxWHITE); - m_vebview_release_note->SetMinSize(wxSize(FromDIP(280), FromDIP(280))); - m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(35)); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), FromDIP(380))); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); auto bottom_sizer = new wxBoxSizer(wxVERTICAL); @@ -721,12 +796,15 @@ ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id if (not_show_again_check) { + auto checkbox_sizer = new wxBoxSizer(wxHORIZONTAL); m_show_again_checkbox = new wxCheckBox(this, wxID_ANY, _L("Don't show again"), wxDefaultPosition, wxDefaultSize, 0); m_show_again_checkbox->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, [this](wxCommandEvent& e) { not_show_again = !not_show_again; m_show_again_checkbox->SetValue(not_show_again); - }); - bottom_sizer->Add(m_show_again_checkbox, 0, wxALL, FromDIP(5)); + }); + checkbox_sizer->Add(FromDIP(15), 0, 0, 0); + checkbox_sizer->Add(m_show_again_checkbox, 0, wxALL, FromDIP(5)); + bottom_sizer->Add(checkbox_sizer, 0, wxBOTTOM | wxEXPAND, 0); } m_button_ok = new Button(this, _L("Confirm")); m_button_ok->SetBackgroundColor(btn_bg_green); @@ -767,15 +845,18 @@ ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id sizer_button->AddStretchSpacer(); sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); + sizer_button->Add(FromDIP(5),0, 0, 0); bottom_sizer->Add(sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, 0); - m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(35)); - m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(18)); + m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(20)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->on_hide(); }); - SetSizer(m_sizer_right); + SetSizer(m_sizer_main); Layout(); m_sizer_main->Fit(this); @@ -786,14 +867,13 @@ ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id void ConfirmBeforeSendDialog::update_text(wxString text) { wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); - if (!m_staticText_release_note) + if (!m_staticText_release_note){ m_staticText_release_note = new Label(m_vebview_release_note, text); - else - m_staticText_release_note->SetLabelText(text); - m_staticText_release_note->Wrap(FromDIP(260)); - m_staticText_release_note->SetSize(wxSize(FromDIP(260), -1)); - m_staticText_release_note->SetMaxSize(wxSize(FromDIP(260), -1)); - m_staticText_release_note->SetMinSize(wxSize(FromDIP(260), -1)); + } + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetLabelText(text); + m_staticText_release_note->Wrap(FromDIP(330)); wxBoxSizer* top_blank_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* bottom_blank_sizer = new wxBoxSizer(wxVERTICAL); @@ -805,14 +885,19 @@ void ConfirmBeforeSendDialog::update_text(wxString text) sizer_text_release_note->Add(bottom_blank_sizer, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); m_vebview_release_note->SetSizer(sizer_text_release_note); auto text_size = m_staticText_release_note->GetSize(); - if (text_size.y < FromDIP(280)) - m_vebview_release_note->SetMinSize(wxSize(FromDIP(280), text_size.y + FromDIP(25))); - else - m_vebview_release_note->SetMinSize(wxSize(FromDIP(300), FromDIP(280))); + if (text_size.y < FromDIP(360)) + m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), text_size.y + FromDIP(25))); + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), FromDIP(360))); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetLabelText(text); + m_staticText_release_note->Wrap(FromDIP(330)); + } m_vebview_release_note->Layout(); - m_sizer_main->Layout(); - m_sizer_main->Fit(this); + Layout(); + Fit(); } void ConfirmBeforeSendDialog::on_show() diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index ea2051a813..a90c455074 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "AmsMappingPopup.hpp" #include "GUI_Utils.hpp" @@ -39,6 +40,7 @@ namespace Slic3r { namespace GUI { wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); +wxDECLARE_EVENT(EVT_SECONDARY_CHECK_FUNC, wxCommandEvent); class ReleaseNoteDialog : public DPIDialog { @@ -49,7 +51,7 @@ public: void on_dpi_changed(const wxRect &suggested_rect) override; void update_release_note(wxString release_note, std::string version); - wxStaticText * m_text_up_info{nullptr}; + Label * m_text_up_info{nullptr}; wxScrolledWindow *m_vebview_release_note {nullptr}; }; @@ -62,7 +64,7 @@ public: void on_dpi_changed(const wxRect& suggested_rect) override; void update_info(std::string json_path); - wxStaticText* m_text_up_info{ nullptr }; + Label* m_text_up_info{ nullptr }; Label* operation_tips{ nullptr }; wxScrolledWindow* m_vebview_release_note{ nullptr }; }; @@ -85,12 +87,12 @@ public: std::vector splitWithStl(std::string str, std::string pattern); wxStaticBitmap* m_brand{nullptr}; - wxStaticText * m_text_up_info{nullptr}; + Label * m_text_up_info{nullptr}; wxWebView* m_vebview_release_note{nullptr}; wxSimplebook* m_simplebook_release_note{nullptr}; wxScrolledWindow* m_scrollwindows_release_note{nullptr}; wxBoxSizer * sizer_text_release_note{nullptr}; - wxStaticText * m_staticText_release_note{nullptr}; + Label * m_staticText_release_note{nullptr}; wxCheckBox* m_remind_choice; Button* m_button_ok; Button* m_button_cancel; @@ -98,11 +100,14 @@ public: class SecondaryCheckDialog : public DPIFrame { +private: + wxWindow* event_parent { nullptr }; public: enum ButtonStyle { - ONLY_CONFIRM = 0, - CONFIRM_AND_CANCEL = 1, - MAX_STYLE_NUM = 2 + ONLY_CONFIRM = 0, + CONFIRM_AND_CANCEL = 1, + CONFIRM_AND_FUNC = 2, + MAX_STYLE_NUM = 3 }; SecondaryCheckDialog( wxWindow* parent, @@ -118,6 +123,9 @@ public: void on_show(); void on_hide(); void update_btn_label(wxString ok_btn_text, wxString cancel_btn_text); + void update_title_style(wxString title, SecondaryCheckDialog::ButtonStyle style, wxWindow* parent = nullptr); + void update_func_btn(wxString func_btn_text); + void post_event(wxCommandEvent&& event); void rescale(); ~SecondaryCheckDialog(); void on_dpi_changed(const wxRect& suggested_rect); @@ -125,8 +133,9 @@ public: Label* m_staticText_release_note {nullptr}; wxBoxSizer* m_sizer_main; wxScrolledWindow *m_vebview_release_note {nullptr}; - Button* m_button_ok; - Button* m_button_cancel; + Button* m_button_ok { nullptr }; + Button* m_button_cancel { nullptr }; + Button* m_button_fn { nullptr }; wxCheckBox* m_show_again_checkbox; bool not_show_again = false; std::string show_again_config_text = ""; @@ -161,7 +170,7 @@ public: wxBoxSizer* m_sizer_main; wxScrolledWindow* m_vebview_release_note{ nullptr }; - wxStaticText* m_staticText_release_note{ nullptr }; + Label* m_staticText_release_note{ nullptr }; Button* m_button_ok; Button* m_button_cancel; wxCheckBox* m_show_again_checkbox; diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index bb9c18060b..49a4c4a9a1 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -74,32 +74,30 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox // combo_sizer->Add(m_combo, 1, wxEXPAND, BORDER_W); - StateColor box_border_colour(std::pair(wxColour(238, 238, 238), StateColor::Normal)); - m_input_area = new StaticBox(m_parent, wxID_ANY, wxDefaultPosition, SAVE_PRESET_DIALOG_INPUT_SIZE, wxBORDER_NONE); - m_input_area->SetMinSize(SAVE_PRESET_DIALOG_INPUT_SIZE); - m_input_area->SetBorderColor(box_border_colour); - m_input_area->SetBackgroundColor(box_border_colour); - m_input_area->SetCornerRadius(FromDIP(3)); wxBoxSizer *input_sizer_h = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *input_sizer_v = new wxBoxSizer(wxVERTICAL); - m_input_ctrl = new wxTextCtrl(m_input_area, -1, from_u8(preset_name), wxDefaultPosition, wxSize(SAVE_PRESET_DIALOG_INPUT_SIZE.x - 2, SAVE_PRESET_DIALOG_INPUT_SIZE.y - 2), 0 | wxBORDER_NONE); - //m_input_ctrl->SetBackgroundColour(GetParent()->GetBackgroundColour()); + /*m_input_ctrl = new wxTextCtrl(this, wxID_ANY, from_u8(preset_name), wxDefaultPosition, wxDefaultSize,wxBORDER_NONE);*/ + + + m_input_ctrl = new ::TextInput(parent, from_u8(preset_name), wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + m_input_ctrl->SetBackgroundColor(input_bg); m_input_ctrl->Bind(wxEVT_TEXT, [this](wxCommandEvent &) { update(); }); + m_input_ctrl->SetMinSize(wxSize(SAVE_PRESET_DIALOG_INPUT_SIZE)); + m_input_ctrl->SetMaxSize(wxSize(SAVE_PRESET_DIALOG_INPUT_SIZE)); - input_sizer_v->Add(m_input_ctrl, 0, wxALL, 1); - input_sizer_h->Add(input_sizer_v, 0, wxALL, 1); - - m_input_area->SetSizer(input_sizer_h); - m_input_area->Layout(); + input_sizer_v->Add(m_input_ctrl, 1, wxEXPAND, 0); + input_sizer_h->Add(input_sizer_v, 1, wxALIGN_CENTER, 0); + input_sizer_h->Layout(); m_valid_label = new wxStaticText(m_parent, wxID_ANY, ""); m_valid_label->SetForegroundColour(wxColor(255, 111, 0)); sizer->Add(label_top, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, BORDER_W); - sizer->Add(m_input_area, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, BORDER_W); + sizer->Add(input_sizer_h, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, BORDER_W); sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT | wxRIGHT, BORDER_W); if (m_type == Preset::TYPE_PRINTER) m_parent->add_info_for_edit_ph_printer(sizer); @@ -176,7 +174,7 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox void SavePresetDialog::Item::update() { - m_preset_name = into_u8(m_input_ctrl->GetValue()); + m_preset_name = into_u8(m_input_ctrl->GetTextCtrl()->GetValue()); m_valid_type = Valid; wxString info_line; @@ -255,7 +253,6 @@ void SavePresetDialog::Item::update() } m_valid_label->SetLabel(info_line); - m_input_area->Refresh(); m_valid_label->Show(!info_line.IsEmpty()); // update_valid_bmp(); @@ -395,7 +392,7 @@ std::string SavePresetDialog::get_name(Preset::Type type) void SavePresetDialog::input_name_from_other(std::string new_preset_name) { //only work for one-item Item* curr_item = m_items[0]; - curr_item->m_input_ctrl->SetValue(new_preset_name); + curr_item->m_input_ctrl->GetTextCtrl()->SetValue(new_preset_name); } void SavePresetDialog::confirm_from_other() { diff --git a/src/slic3r/GUI/SavePresetDialog.hpp b/src/slic3r/GUI/SavePresetDialog.hpp index 77268bffeb..3dc42d5192 100644 --- a/src/slic3r/GUI/SavePresetDialog.hpp +++ b/src/slic3r/GUI/SavePresetDialog.hpp @@ -56,7 +56,6 @@ class SavePresetDialog : public DPIDialog //BBS: add project embedded preset relate logic bool save_to_project() const { return m_save_to_project; } - StaticBox* m_input_area {nullptr}; Preset::Type m_type; ValidationType m_valid_type; std::string m_preset_name; @@ -64,7 +63,7 @@ class SavePresetDialog : public DPIDialog SavePresetDialog* m_parent {nullptr}; wxStaticBitmap* m_valid_bmp {nullptr}; wxComboBox* m_combo {nullptr}; - wxTextCtrl* m_input_ctrl {nullptr}; + TextInput* m_input_ctrl {nullptr}; wxStaticText* m_valid_label {nullptr}; PresetCollection* m_presets {nullptr}; diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 03eeeabd72..f4965cb9f5 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -522,7 +522,7 @@ static const std::map icon_idxs = { }; SearchDialog::SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindow *parent, TextInput *input, wxWindow *search_btn) - : wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), searcher(searcher) + : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), searcher(searcher) { m_event_tag = parent; search_line = input; @@ -622,7 +622,7 @@ void SearchDialog::Popup(wxPoint position /*= wxDefaultPosition*/) search_line->GetTextCtrl()->SetValue(wxString("")); //const std::string &line = searcher->search_string(); //searcher->search(into_u8(line), true); - wxPopupTransientWindow::Popup(); + PopupWindow::Popup(); search_line->SetFocus(); update_list(); } @@ -649,7 +649,7 @@ void SearchDialog::Dismiss() void SearchDialog::Die() { - wxPopupTransientWindow::Dismiss(); + PopupWindow::Dismiss(); wxCommandEvent event(wxCUSTOMEVT_EXIT_SEARCH); wxPostEvent(search_line, event); } diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp index 52ac6b35fb..6331609ca5 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -20,6 +20,7 @@ #include "libslic3r/Preset.hpp" #include "Widgets/ScrolledWindow.hpp" #include "Widgets/TextInput.hpp" +#include "Widgets/PopupWindow.hpp" namespace Slic3r { @@ -175,7 +176,7 @@ public: // SearchDialog //------------------------------------------ class SearchListModel; -class SearchDialog : public wxPopupTransientWindow +class SearchDialog : public PopupWindow { public: wxString search_str; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 884792b37e..c63725cda7 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -33,6 +33,7 @@ wxDEFINE_EVENT(EVT_UNBIND_MACHINE, wxCommandEvent); wxDEFINE_EVENT(EVT_DISSMISS_MACHINE_LIST, wxCommandEvent); wxDEFINE_EVENT(EVT_CONNECT_LAN_PRINT, wxCommandEvent); wxDEFINE_EVENT(EVT_EDIT_PRINT_NAME, wxCommandEvent); +wxDEFINE_EVENT(EVT_CLEAR_IPADDRESS, wxCommandEvent); #define INITIAL_NUMBER_OF_MACHINES 0 #define LIST_REFRESH_INTERVAL 200 @@ -256,9 +257,21 @@ void MachineObjectPanel::doRender(wxDC &dc) wxString dev_name = ""; if (m_info) { dev_name = from_u8(m_info->dev_name); + + if (m_state == PrinterState::IN_LAN) { + dev_name += _L("(LAN)"); + } } auto sizet = dc.GetTextExtent(dev_name); - auto text_end = size.x - m_unbind_img.GetBmpSize().x - 30; + auto text_end = 0; + + if (m_show_edit) { + text_end = size.x - m_unbind_img.GetBmpSize().x - 30; + } + else { + text_end = size.x - m_unbind_img.GetBmpSize().x; + } + wxString finally_name = dev_name; if (sizet.x > (text_end - left)) { auto limit_width = text_end - left - dc.GetTextExtent("...").x - 15; @@ -374,7 +387,7 @@ void MachineObjectPanel::on_mouse_left_up(wxMouseEvent &evt) } SelectMachinePopup::SelectMachinePopup(wxWindow *parent) - : wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), m_dismiss(false) + : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), m_dismiss(false) { #ifdef __WINDOWS__ SetDoubleBuffered(true); @@ -468,7 +481,7 @@ void SelectMachinePopup::Popup(wxWindow *WXUNUSED(focus)) } wxPostEvent(this, wxTimerEvent()); - wxPopupTransientWindow::Popup(); + PopupWindow::Popup(); } void SelectMachinePopup::OnDismiss() @@ -494,7 +507,7 @@ void SelectMachinePopup::OnDismiss() } bool SelectMachinePopup::ProcessLeftDown(wxMouseEvent &event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } bool SelectMachinePopup::Show(bool show) { @@ -509,7 +522,7 @@ bool SelectMachinePopup::Show(bool show) { m_other_list_machine_panel[j]->mPanel->Hide(); } } - return wxPopupTransientWindow::Show(show); + return PopupWindow::Show(show); } wxWindow *SelectMachinePopup::create_title_panel(wxString text) @@ -738,8 +751,11 @@ void SelectMachinePopup::update_user_devices() } op->Bind(EVT_UNBIND_MACHINE, [this, dev, mobj](wxCommandEvent& e) { dev->set_selected_machine(""); - if (mobj) + if (mobj) { mobj->set_access_code(""); + mobj->set_user_access_code(""); + } + MessageDialog msg_wingow(nullptr, _L("Log out successful."), "", wxAPPLY | wxOK); if (msg_wingow.ShowModal() == wxOK) { return; } }); @@ -1236,7 +1252,9 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) if (e.GetInt() == 1) { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; - m_comboBox_printer->SetValue(dev->get_selected_machine()->dev_name); + if (dev->get_selected_machine()) { + m_comboBox_printer->SetValue(dev->get_selected_machine()->dev_name + "(LAN)"); + } } }); @@ -1923,6 +1941,7 @@ void SelectMachineDialog::init_model() void SelectMachineDialog::init_bind() { Bind(wxEVT_TIMER, &SelectMachineDialog::on_timer, this); + Bind(EVT_CLEAR_IPADDRESS, &SelectMachineDialog::clear_ip_address_config, this); } void SelectMachineDialog::init_timer() @@ -1952,6 +1971,7 @@ bool SelectMachineDialog::is_same_printer_model() if (!dev) return result; MachineObject* obj_ = dev->get_selected_machine(); + assert(obj_->dev_id == m_printer_last_select); if (obj_ == nullptr) { return result; @@ -1976,6 +1996,12 @@ void SelectMachineDialog::show_errors(wxString &info) void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) { + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject* obj_ = dev->get_selected_machine(); + if (!obj_) return; + + std::vector confirm_text; confirm_text.push_back(_L("Please check the following infomation and click Confirm to continue sending print:") + "\n"); @@ -1991,11 +2017,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) //Check slice warnings bool has_slice_warnings = false; PartPlate* plate = m_plater->get_partplate_list().get_curr_plate(); - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - - if(!dev) return; - - MachineObject* obj_ = dev->get_selected_machine(); + for (auto warning : plate->get_slice_result()->warnings) { if (warning.msg == BED_TEMP_TOO_HIGH_THAN_FILAMENT) { if ((obj_->printer_type == "BL-P001" || obj_->printer_type == "BL-P002")) { @@ -2004,6 +2026,12 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) } } else { + wxString error_info = Plater::get_slice_warning_string(warning); + if (error_info.IsEmpty()) { + error_info = wxString::Format("%s\n", warning.msg); + confirm_text.push_back(error_info + "\n"); + } else + confirm_text.push_back(error_info + "\n"); has_slice_warnings = true; } } @@ -2122,7 +2150,18 @@ void SelectMachineDialog::on_ok() // get ams_mapping_result std::string ams_mapping_array; std::string ams_mapping_info; - get_ams_mapping_result(ams_mapping_array, ams_mapping_info); + if (ams_check->GetValue()) + get_ams_mapping_result(ams_mapping_array, ams_mapping_info); + else { + json mapping_info_json = json::array(); + json item; + if (m_filaments.size() > 0) { + item["sourceColor"] = m_filaments[0].color.substr(1, 6) + "FF"; + item["filamentType"] = m_filaments[0].type; + mapping_info_json.push_back(item); + ams_mapping_info = mapping_info_json.dump(); + } + } result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool &cancel) { if (this->m_is_canceled) return; @@ -2160,9 +2199,11 @@ void SelectMachineDialog::on_ok() m_print_job = std::make_shared(m_status_bar, m_plater, m_printer_last_select); m_print_job->m_dev_ip = obj_->dev_ip; + m_print_job->m_ftp_folder = obj_->get_ftp_folder(); m_print_job->m_access_code = obj_->get_access_code(); m_print_job->m_local_use_ssl = obj_->local_use_ssl; m_print_job->connection_type = obj_->connection_type(); + m_print_job->cloud_print_only= obj_->is_cloud_print_only; m_print_job->set_project_name(m_current_project_name.utf8_string()); if (obj_->is_support_ams_mapping()) { @@ -2175,10 +2216,6 @@ void SelectMachineDialog::on_ok() m_print_job->has_sdcard = obj_->has_sdcard(); - if (obj_->is_only_support_cloud_print()) { - m_print_job->cloud_print_only = true; - } - bool timelapse_option = select_timelapse->IsShown() ? m_checkbox_list["timelapse"]->GetValue() : true; @@ -2201,11 +2238,21 @@ void SelectMachineDialog::on_ok() m_print_job->on_success([this]() { finish_mode(); }); - wxCommandEvent evt(m_plater->get_print_finished_event()); + m_print_job->on_check_ip_address_fail([this]() { + wxCommandEvent* evt = new wxCommandEvent(EVT_CLEAR_IPADDRESS); + wxQueueEvent(this, evt); + wxGetApp().show_ip_address_enter_dialog(); + }); + m_print_job->start(); BOOST_LOG_TRIVIAL(info) << "print_job: start print job"; } +void SelectMachineDialog::clear_ip_address_config(wxCommandEvent& e) +{ + prepare_mode(); +} + void SelectMachineDialog::update_user_machine_list() { NetworkAgent* m_agent = wxGetApp().getAgent(); @@ -2546,7 +2593,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) obj->command_request_push_all(); dev->set_selected_machine(m_printer_last_select); // Has changed machine unrecoverably - GUI::wxGetApp().sidebar().load_ams_list(obj->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); update_select_layout(obj); } else { BOOST_LOG_TRIVIAL(error) << "on_selection_changed dev_id not found"; diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index c49ccf15a8..bd00b4a5bb 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -37,6 +37,7 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" #include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" #include #include @@ -179,13 +180,13 @@ public: class ThumbnailPanel; -class SelectMachinePopup : public wxPopupTransientWindow +class SelectMachinePopup : public PopupWindow { public: SelectMachinePopup(wxWindow *parent); ~SelectMachinePopup(); - // wxPopupTransientWindow virtual methods are all overridden to log them + // PopupWindow virtual methods are all overridden to log them virtual void Popup(wxWindow *focus = NULL) wxOVERRIDE; virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE; @@ -425,7 +426,8 @@ protected: void show_errors(wxString &info); void on_ok_btn(wxCommandEvent &event); void on_ok(); - void on_refresh(wxCommandEvent &event); + void clear_ip_address_config(wxCommandEvent& e); + void on_refresh(wxCommandEvent& event); void on_set_finish_mapping(wxCommandEvent &evt); void on_print_job_cancel(wxCommandEvent &evt); void set_default(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 6f404bfbc7..dea947993a 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -428,7 +428,7 @@ void Selection::remove_curr_plate() clear(); for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (plate && plate->contain_instance_totally(obj_idx, 0)) { + if (plate && plate->contain_instance(obj_idx, 0)) { std::vector volume_idxs = get_volume_idxs_from_object(obj_idx); do_add_volumes(volume_idxs); } diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 6352ee993e..4777174bb5 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -571,10 +571,14 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event) if (!dev) return; MachineObject *obj_ = dev->get_selected_machine(); - assert(obj_->dev_id == m_printer_last_select); + if (obj_ == nullptr) { + m_printer_last_select = ""; + m_comboBox_printer->SetTextLabel(""); return; } + assert(obj_->dev_id == m_printer_last_select); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", print_job: for send task, current printer id = " << m_printer_last_select << std::endl; show_status(PrintDialogStatus::PrintStatusSending); @@ -649,18 +653,14 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event) m_send_job = std::make_shared(m_status_bar, m_plater, m_printer_last_select); m_send_job->m_dev_ip = obj_->dev_ip; - - m_send_job->m_access_code = obj_->get_access_code(); + m_send_job->m_access_code = obj_->get_access_code(); m_send_job->m_local_use_ssl = obj_->local_use_ssl; m_send_job->connection_type = obj_->connection_type(); m_send_job->cloud_print_only = true; m_send_job->has_sdcard = obj_->has_sdcard(); m_send_job->set_project_name(m_current_project_name.utf8_string()); - /*m_send_job->on_check_ip_address_success([this, obj_]() { - wxCommandEvent* evt = new wxCommandEvent(EVT_CLEAR_IPADDRESS); - wxQueueEvent(this, evt); - });*/ + enable_prepare_mode = false; m_send_job->on_check_ip_address_fail([this]() { wxCommandEvent* evt = new wxCommandEvent(EVT_CLEAR_IPADDRESS); @@ -668,12 +668,18 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event) wxGetApp().show_ip_address_enter_dialog(); }); - enable_prepare_mode = false; - m_send_job->start(); + if (obj_->is_lan_mode_printer()) { + m_send_job->set_check_mode(); + m_send_job->check_and_continue(); + m_send_job->start(); + } + else { + m_send_job->start(); + } + BOOST_LOG_TRIVIAL(info) << "send_job: send print job"; } - void SendToPrinterDialog::clear_ip_address_config(wxCommandEvent& e) { enable_prepare_mode = true; @@ -1052,7 +1058,7 @@ void SendToPrinterDialog::show_status(PrintDialogStatus status, std::vectorSetBackgroundColour(wxColour(166, 169, 170)); - m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); - - wxBoxSizer* m_sizer_radiobutton = new wxBoxSizer(wxVERTICAL); - - m_rb_default_plate = create_item_radiobox(_L("Same as Global Bed Type"), this, wxEmptyString, FromDIP(5), btDefault); - m_sizer_radiobutton->Add(m_rb_default_plate->GetParent(), 1, wxALL, FromDIP(5)); - m_rb_cool_plate = create_item_radiobox(_L("Cool Plate"), this, wxEmptyString, FromDIP(5), btPC); - m_sizer_radiobutton->Add(m_rb_cool_plate->GetParent(), 1, wxALL, FromDIP(5)); - m_rb_eng_plate = create_item_radiobox(_L("Engineering Plate"), this, wxEmptyString, FromDIP(5), btEP); - m_sizer_radiobutton->Add(m_rb_eng_plate->GetParent(), 1, wxALL, FromDIP(5) ); - m_rb_high_temp_plate = create_item_radiobox(_L("High Temp Plate"), this, wxEmptyString, FromDIP(5), btPEI); - m_sizer_radiobutton->Add(m_rb_high_temp_plate->GetParent(), 1, wxALL, FromDIP(5)); - m_rb_texture_pei_plate = create_item_radiobox(_L("Textured PEI Plate"), this, wxEmptyString, FromDIP(5), btPTE); - m_sizer_radiobutton->Add(m_rb_texture_pei_plate->GetParent(), 1, wxALL, FromDIP(5)); - - m_sizer_main->Add(m_sizer_radiobutton, 0, wxEXPAND | wxALL, FromDIP(10)); - - auto sizer_button = new wxBoxSizer(wxHORIZONTAL); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_button_ok = new Button(this, _L("OK")); - m_button_ok->SetBackgroundColor(btn_bg_green); - m_button_ok->SetBorderColor(*wxWHITE); - m_button_ok->SetTextColor(wxColour("#FFFFFE")); - m_button_ok->SetFont(Label::Body_12); - m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - int len = radio_buttons.size(); - for (int i = 0; i < len; ++i) { - if (radio_buttons[i]->GetValue()) { - wxCommandEvent evt(EVT_SET_BED_TYPE_CONFIRM, GetId()); - evt.SetInt(radio_buttons[i]->GetBedType()); - e.SetEventObject(this); - GetEventHandler()->ProcessEvent(evt); - break; - } - } - if (this->IsModal()) - EndModal(wxID_YES); - else - this->Close(); - }); - - m_button_cancel = new Button(this, _L("Cancel")); - m_button_cancel->SetBackgroundColor(btn_bg_white); - m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_cancel->SetFont(Label::Body_12); - m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - if (this->IsModal()) - EndModal(wxID_NO); - else - this->Close(); - }); - - sizer_button->AddStretchSpacer(); - sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); - sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); - - m_sizer_main->Add(sizer_button, 0, wxEXPAND, FromDIP(20)); - - SetSizer(m_sizer_main); - Layout(); - m_sizer_main->Fit(this); - - CenterOnParent(); - - wxGetApp().UpdateDlgDarkUI(this); -} - -SetBedTypeDialog::~SetBedTypeDialog() -{ - -} - -BedTypeRadioBox* SetBedTypeDialog::create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, BedType bed_type) -{ - wxWindow *item = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(28))); - item->SetBackgroundColour(*wxWHITE); - - BedTypeRadioBox* radiobox = new BedTypeRadioBox(item, bed_type); - radiobox->SetPosition(wxPoint(padding_left, (item->GetSize().GetHeight() - radiobox->GetSize().GetHeight()) / 2)); - radio_buttons.push_back(radiobox); - int btn_idx = radio_buttons.size() - 1; - radiobox->Bind(wxEVT_LEFT_DOWN, [this, btn_idx](wxMouseEvent &e) { - SetBedTypeDialog::select_curr_radiobox(btn_idx); - }); - - wxStaticText *text = new wxStaticText(item, wxID_ANY, title, wxDefaultPosition, wxDefaultSize); - text->SetPosition(wxPoint(padding_left + radiobox->GetSize().GetWidth() + 10, (item->GetSize().GetHeight() - text->GetSize().GetHeight()) / 2)); - text->SetFont(Label::Body_14); - text->SetForegroundColour(0x686868); - text->Bind(wxEVT_LEFT_DOWN, [this, btn_idx](wxMouseEvent &e) { - SetBedTypeDialog::select_curr_radiobox(btn_idx); - }); - - radiobox->SetToolTip(tooltip); - text->SetToolTip(tooltip); - return radiobox; -} - -void SetBedTypeDialog::select_curr_radiobox(int btn_idx) -{ - int len = radio_buttons.size(); - for (int i = 0; i < len; ++i) { - if (i == btn_idx) - radio_buttons[i]->SetValue(true); - else - radio_buttons[i]->SetValue(false); - } -} - -void SetBedTypeDialog::sync_bed_type(BedType type) -{ - for (auto radio_box : radio_buttons) { - if (radio_box->GetBedType() == type) - radio_box->SetValue(true); - else - radio_box->SetValue(false); - } -} - -void SetBedTypeDialog::on_dpi_changed(const wxRect& suggested_rect) -{ - -} - -}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/SetBedTypeDialog.hpp b/src/slic3r/GUI/SetBedTypeDialog.hpp deleted file mode 100644 index f54e5700e7..0000000000 --- a/src/slic3r/GUI/SetBedTypeDialog.hpp +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef slic3r_GUI_SetBedTypeDialog_hpp_ -#define slic3r_GUI_SetBedTypeDialog_hpp_ - -#include "Plater.hpp" -#include "PartPlate.hpp" -#include "Widgets/Button.hpp" -#include "Widgets/RadioBox.hpp" - -namespace Slic3r { namespace GUI { - -wxDECLARE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); - -class BedTypeRadioBox : public RadioBox -{ -public: - BedTypeRadioBox(wxWindow* parent, BedType bed_type) : RadioBox(parent), m_bed_type(bed_type) {} - - void SetBedType(BedType bed_type) { m_bed_type = bed_type; } - BedType GetBedType() { return m_bed_type; } - -private: - BedType m_bed_type{ BedType::btCount }; -}; - -class SetBedTypeDialog : public DPIDialog -{ -public: - enum ButtonStyle { - ONLY_CONFIRM = 0, - CONFIRM_AND_CANCEL = 1, - MAX_STYLE_NUM = 2 - }; - SetBedTypeDialog( - wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCLOSE_BOX | wxCAPTION - ); - - ~SetBedTypeDialog(); - void sync_bed_type(BedType type); - void on_dpi_changed(const wxRect& suggested_rect) override; - -protected: - BedTypeRadioBox* m_rb_default_plate{ nullptr }; - BedTypeRadioBox* m_rb_cool_plate{ nullptr }; - BedTypeRadioBox* m_rb_eng_plate{ nullptr }; - BedTypeRadioBox* m_rb_high_temp_plate{ nullptr }; - BedTypeRadioBox* m_rb_texture_pei_plate{ nullptr }; - Button* m_button_ok; - Button* m_button_cancel; - std::vector radio_buttons; - - BedTypeRadioBox* create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, BedType bed_type); - void select_curr_radiobox(int btn_idx); -}; - -}} // namespace Slic3r::GUI - -#endif \ No newline at end of file diff --git a/src/slic3r/GUI/SliceInfoPanel.cpp b/src/slic3r/GUI/SliceInfoPanel.cpp index 5119081aa0..ddf9eb647a 100644 --- a/src/slic3r/GUI/SliceInfoPanel.cpp +++ b/src/slic3r/GUI/SliceInfoPanel.cpp @@ -11,9 +11,9 @@ namespace GUI { #define ICON_SIZE (wxSize(FromDIP(16), FromDIP(16))) #define PRINT_ICON_SIZE (wxSize(FromDIP(18), FromDIP(18))) -wxIMPLEMENT_CLASS(SliceInfoPopup, wxPopupTransientWindow); +wxIMPLEMENT_CLASS(SliceInfoPopup, PopupWindow); -wxBEGIN_EVENT_TABLE(SliceInfoPopup, wxPopupTransientWindow) +wxBEGIN_EVENT_TABLE(SliceInfoPopup, PopupWindow) EVT_MOUSE_EVENTS( SliceInfoPopup::OnMouse ) EVT_SIZE(SliceInfoPopup::OnSize) EVT_SET_FOCUS( SliceInfoPopup::OnSetFocus ) @@ -53,7 +53,7 @@ static wxColour decode_color(const std::string &color) SliceInfoPopup::SliceInfoPopup(wxWindow *parent, wxBitmap bmp, BBLSliceInfo *info) - : wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) + : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) { #ifdef __WINDOWS__ SetDoubleBuffered(true); @@ -139,20 +139,20 @@ SliceInfoPopup::SliceInfoPopup(wxWindow *parent, wxBitmap bmp, BBLSliceInfo *inf } void SliceInfoPopup::Popup(wxWindow *WXUNUSED(focus)) { - wxPopupTransientWindow::Popup(); + PopupWindow::Popup(); } void SliceInfoPopup::OnDismiss() { - wxPopupTransientWindow::OnDismiss(); + PopupWindow::OnDismiss(); } bool SliceInfoPopup::ProcessLeftDown(wxMouseEvent &event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } bool SliceInfoPopup::Show(bool show) { - return wxPopupTransientWindow::Show(show); + return PopupWindow::Show(show); } void SliceInfoPopup::OnSize(wxSizeEvent &event) diff --git a/src/slic3r/GUI/SliceInfoPanel.hpp b/src/slic3r/GUI/SliceInfoPanel.hpp index 05a853001d..8f1710022b 100644 --- a/src/slic3r/GUI/SliceInfoPanel.hpp +++ b/src/slic3r/GUI/SliceInfoPanel.hpp @@ -9,17 +9,18 @@ #include #include #include +#include "Widgets/PopupWindow.hpp" namespace Slic3r { namespace GUI { -class SliceInfoPopup : public wxPopupTransientWindow +class SliceInfoPopup : public PopupWindow { public: SliceInfoPopup(wxWindow *parent, wxBitmap bmp= wxNullBitmap, BBLSliceInfo* info=nullptr); virtual ~SliceInfoPopup() {} - // wxPopupTransientWindow virtual methods are all overridden to log them + // PopupWindow virtual methods are all overridden to log them virtual void Popup(wxWindow *focus = NULL) wxOVERRIDE; virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 6bc1bcfed8..a6ea2dc889 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -36,13 +36,13 @@ static const wxColour STATIC_BOX_LINE_COL = wxColour(238, 238, 238); static const wxColour BUTTON_NORMAL1_COL = wxColour(238, 238, 238); static const wxColour BUTTON_NORMAL2_COL = wxColour(206, 206, 206); static const wxColour BUTTON_PRESS_COL = wxColour(172, 172, 172); -static const wxColour BUTTON_HOVER_COL = wxColour(0, 150, 136); +static const wxColour BUTTON_HOVER_COL = wxColour(0, 174, 66); static const wxColour DISCONNECT_TEXT_COL = wxColour(171, 172, 172); static const wxColour NORMAL_TEXT_COL = wxColour(48,58,60); static const wxColour NORMAL_FAN_TEXT_COL = wxColour(107, 107, 107); static const wxColour WARNING_INFO_BG_COL = wxColour(255, 111, 0); -static const wxColour STAGE_TEXT_COL = wxColour(0, 150, 136); +static const wxColour STAGE_TEXT_COL = wxColour(0, 174, 66); static const wxColour GROUP_STATIC_LINE_COL = wxColour(206, 206, 206); @@ -56,6 +56,7 @@ static wxColour TEXT_LIGHT_FONT_COL = wxColour(107, 107, 107); /* size */ #define PAGE_TITLE_HEIGHT FromDIP(36) +#define PAGE_TITLE_TEXT_WIDTH FromDIP(200) #define PAGE_TITLE_LEFT_MARGIN FromDIP(17) #define GROUP_TITLE_LEFT_MARGIN FromDIP(15) #define GROUP_TITLE_LINE_MARGIN FromDIP(11) @@ -71,8 +72,9 @@ static wxColour TEXT_LIGHT_FONT_COL = wxColour(107, 107, 107); #define TASK_BUTTON_SIZE (wxSize(FromDIP(48), FromDIP(24))) #define TASK_BUTTON_SIZE2 (wxSize(-1, FromDIP(24))) #define Z_BUTTON_SIZE (wxSize(FromDIP(52), FromDIP(52))) -#define MISC_BUTTON_SIZE (wxSize(FromDIP(68), FromDIP(55))) -#define MISC_BUTTON_3FAN_SIZE (wxSize(FromDIP(45), FromDIP(55))) +#define MISC_BUTTON_PANEL_SIZE (wxSize(FromDIP(136), FromDIP(55))) +#define MISC_BUTTON_SIZE (wxSize(FromDIP(66), FromDIP(51))) +#define MISC_BUTTON_3FAN_SIZE (wxSize(FromDIP(44), FromDIP(51))) #define TEMP_CTRL_MIN_SIZE (wxSize(FromDIP(122), FromDIP(52))) #define AXIS_MIN_SIZE (wxSize(FromDIP(220), FromDIP(220))) #define EXTRUDER_IMAGE_SIZE (wxSize(FromDIP(48), FromDIP(76))) @@ -174,8 +176,8 @@ void StatusBasePanel::init_bitmaps() m_bitmap_axis_home = ScalableBitmap(this, "monitor_axis_home", 32); m_bitmap_lamp_on = ScalableBitmap(this, "monitor_lamp_on", 24); m_bitmap_lamp_off = ScalableBitmap(this, "monitor_lamp_off", 24); - m_bitmap_fan_on = ScalableBitmap(this, "monitor_fan_on", 24); - m_bitmap_fan_off = ScalableBitmap(this, "monitor_fan_off", 24); + m_bitmap_fan_on = ScalableBitmap(this, "monitor_fan_on", 22); + m_bitmap_fan_off = ScalableBitmap(this, "monitor_fan_off", 22); m_bitmap_speed = ScalableBitmap(this, "monitor_speed", 24); m_bitmap_speed_active = ScalableBitmap(this, "monitor_speed_active", 24); m_bitmap_use_time = ScalableBitmap(this, "print_info_time", 16); @@ -210,7 +212,7 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page() wxBoxSizer *bSizer_monitoring_title; bSizer_monitoring_title = new wxBoxSizer(wxHORIZONTAL); - m_staticText_monitoring = new wxStaticText(m_panel_monitoring_title, wxID_ANY, _L("Camera"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + m_staticText_monitoring = new Label(m_panel_monitoring_title, _L("Camera")); m_staticText_monitoring->Wrap(-1); m_staticText_monitoring->SetFont(PAGE_TITLE_FONT); m_staticText_monitoring->SetForegroundColour(PAGE_TITLE_FONT_COL); @@ -229,14 +231,14 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page() m_bmToggleBtn_timelapse->SetMinSize(SWITCH_BUTTON_SIZE); m_bmToggleBtn_timelapse->Hide(); bSizer_monitoring_title->Add(m_bmToggleBtn_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - + //m_bitmap_camera_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_camera , wxDefaultPosition, wxSize(FromDIP(32), FromDIP(18)), 0); //m_bitmap_camera_img->SetMinSize(wxSize(FromDIP(32), FromDIP(18))); //bSizer_monitoring_title->Add(m_bitmap_camera_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); m_bitmap_sdcard_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); m_bitmap_sdcard_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); - + m_bitmap_timelapse_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); m_bitmap_timelapse_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_bitmap_timelapse_img->Hide(); @@ -297,7 +299,7 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_panel_printing_title = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, PAGE_TITLE_HEIGHT), wxTAB_TRAVERSAL); m_panel_printing_title->SetBackgroundColour(STATUS_TITLE_BG); - m_staticText_printing = new wxStaticText(m_panel_printing_title, wxID_ANY, _L("Printing Progress"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + m_staticText_printing = new Label(m_panel_printing_title, _L("Printing Progress")); m_staticText_printing->Wrap(-1); m_staticText_printing->SetFont(PAGE_TITLE_FONT); m_staticText_printing->SetForegroundColour(PAGE_TITLE_FONT_COL); @@ -368,7 +370,7 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) task_name_panel->Fit(); bSizer_task_name->Add(task_name_panel, 0, wxEXPAND, FromDIP(5)); - + /* wxFlexGridSizer *fgSizer_task = new wxFlexGridSizer(2, 2, 0, 0); fgSizer_task->AddGrowableCol(0); @@ -379,16 +381,16 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_printing_stage_value->Wrap(-1); #ifdef __WXOSX_MAC__ m_printing_stage_value->SetFont(::Label::Body_11); - #else + #else m_printing_stage_value->SetFont(wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); #endif - + m_printing_stage_value->SetForegroundColour(STAGE_TEXT_COL); auto m_panel_progress = new wxPanel(parent, wxID_ANY); m_panel_progress->SetBackgroundColour(*wxWHITE); - auto m_sizer_progressbar = new wxBoxSizer(wxHORIZONTAL); + auto m_sizer_progressbar = new wxBoxSizer(wxHORIZONTAL); m_gauge_progress = new ProgressBar(m_panel_progress, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize); m_gauge_progress->SetValue(0); m_gauge_progress->SetHeight(PROGRESSBAR_HEIGHT); @@ -418,38 +420,38 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_button_pause_resume = new ScalableButton(m_panel_progress, wxID_ANY, "print_control_pause", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER,true); - m_button_pause_resume->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { + m_button_pause_resume->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { if (m_button_pause_resume->GetToolTipText() == _L("Pause")) { - m_button_pause_resume->SetBitmap_("print_control_pause_hover"); + m_button_pause_resume->SetBitmap_("print_control_pause_hover"); } if (m_button_pause_resume->GetToolTipText() == _L("Resume")) { - m_button_pause_resume->SetBitmap_("print_control_resume_hover"); + m_button_pause_resume->SetBitmap_("print_control_resume_hover"); } }); - m_button_pause_resume->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { + m_button_pause_resume->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { auto buf = m_button_pause_resume->GetClientData(); - if (m_button_pause_resume->GetToolTipText() == _L("Pause")) { + if (m_button_pause_resume->GetToolTipText() == _L("Pause")) { m_button_pause_resume->SetBitmap_("print_control_pause"); } - if (m_button_pause_resume->GetToolTipText() == _L("Resume")) { - m_button_pause_resume->SetBitmap_("print_control_resume"); + if (m_button_pause_resume->GetToolTipText() == _L("Resume")) { + m_button_pause_resume->SetBitmap_("print_control_resume"); } }); m_button_abort = new ScalableButton(m_panel_progress, wxID_ANY, "print_control_stop", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_button_abort->SetToolTip(_L("Stop")); - m_button_abort->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { + m_button_abort->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { m_button_abort->SetBitmap_("print_control_stop_hover"); }); - m_button_abort->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { + m_button_abort->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { m_button_abort->SetBitmap_("print_control_stop"); } ); - + m_sizer_progressbar->Add(m_gauge_progress, 1, wxALIGN_CENTER_VERTICAL, 0); m_sizer_progressbar->Add(0, 0, 0, wxEXPAND|wxLEFT, FromDIP(18)); m_sizer_progressbar->Add(m_button_pause_resume, 0, wxALL, FromDIP(5)); @@ -476,12 +478,12 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_staticText_progress_percent = new wxStaticText(penel_text, wxID_ANY, L("0"), wxDefaultPosition, wxDefaultSize, 0); m_staticText_progress_percent->SetFont(::Label::Head_18); m_staticText_progress_percent->SetMaxSize(wxSize(-1, FromDIP(20))); - m_staticText_progress_percent->SetForegroundColour(wxColour(0, 150, 136)); + m_staticText_progress_percent->SetForegroundColour(wxColour(0, 174, 66)); m_staticText_progress_percent_icon = new wxStaticText(penel_text, wxID_ANY, L("%"), wxDefaultPosition, wxDefaultSize, 0); m_staticText_progress_percent_icon->SetFont(::Label::Body_11); m_staticText_progress_percent_icon->SetMaxSize(wxSize(-1, FromDIP(13))); - m_staticText_progress_percent_icon->SetForegroundColour(wxColour(0, 150, 136)); + m_staticText_progress_percent_icon->SetForegroundColour(wxColour(0, 174, 66)); sizer_percent->Add(m_staticText_progress_percent, 0, 0, 0); @@ -490,8 +492,8 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) #else sizer_percent_icon->Add(m_staticText_progress_percent_icon, 0, 0, 0); #endif - - + + m_staticText_progress_left = new wxStaticText(penel_text, wxID_ANY, L("N/A"), wxDefaultPosition, wxDefaultSize, 0); m_staticText_progress_left->Wrap(-1); m_staticText_progress_left->SetFont(wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); @@ -557,7 +559,7 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) m_error_text->SetForegroundColour(wxColour(255, 0, 0)); text_sizer->Add(m_error_text, 1, wxEXPAND|wxLEFT, FromDIP(17)); - m_button_clean = new Button(m_panel_error_txt, _L("Clean")); + m_button_clean = new Button(m_panel_error_txt, _L("Clear")); StateColor clean_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), std::pair(wxColour(255, 255, 255), StateColor::Normal)); @@ -593,13 +595,13 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) m_panel_control_title->SetBackgroundColour(STATUS_TITLE_BG); wxBoxSizer *bSizer_control_title = new wxBoxSizer(wxHORIZONTAL); - m_staticText_control = new wxStaticText(m_panel_control_title, wxID_ANY, _L("Control"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + m_staticText_control = new Label(m_panel_control_title,_L("Control")); m_staticText_control->Wrap(-1); m_staticText_control->SetFont(PAGE_TITLE_FONT); m_staticText_control->SetForegroundColour(PAGE_TITLE_FONT_COL); - StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); + StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); StateColor btn_bd_green(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); m_options_btn = new Button(m_panel_control_title, _L("Print Options")); @@ -657,14 +659,14 @@ wxBoxSizer *StatusBasePanel::create_temp_axis_group(wxWindow *parent) wxBoxSizer *content_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *m_temp_ctrl = create_temp_control(box); - - m_temp_extruder_line = new StaticLine(box, true); + + m_temp_extruder_line = new StaticLine(box, true); m_temp_extruder_line->SetLineColour(STATIC_BOX_LINE_COL); - + auto m_axis_sizer = create_axis_control(box); - + wxBoxSizer *bed_sizer = create_bed_control(box); wxBoxSizer *extruder_sizer = create_extruder_control(box); @@ -785,50 +787,84 @@ wxBoxSizer *StatusBasePanel::create_misc_control(wxWindow *parent) line->SetLineColour(STATIC_BOX_LINE_COL); sizer->Add(line, 0, wxEXPAND | wxLEFT | wxRIGHT, 12); - line_sizer = new wxBoxSizer(wxHORIZONTAL); - m_switch_nozzle_fan = new FanSwitchButton(parent, m_bitmap_fan_on, m_bitmap_fan_off); + m_fan_panel = new StaticBox(parent); + m_fan_panel->SetMinSize(MISC_BUTTON_PANEL_SIZE); + m_fan_panel->SetMaxSize(MISC_BUTTON_PANEL_SIZE); + m_fan_panel->SetBackgroundColor(*wxWHITE); + m_fan_panel->SetBorderWidth(0); + m_fan_panel->SetCornerRadius(0); + + auto fan_line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_switch_nozzle_fan = new FanSwitchButton(m_fan_panel, m_bitmap_fan_on, m_bitmap_fan_off); m_switch_nozzle_fan->SetMinSize(MISC_BUTTON_3FAN_SIZE); m_switch_nozzle_fan->SetMaxSize(MISC_BUTTON_3FAN_SIZE); m_switch_nozzle_fan->SetValue(false); m_switch_nozzle_fan->SetLabels(_L("Part"), _L("Part")); - m_switch_nozzle_fan->SetPadding(FromDIP(3)); - m_switch_nozzle_fan->SetBorderWidth(FromDIP(2)); + m_switch_nozzle_fan->SetPadding(FromDIP(1)); + m_switch_nozzle_fan->SetBorderWidth(0); + m_switch_nozzle_fan->SetCornerRadius(0); m_switch_nozzle_fan->SetFont(::Label::Body_10); m_switch_nozzle_fan->SetTextColor(StateColor(std::make_pair(DISCONNECT_TEXT_COL, (int) StateColor::Disabled), std::make_pair(NORMAL_FAN_TEXT_COL, (int) StateColor::Normal))); - - line = new StaticLine(parent, true); - line->SetLineColour(STATIC_BOX_LINE_COL); - + m_switch_nozzle_fan->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + m_fan_panel->SetBackgroundColor(wxColour(0, 174, 66)); + }); - m_switch_printing_fan = new FanSwitchButton(parent, m_bitmap_fan_on, m_bitmap_fan_off); + m_switch_nozzle_fan->Bind(wxEVT_LEAVE_WINDOW, [this, parent](auto& e) { + m_fan_panel->SetBackgroundColor(parent->GetBackgroundColour()); + }); + + m_switch_printing_fan = new FanSwitchButton(m_fan_panel, m_bitmap_fan_on, m_bitmap_fan_off); m_switch_printing_fan->SetValue(false); m_switch_printing_fan->SetMinSize(MISC_BUTTON_3FAN_SIZE); m_switch_printing_fan->SetMaxSize(MISC_BUTTON_3FAN_SIZE); - m_switch_printing_fan->SetPadding(FromDIP(3)); - m_switch_printing_fan->SetBorderWidth(FromDIP(2)); + m_switch_printing_fan->SetPadding(FromDIP(1)); + m_switch_printing_fan->SetBorderWidth(0); + m_switch_printing_fan->SetCornerRadius(0); m_switch_printing_fan->SetFont(::Label::Body_10); m_switch_printing_fan->SetLabels(_L("Aux"), _L("Aux")); m_switch_printing_fan->SetTextColor( StateColor(std::make_pair(DISCONNECT_TEXT_COL, (int) StateColor::Disabled), std::make_pair(NORMAL_FAN_TEXT_COL, (int) StateColor::Normal))); - m_switch_cham_fan = new FanSwitchButton(parent, m_bitmap_fan_on, m_bitmap_fan_off); + m_switch_printing_fan->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + m_fan_panel->SetBackgroundColor(wxColour(0, 174, 66)); + }); + + m_switch_printing_fan->Bind(wxEVT_LEAVE_WINDOW, [this, parent](auto& e) { + m_fan_panel->SetBackgroundColor(parent->GetBackgroundColour()); + }); + + m_switch_cham_fan = new FanSwitchButton(m_fan_panel, m_bitmap_fan_on, m_bitmap_fan_off); m_switch_cham_fan->SetValue(false); m_switch_cham_fan->SetMinSize(MISC_BUTTON_3FAN_SIZE); m_switch_cham_fan->SetMaxSize(MISC_BUTTON_3FAN_SIZE); - m_switch_cham_fan->SetPadding(FromDIP(3)); - m_switch_cham_fan->SetBorderWidth(FromDIP(2)); + m_switch_cham_fan->SetPadding(FromDIP(1)); + m_switch_cham_fan->SetBorderWidth(0); + m_switch_cham_fan->SetCornerRadius(0); m_switch_cham_fan->SetFont(::Label::Body_10); m_switch_cham_fan->SetLabels(_L("Cham"), _L("Cham")); m_switch_cham_fan->SetTextColor( StateColor(std::make_pair(DISCONNECT_TEXT_COL, (int)StateColor::Disabled), std::make_pair(NORMAL_FAN_TEXT_COL, (int)StateColor::Normal))); - line_sizer->Add(m_switch_nozzle_fan, 1, wxALIGN_CENTER | wxALL, 0); - //line_sizer->Add(line, 0, wxEXPAND | wxTOP | wxBOTTOM, 4); - line_sizer->Add(m_switch_printing_fan, 1, wxALIGN_CENTER | wxALL, 0); - line_sizer->Add(m_switch_cham_fan, 1, wxALIGN_CENTER | wxALL, 0); + m_switch_cham_fan->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + m_fan_panel->SetBackgroundColor(wxColour(0, 174, 66)); + }); + + m_switch_cham_fan->Bind(wxEVT_LEAVE_WINDOW, [this, parent](auto& e) { + m_fan_panel->SetBackgroundColor(parent->GetBackgroundColour()); + }); + + fan_line_sizer->Add(0, 0, 0, wxLEFT, FromDIP(2)); + fan_line_sizer->Add(m_switch_nozzle_fan, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM , FromDIP(2)); + fan_line_sizer->Add(m_switch_printing_fan, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(2)); + fan_line_sizer->Add(m_switch_cham_fan, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM , FromDIP(2)); + fan_line_sizer->Add(0, 0, 0, wxLEFT, FromDIP(2)); + + m_fan_panel->SetSizer(fan_line_sizer); + m_fan_panel->Layout(); + m_fan_panel->Fit(); + sizer->Add(m_fan_panel, 0, wxEXPAND, FromDIP(5)); - sizer->Add(line_sizer, 0, wxEXPAND, FromDIP(5)); return sizer; } @@ -842,7 +878,7 @@ void StatusBasePanel::reset_temp_misc_control() m_tempCtrl_bed->GetTextCtrl()->SetValue(TEMP_BLANK_STR); m_tempCtrl_frame->SetLabel(TEMP_BLANK_STR); m_tempCtrl_frame->GetTextCtrl()->SetValue(TEMP_BLANK_STR); - m_button_unload->Show(); + m_button_unload->Show(); m_tempCtrl_nozzle->Enable(true); m_tempCtrl_frame->Enable(true); @@ -1060,12 +1096,11 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent) return sizer; } -void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray) +void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray, bool support_vt_load) { m_ams_control->Show(true); m_ams_control_box->Show(true); - m_ams_control->show_noams_mode(show, support_virtual_tray); - + m_ams_control->show_noams_mode(show, support_virtual_tray, support_vt_load); if (m_show_ams_group != show) { Fit(); } @@ -1111,7 +1146,7 @@ void StatusPanel::update_camera_state(MachineObject* obj) if (m_bitmap_recording_img->IsShown()) m_bitmap_recording_img->Hide(); } - + //timelapse if (obj->is_function_supported(PrinterFunction::FUNC_TIMELAPSE)) { if (m_last_timelapse != (obj->is_timelapse() ? 1: 0)) { @@ -1128,7 +1163,7 @@ void StatusPanel::update_camera_state(MachineObject* obj) if (m_bitmap_timelapse_img->IsShown()) m_bitmap_timelapse_img->Hide(); } - + //vcamera if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_CAMERA)) { if (m_last_vcamera != (m_media_play_ctrl->IsStreaming() ? 1: 0)) { @@ -1207,6 +1242,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co //m_bitmap_thumbnail->Connect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this); m_bitmap_thumbnail->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::refresh_thumbnail_webrequest), NULL, this); m_setting_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); + m_setting_button->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); m_project_task_panel->Connect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this); m_button_pause_resume->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_button_abort->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); @@ -1238,7 +1274,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_AMS_GUIDE_WIKI, &StatusPanel::on_ams_guide, this); Bind(EVT_AMS_RETRY, &StatusPanel::on_ams_retry, this); Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this); - + Bind(EVT_SECONDARY_CHECK_FUNC, &StatusPanel::on_print_error_func, this); m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); @@ -1252,6 +1288,7 @@ StatusPanel::~StatusPanel() //m_bitmap_thumbnail->Disconnect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this); m_bitmap_thumbnail->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::refresh_thumbnail_webrequest), NULL, this); m_setting_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); + m_setting_button->Disconnect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); m_button_pause_resume->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_button_abort->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); m_button_clean->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_print_error_clean), NULL, this); @@ -1298,7 +1335,7 @@ void StatusPanel::init_scaled_buttons() //m_button_abort->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); //m_button_abort->SetCornerRadius(FromDIP(12)); m_button_clean->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_button_clean->SetCornerRadius(FromDIP(12)); + m_button_clean->SetCornerRadius(FromDIP(12)); m_button_unload->SetMinSize(wxSize(-1, FromDIP(24))); m_button_unload->SetCornerRadius(FromDIP(12)); m_bpButton_z_10->SetMinSize(Z_BUTTON_SIZE); @@ -1539,7 +1576,7 @@ void StatusPanel::update(MachineObject *obj) } m_print_connect_types[obj->dev_id] = obj->dev_connection_type; } - + update_error_message(); } @@ -1554,7 +1591,7 @@ void StatusPanel::show_recenter_dialog() { obj->command_go_home(); } -void StatusPanel::show_error_message(wxString msg) +void StatusPanel::show_error_message(wxString msg, std::string print_error_str) { if (msg.IsEmpty()) { if (m_panel_error_txt->IsShown()) { @@ -1574,6 +1611,12 @@ void StatusPanel::show_error_message(wxString msg) if (m_print_error_dlg == nullptr) { m_print_error_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); } + if (print_error_str == "07FF 8007") { + m_print_error_dlg->update_func_btn("Done"); + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_FUNC, this); + } else { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); + } m_print_error_dlg->update_text(msg); m_print_error_dlg->on_show(); } @@ -1595,13 +1638,15 @@ void StatusPanel::update_error_message() if (print_error_str.size() > 4) { print_error_str.insert(4, " "); } - + wxString error_msg = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error); if (!error_msg.IsEmpty()) { - error_msg = wxString::Format("%s[%s]", + auto time = wxDateTime::Now(); + auto show_time = time.Format("%H%M%S"); + error_msg = wxString::Format("%s[%s %s]", error_msg, - print_error_str); - show_error_message(error_msg); + print_error_str, show_time); + show_error_message(error_msg, print_error_str); } else { BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } @@ -1724,7 +1769,7 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) { if (!obj) return; - /*if (obj->can_unload_filament()) { + if (obj->can_unload_filament()) { if (!m_button_unload->IsShown()) { m_button_unload->Show(); m_button_unload->GetParent()->Layout(); @@ -1734,7 +1779,7 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) m_button_unload->Hide(); m_button_unload->GetParent()->Layout(); } - }*/ + } // update extruder icon update_extruder_status(obj); @@ -1744,14 +1789,19 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) if (m_current_support_cham_fan != is_suppt_cham_fun) { if (is_suppt_cham_fun) { m_switch_cham_fan->Show(); + m_switch_nozzle_fan->SetMinSize(MISC_BUTTON_3FAN_SIZE); m_switch_nozzle_fan->SetMaxSize(MISC_BUTTON_3FAN_SIZE); + m_switch_printing_fan->SetMinSize(MISC_BUTTON_3FAN_SIZE); m_switch_printing_fan->SetMaxSize(MISC_BUTTON_3FAN_SIZE); } else { m_switch_cham_fan->Hide(); + m_switch_nozzle_fan->SetMinSize(MISC_BUTTON_SIZE); m_switch_nozzle_fan->SetMaxSize(MISC_BUTTON_SIZE); + m_switch_printing_fan->SetMinSize(MISC_BUTTON_SIZE); m_switch_printing_fan->SetMaxSize(MISC_BUTTON_SIZE); } + m_misc_ctrl_sizer->Layout(); } @@ -1865,7 +1915,7 @@ void StatusPanel::update_ams(MachineObject *obj) if (is_support_extrusion_cali) { m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); + show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); return; } @@ -1874,7 +1924,7 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); + show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); if (m_filament_setting_dlg) m_filament_setting_dlg->update(); std::vector ams_info; @@ -1895,7 +1945,7 @@ void StatusPanel::update_ams(MachineObject *obj) // last_read_done_bits = obj->tray_read_done_bits; // last_ams_version = obj->ams_version; //} - + // must select a current can m_ams_control->UpdateAms(ams_info, false, is_support_extrusion_cali); @@ -1905,91 +1955,112 @@ void StatusPanel::update_ams(MachineObject *obj) last_read_done_bits = obj->tray_read_done_bits; last_reading_bits = obj->tray_reading_bits; last_ams_version = obj->ams_version; - + std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + bool is_vt_tray = false; + if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID)) + is_vt_tray = true; - if (m_ams_control->GetCurentAms() != obj->m_ams_id) { - m_ams_control->SetAmsStep(curr_ams_id, curr_can_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + // set segment 1, 2 + if ( obj->m_ams_id != curr_ams_id || obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID) ) { + m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + else { + if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) { + m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); + } + else if (obj->m_tray_now != "255") { + m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); + } + else { + m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + } + + // set segment 3 + if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) { + m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color()); } else { - if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { + m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(obj->m_ams_id, obj->m_tray_id)); + } + + if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { + if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID) && (obj->m_tray_now != std::to_string(VIRTUAL_TRAY_ID) || obj->m_tray_now != "255")) { + // wait to heat hotend + if (obj->ams_status_sub == 0x02) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_VT_LOAD); + } + else if (obj->ams_status_sub == 0x05) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_FEED_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); + } + else if (obj->ams_status_sub == 0x06) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_CONFIRM_EXTRUDED, FilamentStepType::STEP_TYPE_VT_LOAD); + } + else if (obj->ams_status_sub == 0x07) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); + } + else { + m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_VT_LOAD); + } + } else { // wait to heat hotend if (obj->ams_status_sub == 0x02) { - if (curr_ams_id == obj->m_ams_id) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, true); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_LOAD); } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, false); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_UNLOAD); } + } else { + m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD); } } else if (obj->ams_status_sub == 0x03) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, true); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); + m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, false); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); + m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); } - } else if (obj->ams_status_sub == 0x04) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, true); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); - } + m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { - //FilamentStep::STEP_PULL_CURR_FILAMENT); - m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, false); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); } } else if (obj->ams_status_sub == 0x05) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, true); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); - } + m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, false); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); } } else if (obj->ams_status_sub == 0x06) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, true); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); - } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, false); - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } + else { + m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); } } else if (obj->ams_status_sub == 0x07) { - if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT); - } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, false); + if (!obj->is_ams_unload()) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } + else { + m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); } - - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); } else { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE); - if (obj->is_filament_move()) { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); - } else { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } else { - m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, false); - if (obj->is_filament_move()) { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); - } else { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD); } } + } else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); } + for (auto ams_it = obj->amsList.begin(); ams_it != obj->amsList.end(); ams_it++) { std::string ams_id = ams_it->first; @@ -2008,34 +2079,80 @@ void StatusPanel::update_ams(MachineObject *obj) } catch (...) {} } - update_ams_control_state(curr_ams_id, is_support_extrusion_cali); -} - -void StatusPanel::update_ams_control_state(std::string ams_id, bool is_support_virtual_tray) -{ - // update load/unload enable state - if (obj->is_in_extrusion_cali()) { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_CALI, is_support_virtual_tray); - } - else if (!obj->has_ams()) { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_NOAMS, is_support_virtual_tray); - } - else if (obj->is_in_printing() && !obj->can_resume()) { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray); - } - else { - if (obj->ams_status_main != AMS_STATUS_MAIN_FILAMENT_CHANGE) { - if (obj->m_tray_now == "255") { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_LOAD, is_support_virtual_tray); - } - else { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_NORMAL, is_support_virtual_tray); - } + bool is_curr_tray_selected = false; + if (!curr_ams_id.empty() && !curr_can_id.empty() && (curr_ams_id != std::to_string(VIRTUAL_TRAY_ID)) ) { + if (curr_can_id == obj->m_tray_now) { + is_curr_tray_selected = true; } else { - m_ams_control->SetActionState(AMSAction::AMS_ACTION_PRINTING, is_support_virtual_tray); + std::map::iterator it = obj->amsList.find(curr_ams_id); + if (it == obj->amsList.end()) { + BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_ams_id << " failed"; + return; + } + auto tray_it = it->second->trayList.find(curr_can_id); + if (tray_it == it->second->trayList.end()) { + BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_can_id << " failed"; + return; + } + + if (!tray_it->second->is_exists) { + is_curr_tray_selected = true; + } + } + }else if (curr_ams_id == std::to_string(VIRTUAL_TRAY_ID)) { + if (curr_ams_id == obj->m_tray_now) { + is_curr_tray_selected = true; + } + }else { + is_curr_tray_selected = true; + } + + update_ams_control_state(is_support_extrusion_cali, is_curr_tray_selected); +} + +void StatusPanel::update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected) +{ + // set default value to true + bool enable[ACTION_BTN_COUNT]; + enable[ACTION_BTN_CALI] = true; + enable[ACTION_BTN_LOAD] = true; + enable[ACTION_BTN_UNLOAD] = true; + + if (!is_support_virtual_tray) { + enable[ACTION_BTN_CALI] = false; + } + else { + if (obj->is_in_extrusion_cali()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; } } + + if (obj->is_in_printing() && !obj->can_resume()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + + /*if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + }*/ + + // select current + if (is_curr_tray_selected) { + enable[ACTION_BTN_LOAD] = false; + } + + /*if (!obj->is_filament_at_extruder()) { + enable[ACTION_BTN_UNLOAD] = false; + } + + if (obj->m_tray_now == "255") { + enable[ACTION_BTN_UNLOAD] = false; + }*/ + + m_ams_control->SetActionState(enable); } void StatusPanel::update_cali(MachineObject *obj) @@ -2078,7 +2195,7 @@ void StatusPanel::update_left_time(int mc_left_time) m_staticText_progress_left->SetLabelText(left_time_text); } -void StatusPanel::update_basic_print_data(bool def) +void StatusPanel::update_basic_print_data(bool def) { if (def) { if (!obj) return; @@ -2091,20 +2208,20 @@ void StatusPanel::update_basic_print_data(bool def) m_staticText_consumption_of_time->Show(); } - if (!m_staticText_consumption_of_weight->IsShown()) { + if (!m_staticText_consumption_of_weight->IsShown()) { m_bitmap_static_use_weight->Show(); m_staticText_consumption_of_weight->Show(); } - + m_staticText_consumption_of_time->SetLabelText(prediction); - m_staticText_consumption_of_weight->SetLabelText(weight); + m_staticText_consumption_of_weight->SetLabelText(weight); } else { - if (m_staticText_consumption_of_time->IsShown()) { + if (m_staticText_consumption_of_time->IsShown()) { m_bitmap_static_use_time->Hide(); m_staticText_consumption_of_time->Hide(); } - if (m_staticText_consumption_of_weight->IsShown()) { + if (m_staticText_consumption_of_weight->IsShown()) { m_bitmap_static_use_weight->Hide(); m_staticText_consumption_of_weight->Hide(); } @@ -2455,6 +2572,33 @@ void StatusPanel::on_ams_load_curr() if (obj) { std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + + //virtual tray + if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { + /*if (con_load_dlg == nullptr) { + con_load_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Confirm")); + con_load_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) {*/ + int old_temp = -1; + int new_temp = -1; + AmsTray* curr_tray = obj->get_curr_tray(); + try { + if (!curr_tray->nozzle_temp_max.empty() && !curr_tray->nozzle_temp_min.empty()) + old_temp = (atoi(curr_tray->nozzle_temp_min.c_str()) + atoi(curr_tray->nozzle_temp_max.c_str())) / 2; + if (!obj->vt_tray.nozzle_temp_max.empty() && !obj->vt_tray.nozzle_temp_min.empty()) + new_temp = (atoi(obj->vt_tray.nozzle_temp_min.c_str()) + atoi(obj->vt_tray.nozzle_temp_max.c_str())) / 2; + } + catch (...) { + ; + } + obj->command_ams_switch(VIRTUAL_TRAY_ID, old_temp, new_temp); + /*} + ); + } + con_load_dlg->update_text(_L("Please confirm the filament is ready?")); + con_load_dlg->on_show();*/ + return; + } + std::map::iterator it = obj->amsList.find(curr_ams_id); if (it == obj->amsList.end()) { BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_ams_id << " failed"; @@ -2465,7 +2609,6 @@ void StatusPanel::on_ams_load_curr() BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_can_id << " failed"; return; } - AmsTray* curr_tray = obj->get_curr_tray(); AmsTray* targ_tray = obj->get_ams_tray(curr_ams_id, curr_can_id); if (curr_tray && targ_tray) { @@ -2643,12 +2786,27 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event) m_filament_setting_dlg->obj = obj; try { m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_ID; + std::string sn_number; + std::string filament; + std::string temp_max; + std::string temp_min; wxString k_val; wxString n_val; k_val = wxString::Format("%.3f", obj->vt_tray.k); n_val = wxString::Format("%.3f", obj->vt_tray.n); + wxColor color = AmsTray::decode_color(obj->vt_tray.color); + m_filament_setting_dlg->set_color(color); + m_filament_setting_dlg->ams_filament_id = obj->vt_tray.setting_id; + m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(obj->vt_tray.tag_uid); + if (!m_filament_setting_dlg->m_is_third) { + sn_number = obj->vt_tray.uuid; + filament = obj->vt_tray.sub_brands; + temp_max = obj->vt_tray.nozzle_temp_max; + temp_min = obj->vt_tray.nozzle_temp_min; + } + m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); - m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val); + m_filament_setting_dlg->Popup(filament, sn_number, temp_min, temp_max, k_val, n_val); } catch (...) { ; @@ -2702,7 +2860,7 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event) if (obj) { std::string curr_ams_id = m_ams_control->GetCurentAms(); if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { - update_ams_control_state(curr_ams_id, true); + //update_ams_control_state(curr_ams_id, true); return; } else { std::string curr_can_id = event.GetString().ToStdString(); @@ -2722,10 +2880,9 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event) } catch (...) { ; } - update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); + //update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); } } - } void StatusPanel::on_ams_guide(wxCommandEvent& event) @@ -2742,7 +2899,18 @@ void StatusPanel::on_ams_retry(wxCommandEvent& event) } } -void StatusPanel::on_fan_changed(wxCommandEvent& event) +void StatusPanel::on_print_error_func(wxCommandEvent& event) +{ + BOOST_LOG_TRIVIAL(info) << "on_print_error_func"; + if (obj) { + obj->command_ams_control("done"); + if (m_print_error_dlg) { + m_print_error_dlg->on_hide(); + } + } +} + +void StatusPanel::on_fan_changed(wxCommandEvent& event) { auto type = event.GetInt(); auto speed = atoi(event.GetString().c_str()); @@ -2754,7 +2922,7 @@ void StatusPanel::on_fan_changed(wxCommandEvent& event) } else if (type == MachineObject::FanType::BIG_COOLING_FAN) { set_hold_count(this->m_switch_printing_fan_timeout); - m_switch_printing_fan->SetValue(speed > 0 ? true : false); + m_switch_printing_fan->SetValue(speed > 0 ? true : false); m_switch_printing_fan->setFanValue(speed * 10); } else if (type == MachineObject::FanType::CHAMBER_FAN) { @@ -2797,9 +2965,9 @@ void StatusPanel::on_switch_speed(wxCommandEvent &event) } #if __WXOSX__ // MacOS has focus problem - wxPopupTransientWindow *popUp = new wxPopupTransientWindow(nullptr); + PopupWindow *popUp = new PopupWindow(nullptr); #else - wxPopupTransientWindow *popUp = new wxPopupTransientWindow(m_switch_speed); + PopupWindow *popUp = new PopupWindow(m_switch_speed); #endif popUp->SetBackgroundColour(StateColor::darkModeColorFor(0xeeeeee)); StepCtrl *step = new StepCtrl(popUp, wxID_ANY); @@ -2813,7 +2981,7 @@ void StatusPanel::on_switch_speed(wxCommandEvent &event) step->AppendItem(_L("Standard"), ""); step->AppendItem(_L("Sport"), ""); step->AppendItem(_L("Ludicrous"), ""); - + // default speed lvl int selected_item = 1; if (obj) { @@ -2823,7 +2991,7 @@ void StatusPanel::on_switch_speed(wxCommandEvent &event) } } step->SelectItem(selected_item); - + if (!obj->is_in_printing()) { step->Bind(wxEVT_LEFT_DOWN, [](auto& e) { return; }); @@ -2836,15 +3004,29 @@ void StatusPanel::on_switch_speed(wxCommandEvent &event) obj->command_set_printing_speed((PrintingSpeedLevel)this->speed_lvl); } }); - popUp->Bind(wxEVT_SHOW, [this](auto &e) { + popUp->Bind(wxEVT_SHOW, [this, popUp](auto &e) { if (!e.IsShown()) { - wxGetApp().CallAfter([popUp = e.GetEventObject()] { delete popUp; }); + /* wxGetApp().CallAfter([this, popUp] { + + });*/ + popUp->Destroy(); + m_showing_speed_popup = false; speed_dismiss_time = boost::posix_time::microsec_clock::universal_time(); } + }); + + m_ams_control->Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this, popUp](auto& e) { + if (m_showing_speed_popup) { + if (popUp && popUp->IsShown()) { + popUp->Show(false); + } + } + e.Skip(); }); wxPoint pos = m_switch_speed->ClientToScreen(wxPoint(0, -6)); popUp->Position(pos, {0, m_switch_speed->GetSize().y + 12}); popUp->Popup(); + m_showing_speed_popup = true; } void StatusPanel::on_printing_fan_switch(wxCommandEvent &event) @@ -2866,18 +3048,21 @@ void StatusPanel::on_printing_fan_switch(wxCommandEvent &event) void StatusPanel::on_nozzle_fan_switch(wxCommandEvent &event) { - - m_fan_control_popup->Destroy(); + m_fan_control_popup = nullptr; m_fan_control_popup = new FanControlPopup(this); + + if (obj) { + bool is_suppt_cham_fun = obj->is_function_supported(PrinterFunction::FUNC_CHAMBER_FAN); + m_fan_control_popup->update_show_mode(is_suppt_cham_fun); + } + auto pos = m_switch_nozzle_fan->GetScreenPosition(); pos.y = pos.y + m_switch_nozzle_fan->GetSize().y; - - int display_idx = wxDisplay::GetFromWindow(this); auto display = wxDisplay(display_idx).GetClientArea(); - + wxSize screenSize = wxSize(display.GetWidth(), display.GetHeight()); auto fan_popup_size = m_fan_control_popup->GetSize(); @@ -2888,7 +3073,7 @@ void StatusPanel::on_nozzle_fan_switch(wxCommandEvent &event) } m_fan_control_popup->SetPosition(pos); m_fan_control_popup->Popup(); - + /*if (!obj) return; @@ -2985,7 +3170,8 @@ void StatusPanel::on_switch_vcamera(wxMouseEvent &event) void StatusPanel::on_camera_enter(wxMouseEvent& event) { if (obj) { - m_camera_popup = std::make_shared(this, obj); + if (m_camera_popup == nullptr) + m_camera_popup = std::make_shared(this, obj); m_camera_popup->sync_vcamera_state(show_vcamera); m_camera_popup->Bind(EVT_VCAMERA_SWITCH, &StatusPanel::on_switch_vcamera, this); m_camera_popup->Bind(EVT_SDCARD_ABSENT_HINT, [this](wxCommandEvent &e) { @@ -2998,7 +3184,9 @@ void StatusPanel::on_camera_enter(wxMouseEvent& event) wxWindow* ctrl = (wxWindow*)event.GetEventObject(); wxPoint pos = ctrl->ClientToScreen(wxPoint(0, 0)); wxSize sz = ctrl->GetSize(); - m_camera_popup->Position(pos, wxSize(sz.x, sz.y)); + pos.x += sz.x; + pos.y += sz.y; + m_camera_popup->SetPosition(pos); m_camera_popup->update(m_media_play_ctrl->IsStreaming()); m_camera_popup->Popup(); } @@ -3185,12 +3373,15 @@ void StatusPanel::msw_rescale() init_bitmaps(); m_panel_monitoring_title->SetSize(wxSize(-1, FromDIP(PAGE_TITLE_HEIGHT))); + m_staticText_monitoring->SetMinSize(wxSize(PAGE_TITLE_TEXT_WIDTH, PAGE_TITLE_HEIGHT)); m_bmToggleBtn_timelapse->Rescale(); m_panel_printing_title->SetSize(wxSize(-1, FromDIP(PAGE_TITLE_HEIGHT))); + m_staticText_printing->SetMinSize(wxSize(PAGE_TITLE_TEXT_WIDTH, PAGE_TITLE_HEIGHT)); m_bitmap_thumbnail->SetSize(TASK_THUMBNAIL_SIZE); m_printing_sizer->SetMinSize(wxSize(PAGE_MIN_WIDTH, -1)); m_gauge_progress->SetHeight(PROGRESSBAR_HEIGHT); m_panel_control_title->SetSize(wxSize(-1, FromDIP(PAGE_TITLE_HEIGHT))); + m_staticText_control->SetMinSize(wxSize(-1, PAGE_TITLE_HEIGHT)); m_bpButton_xy->SetBitmap(m_bitmap_axis_home); m_bpButton_xy->SetMinSize(AXIS_MIN_SIZE); m_bpButton_xy->SetSize(AXIS_MIN_SIZE); @@ -3227,13 +3418,10 @@ void StatusPanel::msw_rescale() m_switch_lamp->SetMinSize(MISC_BUTTON_SIZE); m_switch_lamp->Rescale(); m_switch_nozzle_fan->SetImages(m_bitmap_fan_on, m_bitmap_fan_off); - m_switch_nozzle_fan->SetMinSize(MISC_BUTTON_SIZE); m_switch_nozzle_fan->Rescale(); m_switch_printing_fan->SetImages(m_bitmap_fan_on, m_bitmap_fan_off); - m_switch_printing_fan->SetMinSize(MISC_BUTTON_SIZE); - m_switch_printing_fan->Rescale(); + m_switch_printing_fan->Rescale(); m_switch_cham_fan->SetImages(m_bitmap_fan_on, m_bitmap_fan_off); - m_switch_cham_fan->SetMinSize(MISC_BUTTON_SIZE); m_switch_cham_fan->Rescale(); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 23c8227281..422dc94fbe 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -114,7 +114,7 @@ protected: wxStaticText* m_staticText_consumption_of_time; wxStaticText * m_staticText_consumption_of_weight; - wxStaticText * m_staticText_monitoring; + Label * m_staticText_monitoring; wxStaticText * m_staticText_timelapse; SwitchButton * m_bmToggleBtn_timelapse; @@ -130,7 +130,7 @@ protected: wxMediaCtrl2 * m_media_ctrl; MediaPlayCtrl * m_media_play_ctrl; - wxStaticText * m_staticText_printing; + Label * m_staticText_printing; wxStaticBitmap *m_bitmap_thumbnail; wxStaticText * m_staticText_subtask_value; wxStaticText * m_printing_stage_value; @@ -146,13 +146,14 @@ protected: wxStaticText * m_text_tasklist_caption; - wxStaticText * m_staticText_control; + Label * m_staticText_control; ImageSwitchButton *m_switch_lamp; int m_switch_lamp_timeout{0}; ImageSwitchButton *m_switch_speed; /* TempInput */ wxBoxSizer * m_misc_ctrl_sizer; + StaticBox* m_fan_panel; TempInput * m_tempCtrl_nozzle; int m_temp_nozzle_timeout {0}; StaticLine * m_line_nozzle; @@ -252,7 +253,7 @@ public: wxBoxSizer *create_ams_group(wxWindow *parent); wxBoxSizer *create_settings_group(wxWindow *parent); - void show_ams_group(bool show = true, bool support_virtual_tray = true); + void show_ams_group(bool show = true, bool support_virtual_tray = true, bool support_vt_load = true); }; @@ -273,6 +274,7 @@ protected: SecondaryCheckDialog* m_print_error_dlg = nullptr; SecondaryCheckDialog* abort_dlg = nullptr; + SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; SecondaryCheckDialog* sdcard_hint_dlg = nullptr; FanControlPopup* m_fan_control_popup{nullptr}; @@ -294,6 +296,7 @@ protected: int speed_lvl = 1; // 0 - 3 int speed_lvl_timeout {0}; boost::posix_time::ptime speed_dismiss_time; + bool m_showing_speed_popup = false; std::map img_list; // key: url, value: wxBitmap png Image std::map m_print_connect_types; @@ -309,7 +312,7 @@ protected: void on_subtask_pause_resume(wxCommandEvent &event); void on_subtask_abort(wxCommandEvent &event); void on_print_error_clean(wxCommandEvent &event); - void show_error_message(wxString msg); + void show_error_message(wxString msg, std::string print_error_str = ""); void error_info_reset(); void show_recenter_dialog(); @@ -345,6 +348,7 @@ protected: void on_ams_selected(wxCommandEvent &event); void on_ams_guide(wxCommandEvent &event); void on_ams_retry(wxCommandEvent &event); + void on_print_error_func(wxCommandEvent& event); void on_fan_changed(wxCommandEvent& event); void on_switch_speed(wxCommandEvent& event); @@ -379,7 +383,7 @@ protected: void update_misc_ctrl(MachineObject *obj); void update_ams(MachineObject* obj); void update_extruder_status(MachineObject* obj); - void update_ams_control_state(std::string ams_id, bool is_support_virtual_tray); + void update_ams_control_state(bool is_support_virtual_tray, bool is_curr_tray_selected); void update_cali(MachineObject* obj); void reset_printing_values(); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 461a09f3bf..9f16825d18 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1418,6 +1418,13 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } } + // BBS set support style to default when support type changes + if (opt_key == "support_type") { + DynamicPrintConfig new_conf = *m_config; + new_conf.set_key_value("support_style", new ConfigOptionEnum(smsDefault)); + m_config_manipulation.apply(m_config, &new_conf); + } + // BBS popup a message to ask the user to set optimum parameters for tree support if (opt_key == "support_type" || opt_key == "support_style") { if (is_tree_slim(m_config->opt_enum("support_type"), m_config->opt_enum("support_style")) && @@ -2014,6 +2021,7 @@ void TabPrint::build() page = add_options_page(L("Others"), "advanced"); optgroup = page->new_optgroup(L("Bed adhension"), L"param_adhension"); optgroup->append_single_option_line("skirt_loops"); + optgroup->append_single_option_line("skirt_height"); optgroup->append_single_option_line("skirt_distance"); optgroup->append_single_option_line("skirt_height"); //optgroup->append_single_option_line("draft_shield"); @@ -2106,6 +2114,27 @@ void TabPrint::toggle_options() if (!m_active_page) return; m_config_manipulation.toggle_print_fff_options(m_config, m_type < Preset::TYPE_COUNT); + + Field *field = m_active_page->get_field("support_style"); + auto support_type = m_config->opt_enum("support_type"); + if (auto choice = dynamic_cast(field)) { + auto def = print_config_def.get("support_style"); + std::vector enum_set_normal = {0, 1, 2}; + std::vector enum_set_tree = {0, 3, 4, 5}; + auto & set = is_tree(support_type) ? enum_set_tree : enum_set_normal; + auto & opt = const_cast(field->m_opt); + auto cb = dynamic_cast(choice->window); + auto n = cb->GetValue(); + opt.enum_values.clear(); + opt.enum_labels.clear(); + cb->Clear(); + for (auto i : set) { + opt.enum_values.push_back(def->enum_values[i]); + opt.enum_labels.push_back(def->enum_labels[i]); + cb->Append(_(def->enum_labels[i])); + } + cb->SetValue(n); + } } void TabPrint::update() @@ -2478,6 +2507,7 @@ void TabFilament::add_filament_overrides_page() for (const std::string opt_key : { "filament_retraction_length", "filament_z_hop", + "filament_z_hop_types", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", @@ -2511,6 +2541,7 @@ void TabFilament::update_filament_overrides_page() std::vector opt_keys = { "filament_retraction_length", "filament_z_hop", + "filament_z_hop_types", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", @@ -3402,7 +3433,7 @@ void TabPrinter::build_unregular_pages(bool from_initial_build/* = false*/) optgroup->append_single_option_line("retraction_length", "", extruder_idx); optgroup->append_single_option_line("retract_restart_extra", "", extruder_idx); optgroup->append_single_option_line("z_hop", "", extruder_idx); - optgroup->append_single_option_line("z_lift_type", "", extruder_idx); + optgroup->append_single_option_line("z_hop_types", "", extruder_idx); optgroup->append_single_option_line("retraction_speed", "", extruder_idx); optgroup->append_single_option_line("deretraction_speed", "", extruder_idx); optgroup->append_single_option_line("retraction_minimum_travel", "", extruder_idx); @@ -3614,9 +3645,6 @@ void TabPrinter::toggle_options() for (auto el : vec) toggle_option(el, retraction, i); - // retract lift above / below only applies if using retract lift - vec.resize(0); - // some options only apply when not using firmware retraction vec.resize(0); vec = { "retraction_speed", "deretraction_speed", "retract_before_wipe", "retract_restart_extra", "wipe", "wipe_distance" }; @@ -4053,9 +4081,9 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, try { //BBS delete preset Preset ¤t_preset = m_presets->get_selected_preset(); - current_preset.sync_info = "delete"; if (!current_preset.setting_id.empty()) { BOOST_LOG_TRIVIAL(info) << "delete preset = " << current_preset.name << ", setting_id = " << current_preset.setting_id; + m_presets->set_sync_info_and_save(current_preset.name, current_preset.setting_id, "delete"); wxGetApp().delete_preset_from_cloud(current_preset.setting_id); } BOOST_LOG_TRIVIAL(info) << boost::format("will delete current preset..."); @@ -4673,14 +4701,6 @@ void Tab::delete_preset() if (m_type == Preset::TYPE_PRINTER && !physical_printers.empty()) physical_printers.delete_preset_from_printers(current_preset.name); - //BBS delete preset - //will delete in select_preset - current_preset.sync_info = "delete"; - if (!current_preset.setting_id.empty()) { - BOOST_LOG_TRIVIAL(info) << "delete preset = " << current_preset.name << ", setting_id = " << current_preset.setting_id; - wxGetApp().delete_preset_from_cloud(current_preset.setting_id); - } - // Select will handle of the preset dependencies, of saving & closing the depending profiles, and // finally of deleting the preset. this->select_preset("", true); diff --git a/src/slic3r/GUI/TickCode.cpp b/src/slic3r/GUI/TickCode.cpp new file mode 100644 index 0000000000..158afe7a1f --- /dev/null +++ b/src/slic3r/GUI/TickCode.cpp @@ -0,0 +1,193 @@ +#include "TickCode.hpp" + +namespace Slic3r { +namespace GUI { +std::string TickCodeInfo::get_color_for_tick(TickCode tick, Type type, const int extruder) +{ + if (mode == SingleExtruder && type == ColorChange && m_use_default_colors) { +#if 1 + if (ticks.empty()) return color_generator.get_opposite_color((*m_colors)[0]); + + auto before_tick_it = std::lower_bound(ticks.begin(), ticks.end(), tick); + if (before_tick_it == ticks.end()) { + while (before_tick_it != ticks.begin()) + if (--before_tick_it; before_tick_it->type == ColorChange) break; + if (before_tick_it->type == ColorChange) return color_generator.get_opposite_color(before_tick_it->color); + return color_generator.get_opposite_color((*m_colors)[0]); + } + + if (before_tick_it == ticks.begin()) { + const std::string &frst_color = (*m_colors)[0]; + if (before_tick_it->type == ColorChange) return color_generator.get_opposite_color(frst_color, before_tick_it->color); + + auto next_tick_it = before_tick_it; + while (next_tick_it != ticks.end()) + if (++next_tick_it; next_tick_it->type == ColorChange) break; + if (next_tick_it->type == ColorChange) return color_generator.get_opposite_color(frst_color, next_tick_it->color); + + return color_generator.get_opposite_color(frst_color); + } + + std::string frst_color = ""; + if (before_tick_it->type == ColorChange) + frst_color = before_tick_it->color; + else { + auto next_tick_it = before_tick_it; + while (next_tick_it != ticks.end()) + if (++next_tick_it; next_tick_it->type == ColorChange) { + frst_color = next_tick_it->color; + break; + } + } + + while (before_tick_it != ticks.begin()) + if (--before_tick_it; before_tick_it->type == ColorChange) break; + + if (before_tick_it->type == ColorChange) { + if (frst_color.empty()) return color_generator.get_opposite_color(before_tick_it->color); + return color_generator.get_opposite_color(before_tick_it->color, frst_color); + } + + if (frst_color.empty()) return color_generator.get_opposite_color((*m_colors)[0]); + return color_generator.get_opposite_color((*m_colors)[0], frst_color); +#else + const std::vector &colors = ColorPrintColors::get(); + if (ticks.empty()) return colors[0]; + m_default_color_idx++; + + return colors[m_default_color_idx % colors.size()]; +#endif + } + + std::string color = (*m_colors)[extruder - 1]; + + if (type == ColorChange) { + if (!ticks.empty()) { + auto before_tick_it = std::lower_bound(ticks.begin(), ticks.end(), tick); + while (before_tick_it != ticks.begin()) { + --before_tick_it; + if (before_tick_it->type == ColorChange && before_tick_it->extruder == extruder) { + color = before_tick_it->color; + break; + } + } + } + + //TODO + //color = get_new_color(color); + } + return color; +} + + +bool TickCodeInfo::add_tick(const int tick, Type type, const int extruder, double print_z) +{ + std::string color; + std::string extra; + if (type == Custom) // custom Gcode + { + //extra = get_custom_code(custom_gcode, print_z); + //if (extra.empty()) return false; + //custom_gcode = extra; + } else if (type == PausePrint) { + //BBS do not set pause extra message + //extra = get_pause_print_msg(pause_print_msg, print_z); + //if (extra.empty()) return false; + pause_print_msg = extra; + } + else { + color = get_color_for_tick(TickCode{ tick }, type, extruder); + if (color.empty()) return false; + } + + if (mode == SingleExtruder) m_use_default_colors = true; + + ticks.emplace(TickCode{tick, type, extruder, color, extra}); + + return true; +} + +bool TickCodeInfo::edit_tick(std::set::iterator it, double print_z) +{ + std::string edited_value; + //TODO + /* BBS + if (it->type == ColorChange) + edited_value = get_new_color(it->color); + else if (it->type == PausePrint) + edited_value = get_pause_print_msg(it->extra, print_z); + else + edited_value = get_custom_code(it->type == Template ? gcode(Template) : it->extra, print_z); + */ + if (edited_value.empty()) return false; + + TickCode changed_tick = *it; + if (it->type == ColorChange) { + if (it->color == edited_value) return false; + changed_tick.color = edited_value; + } else if (it->type == Template) { + //if (gcode(Template) == edited_value) return false; + //changed_tick.extra = edited_value; + //changed_tick.type = Custom; + ; + } else if (it->type == Custom || it->type == PausePrint) { + if (it->extra == edited_value) return false; + changed_tick.extra = edited_value; + } + + ticks.erase(it); + ticks.emplace(changed_tick); + + return true; +} + +void TickCodeInfo::switch_code(Type type_from, Type type_to) +{ + for (auto it{ticks.begin()}, end{ticks.end()}; it != end;) + if (it->type == type_from) { + TickCode tick = *it; + tick.type = type_to; + tick.extruder = 1; + ticks.erase(it); + it = ticks.emplace(tick).first; + } else + ++it; +} + +bool TickCodeInfo::switch_code_for_tick(std::set::iterator it, Type type_to, const int extruder) +{ + const std::string color = get_color_for_tick(*it, type_to, extruder); + if (color.empty()) return false; + + TickCode changed_tick = *it; + changed_tick.type = type_to; + changed_tick.extruder = extruder; + changed_tick.color = color; + + ticks.erase(it); + ticks.emplace(changed_tick); + + return true; +} + +void TickCodeInfo::erase_all_ticks_with_code(Type type) +{ + for (auto it{ticks.begin()}, end{ticks.end()}; it != end;) { + if (it->type == type) + it = ticks.erase(it); + else + ++it; + } +} + +bool TickCodeInfo::has_tick_with_code(Type type) +{ + for (const TickCode &tick : ticks) + if (tick.type == type) return true; + + return false; +} + +bool TickCodeInfo::has_tick(int tick) { return ticks.find(TickCode{tick}) != ticks.end(); } + +}} \ No newline at end of file diff --git a/src/slic3r/GUI/TickCode.hpp b/src/slic3r/GUI/TickCode.hpp new file mode 100644 index 0000000000..8616d7565a --- /dev/null +++ b/src/slic3r/GUI/TickCode.hpp @@ -0,0 +1,63 @@ +#ifndef slic3r_GUI_TickCode_hpp_ +#define slic3r_GUI_TickCode_hpp_ + +#include "libslic3r/CustomGCode.hpp" +#include "IMSlider_Utils.hpp" +#include + +namespace Slic3r { +using namespace CustomGCode; +namespace GUI { + +struct TickCode +{ + bool operator<(const TickCode& other) const { return other.tick > this->tick; } + bool operator>(const TickCode& other) const { return other.tick < this->tick; } + + int tick = 0; + Type type = ColorChange; + int extruder = 0; + std::string color; + std::string extra; +}; + +class TickCodeInfo +{ + std::string pause_print_msg; + bool m_suppress_plus = false; + bool m_suppress_minus = false; + bool m_use_default_colors = false; + + std::vector* m_colors{ nullptr };// reference to IMSlider::m_extruder_colors + ColorGenerator color_generator; + + std::string get_color_for_tick(TickCode tick, Type type, const int extruder); + +public: + std::set ticks{}; + Mode mode = Undef; + + bool empty() const { return ticks.empty(); } + void set_pause_print_msg(const std::string& message) { pause_print_msg = message; } + + bool add_tick(const int tick, Type type, int extruder, double print_z); + bool edit_tick(std::set::iterator it, double print_z); + void switch_code(Type type_from, Type type_to); + bool switch_code_for_tick(std::set::iterator it, Type type_to, const int extruder); + void erase_all_ticks_with_code(Type type); + + bool has_tick_with_code(Type type); + bool has_tick(int tick); + + void suppress_plus(bool suppress) { m_suppress_plus = suppress; } + void suppress_minus(bool suppress) { m_suppress_minus = suppress; } + bool suppressed_plus() { return m_suppress_plus; } + bool suppressed_minus() { return m_suppress_minus; } + void set_default_colors(bool default_colors_on) { m_use_default_colors = default_colors_on; } + + void set_extruder_colors(std::vector* extruder_colors) { m_colors = extruder_colors; } +}; + +}} // Slic3r + +#endif // slic3r_GUI_TickCode_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index bcbf33c079..07b703d5fd 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1808,7 +1808,7 @@ DiffPresetDialog::DiffPresetDialog(MainFrame* mainframe) m_preset_bundle_right = std::make_unique(*wxGetApp().preset_bundle); //m_top_info_line = new wxStaticText(this, wxID_ANY, "Select presets to compare"); - m_top_info_line = new wxStaticText(this, wxID_ANY, "Select presets to compare"); + m_top_info_line = new wxStaticText(this, wxID_ANY, _L("Select presets to compare")); m_top_info_line->SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold()); m_bottom_info_line = new wxStaticText(this, wxID_ANY, ""); diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 41eb30966d..79e5c8de34 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -533,28 +533,23 @@ void MachineInfoPanel::update_ams_ext(MachineObject *obj) AmsPanel *amspanel = m_amspanel_list[ams_index]; amspanel->Show(); - auto it = ver_list.find(atoi(iter->first.c_str())); auto ams_id = std::stoi(iter->second->id); + wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_id + 1)); + ams_name = ams_text; if (it == ver_list.end()) { // hide this ams - wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_id + 1)); - - ams_name = ams_text; ams_sn = "-"; ams_ver = "-"; } else { + // update ams img if (m_obj->upgrade_display_state == (int)MachineObject::UpgradingDisplayState::UpgradingInProgress) { ams_ver = "-"; amspanel->m_ams_new_version_img->Hide(); } else { - // update ams img - wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_id + 1)); - ams_name = ams_text; - if (obj->new_ver_list.empty() && !obj->m_new_ver_list_exist) { if (obj->upgrade_new_version && obj->ams_new_version_number.compare(it->second.sw_ver) != 0) { @@ -743,6 +738,17 @@ void MachineInfoPanel::on_sys_color_changed() } } +void MachineInfoPanel::confirm_upgrade(MachineObject* obj) +{ + if (obj) { + obj->command_upgrade_confirm(); + obj->upgrade_display_state = MachineObject::UpgradingDisplayState::UpgradingInProgress; + obj->upgrade_display_hold_count = HOLD_COUNT_MAX; + // enter in progress status first + this->show_status(MachineObject::UpgradingDisplayState::UpgradingInProgress); + } +} + void MachineInfoPanel::upgrade_firmware_internal() { if (!m_obj) return; @@ -751,7 +757,7 @@ void MachineInfoPanel::upgrade_firmware_internal() { } else if (panel_type == ptAmsPanel) { m_obj->command_upgrade_firmware(m_ams_info); } else if (panel_type == ptPushPanel) { - m_obj->command_upgrade_confirm(); + confirm_upgrade(); } } @@ -760,9 +766,7 @@ void MachineInfoPanel::on_upgrade_firmware(wxCommandEvent &event) if (confirm_dlg == nullptr) { confirm_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Update firmware")); confirm_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) { - if (m_obj) { - m_obj->command_upgrade_confirm(); - } + this->confirm_upgrade(m_obj); }); } confirm_dlg->update_text(_L("Are you sure you want to update? This will take about 10 minutes. Do not turn off the power while the printer is updating.")); @@ -805,14 +809,13 @@ void MachineInfoPanel::on_show_release_note(wxMouseEvent &event) } ReleaseNoteDialog dlg; - - if (!next_version_release_note.empty()) { + if (!m_obj->ota_new_version_number.empty()) { dlg.update_release_note(next_version_release_note, version_number); dlg.ShowModal(); return; } - if (!now_version_release_note.empty()) { + if (!m_obj->get_ota_version().empty()) { dlg.update_release_note(now_version_release_note, version_number); dlg.ShowModal(); return; @@ -904,6 +907,8 @@ void UpgradePanel::update(MachineObject *obj) force_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) { if (m_obj) { m_obj->command_upgrade_confirm(); + m_obj->upgrade_display_state == MachineObject::UpgradingDisplayState::UpgradingInProgress; + m_obj->upgrade_display_hold_count = HOLD_COUNT_MAX; } }); } diff --git a/src/slic3r/GUI/UpgradePanel.hpp b/src/slic3r/GUI/UpgradePanel.hpp index 55fa69b18f..4bab359b34 100644 --- a/src/slic3r/GUI/UpgradePanel.hpp +++ b/src/slic3r/GUI/UpgradePanel.hpp @@ -109,6 +109,7 @@ protected: void upgrade_firmware_internal(); void on_show_release_note(wxMouseEvent &event); + void confirm_upgrade(MachineObject* obj = nullptr); public: MachineInfoPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 68488644ba..1ae709bcc5 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -38,6 +38,7 @@ GuideFrame::GuideFrame(GUI_App *pGUI, long style) : DPIDialog((wxWindow *) (pGUI->mainframe), wxID_ANY, "BambuStudio", wxDefaultPosition, wxDefaultSize, style), m_appconfig_new() { + SetBackgroundColour(*wxWHITE); // INI m_SectionName = "firstguide"; PrivacyUse = true; @@ -57,7 +58,9 @@ GuideFrame::GuideFrame(GUI_App *pGUI, long style) wxLogError("Could not init m_browser"); return; } - + m_browser->Hide(); + m_browser->SetSize(0, 0); + SetSizer(topsizer); topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); @@ -123,7 +126,6 @@ GuideFrame::~GuideFrame() void GuideFrame::load_url(wxString &url) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< " enter, url=" << url.ToStdString(); - this->Show(); WebView::LoadUrl(m_browser, url); m_browser->SetFocus(); UpdateState(); @@ -223,7 +225,9 @@ void GuideFrame::OnNavigationRequest(wxWebViewEvent &evt) void GuideFrame::OnNavigationComplete(wxWebViewEvent &evt) { //wxLogMessage("%s", "Navigation complete; url='" + evt.GetURL() + "'"); - + m_browser->Show(); + Layout(); + wxString NewUrl = evt.GetURL(); UpdateState(); @@ -827,7 +831,8 @@ bool GuideFrame::run() app.preset_bundle->export_selections(*app.app_config); BOOST_LOG_TRIVIAL(info) << "GuideFrame before ShowModal"; - if (this->ShowModal() == wxID_OK) { + int result = this->ShowModal(); + if (result == wxID_OK) { bool apply_keeped_changes = false; BOOST_LOG_TRIVIAL(info) << "GuideFrame returned ok"; if (! this->apply_config(app.app_config, app.preset_bundle, app.preset_updater, apply_keeped_changes)) @@ -843,7 +848,7 @@ bool GuideFrame::run() BOOST_LOG_TRIVIAL(info) << "GuideFrame applied"; this->Close(); return true; - } else { + } else if (result == wxID_CANCEL) { BOOST_LOG_TRIVIAL(info) << "GuideFrame cancelled"; if (app.preset_bundle->printers.only_default_printers()) { //we install the default here @@ -861,6 +866,8 @@ bool GuideFrame::run() else return false; } + else + return false; } int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList, std::string filepath, std::string &sVendor, std::string &sType) diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index e6a7a3757f..1c324b8d3b 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -49,8 +49,11 @@ string &replace_str(string &str, const string &to_replaced, const string &newcha return str; } +int ZUserLogin::web_sequence_id = 20000; + ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_ANY, "BambuStudio") { + SetBackgroundColour(*wxWHITE); // Url AppConfig * config = wxGetApp().app_config; NetworkAgent* agent = wxGetApp().getAgent(); @@ -77,6 +80,8 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN wxLogError("Could not init m_browser"); return; } + m_browser->Hide(); + m_browser->SetSize(0, 0); // Log backend information // wxLogMessage(wxWebView::GetBackendVersionInfo().ToString()); @@ -104,12 +109,7 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN wxSize pSize = FromDIP(wxSize(650, 840)); SetSize(pSize); - //CenterOnParent(); - int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); - int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); - int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; - - this->SetPosition(wxPoint((screenwidth - pSize.x) / 2, MaxY)); + CenterOnParent(); //Param m_AutotestToken = ""; @@ -148,7 +148,6 @@ bool ZUserLogin::run() { void ZUserLogin::load_url(wxString &url) { - this->Show(); m_browser->LoadURL(url); m_browser->SetFocus(); UpdateState(); @@ -195,7 +194,8 @@ void ZUserLogin::OnNavigationRequest(wxWebViewEvent &evt) void ZUserLogin::OnNavigationComplete(wxWebViewEvent &evt) { // wxLogMessage("%s", "Navigation complete; url='" + evt.GetURL() + "'"); - + m_browser->Show(); + Layout(); UpdateState(); } @@ -251,7 +251,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) { wxString str_input = evt.GetString(); try { - json j = json::parse(str_input); + json j = json::parse(str_input); wxString strCmd = j["command"]; @@ -264,6 +264,40 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) wxGetApp().handle_script_message(j.dump()); Close(); } + else if (strCmd == "get_localhost_url") { + BOOST_LOG_TRIVIAL(info) << "thirdparty_login: get_localhost_url"; + wxGetApp().start_http_server(); + std::string sequence_id = j["sequence_id"].get(); + CallAfter([this, sequence_id] { + json ack_j; + ack_j["command"] = "get_localhost_url"; + ack_j["response"]["base_url"] = std::string(LOCALHOST_URL) + std::to_string(LOCALHOST_PORT); + ack_j["response"]["result"] = "success"; + ack_j["sequence_id"] = sequence_id; + wxString str_js = wxString::Format("window.postMessage(%s)", ack_j.dump()); + this->RunScript(str_js); + }); + } + else if (strCmd == "thirdparty_login") { + BOOST_LOG_TRIVIAL(info) << "thirdparty_login: thirdparty_login"; + if (j["data"].contains("url")) { + std::string jump_url = j["data"]["url"].get(); + CallAfter([this, jump_url] { + wxString url = wxString::FromUTF8(jump_url); + wxLaunchDefaultBrowser(url); + }); + } + } + else if (strCmd == "new_webpage") { + if (j["data"].contains("url")) { + std::string jump_url = j["data"]["url"].get(); + CallAfter([this, jump_url] { + wxString url = wxString::FromUTF8(jump_url); + wxLaunchDefaultBrowser(url); + }); + } + return; + } } catch (std::exception &e) { wxMessageBox(e.what(), "parse json failed", wxICON_WARNING); Close(); @@ -276,8 +310,6 @@ void ZUserLogin::RunScript(const wxString &javascript) // the "Run Script" dialog box, it is shown there for convenient updating. m_javascript = javascript; - // wxLogMessage("Running JavaScript:\n%s\n", javascript); - if (!m_browser) return; WebView::RunScript(m_browser, javascript); diff --git a/src/slic3r/GUI/WebUserLoginDialog.hpp b/src/slic3r/GUI/WebUserLoginDialog.hpp index ba46614669..6a820bef9a 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.hpp +++ b/src/slic3r/GUI/WebUserLoginDialog.hpp @@ -27,8 +27,6 @@ #include #include "wx/textctrl.h" -#include "GUI_App.hpp" - namespace Slic3r { namespace GUI { class ZUserLogin : public wxDialog @@ -62,7 +60,7 @@ public: bool run(); - + static int web_sequence_id; private: wxTimer *m_timer { nullptr }; void OnTimer(wxTimerEvent &event); diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 04f709cd52..a94e86c810 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -88,20 +88,6 @@ WebViewPanel::WebViewPanel(wxWindow *parent) topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); - Bind(EVT_WEBVIEW_RECREATED, [this](auto &evt) { -#ifdef __WXMSW__ - m_browser = dynamic_cast(evt.GetEventObject()); - if (m_browser == nullptr) { - wxLogError("Could not recreate browser"); - return; - } - GetSizer()->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); - GetSizer()->Layout(); -#else - (void) this; -#endif - }); - // Log backend information if (wxGetApp().get_mode() == comDevelop) { wxLogMessage(wxWebView::GetBackendVersionInfo().ToString()); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 807cc0bfdb..01c319d917 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -9,21 +9,12 @@ namespace Slic3r { namespace GUI { -static const int LOAD_STEP_COUNT = 5; -static const int UNLOAD_STEP_COUNT = 3; +static const int LOAD_STEP_COUNT = 5; +static const int UNLOAD_STEP_COUNT = 3; +static const int VT_LOAD_STEP_COUNT = 4; static const wxColour AMS_TRAY_DEFAULT_COL = wxColour(255, 255, 255); -static wxString FILAMENT_LOAD_STEP_STRING[LOAD_STEP_COUNT] = { - _L("Heat the nozzle"), - _L("Cut filament"), - _L("Pull back current filament"), - _L("Push new filament into extruder"), - _L("Purge old filament"), -}; - -static wxString FILAMENT_UNLOAD_STEP_STRING[UNLOAD_STEP_COUNT] = {_L("Heat the nozzle"), _L("Cut filament"), _L("Pull back current filament")}; - wxDEFINE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_LOAD, SimpleEvent); wxDEFINE_EVENT(EVT_AMS_UNLOAD, SimpleEvent); @@ -834,8 +825,8 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in auto mouse_pos = ClientToScreen(e.GetPosition()); auto rect = ClientToScreen(wxPoint(0, 0)); - if (mouse_pos.x > rect.x + GetSize().x - FromDIP(20) && - mouse_pos.y > rect.y + GetSize().y - FromDIP(40)) { + if (mouse_pos.x > rect.x + GetSize().x - FromDIP(25) && + mouse_pos.y > rect.y + GetSize().y - FromDIP(25)) { wxCommandEvent event(EVT_AMS_SHOW_HUMIDITY_TIPS); wxPostEvent(GetParent()->GetParent(), event); } @@ -1459,11 +1450,10 @@ void AmsCans::PlayRridLoading(wxString canid) std::string AmsCans::GetCurrentCan() { - if (m_canlib_selection > -1 && m_canlib_selection < m_can_lib_list.size()) { - CanLibs *lib = m_can_lib_list[m_canlib_selection]; - return lib->canLib->m_info.can_id; - } - return ""; + if (m_canlib_selection < 0) + return ""; + + return wxString::Format("%d", m_canlib_selection).ToStdString(); } void AmsCans::StopRridLoading(wxString canid) @@ -1805,9 +1795,15 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_filament_unload_step->SetSize(AMS_STEP_SIZE); m_filament_unload_step->SetBackgroundColour(*wxWHITE); + m_filament_vt_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); + m_filament_vt_load_step->SetMinSize(AMS_STEP_SIZE); + m_filament_vt_load_step->SetSize(AMS_STEP_SIZE); + m_filament_vt_load_step->SetBackgroundColour(*wxWHITE); + m_simplebook_right->AddPage(tip_right, wxEmptyString, false); m_simplebook_right->AddPage(m_filament_load_step, wxEmptyString, false); m_simplebook_right->AddPage(m_filament_unload_step, wxEmptyString, false); + m_simplebook_right->AddPage(m_filament_vt_load_step, wxEmptyString, false); m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24); @@ -1947,6 +1943,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxPoint popup_pos(img_pos.x, img_pos.y + GetRect().height); m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); m_Humidity_tip_popup.Popup(); + m_Humidity_tip_popup.GetParent()->SetFocus(); }); @@ -2009,51 +2006,19 @@ wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) return col; } -void AMSControl::SetActionState(AMSAction action, bool support_virtual_tray) +void AMSControl::SetActionState(bool button_status[]) { - m_button_area->Layout(); - m_button_area->Fit(); + if (button_status[ActionButton::ACTION_BTN_CALI]) m_button_extrusion_cali->Enable(); + else m_button_extrusion_cali->Disable(); - switch (action) { - case Slic3r::GUI::AMSAction::AMS_ACTION_NONE: break; - case Slic3r::GUI::AMSAction::AMS_ACTION_LOAD: - m_button_extrusion_cali->Enable(); - m_button_extruder_feed->Enable(); - m_button_extruder_back->Disable(); - break; - case Slic3r::GUI::AMSAction::AMS_ACTION_UNLOAD: - m_button_extrusion_cali->Enable(); - m_button_extruder_feed->Disable(); - m_button_extruder_back->Enable(); - break; - case Slic3r::GUI::AMSAction::AMS_ACTION_PRINTING: - m_button_extrusion_cali->Disable(); - m_button_extruder_feed->Disable(); - m_button_extruder_back->Disable(); - break; - case Slic3r::GUI::AMSAction::AMS_ACTION_NORMAL: - m_button_extrusion_cali->Enable(); - m_button_extruder_feed->Enable(); - m_button_extruder_back->Enable(); - break; - case Slic3r::GUI::AMSAction::AMS_ACTION_CALI: - m_button_extrusion_cali->Enable(); - m_button_extruder_feed->Disable(); - m_button_extruder_back->Disable(); - break; - case Slic3r::GUI::AMSAction::AMS_ACTION_NOAMS: - if (support_virtual_tray) - m_button_extrusion_cali->Enable(); - else - m_button_extrusion_cali->Disable(); - m_button_extruder_feed->Disable(); - m_button_extruder_back->Disable(); - break; - default: break; - } + if (button_status[ActionButton::ACTION_BTN_LOAD]) m_button_extruder_feed->Enable(); + else m_button_extruder_feed->Disable(); + + if (button_status[ActionButton::ACTION_BTN_UNLOAD]) m_button_extruder_back->Enable(); + else m_button_extruder_back->Disable(); } -void AMSControl::EnterNoneAMSMode() +void AMSControl::EnterNoneAMSMode(bool support_vt_load) { m_simplebook_amsitems->Hide(); m_panel_top->Hide(); @@ -2063,8 +2028,14 @@ void AMSControl::EnterNoneAMSMode() m_button_ams_setting->Hide(); m_button_guide->Hide(); m_button_retry->Hide(); - m_button_extruder_feed->Hide(); - m_button_extruder_back->Hide(); + if (support_vt_load) { + m_button_extruder_feed->Show(); + m_button_extruder_back->Show(); + } else { + m_button_extruder_feed->Hide(); + m_button_extruder_back->Hide(); + } + ShowFilamentTip(false); m_amswin->Layout(); m_amswin->Fit(); @@ -2162,8 +2133,36 @@ void AMSControl::msw_rescale() void AMSControl::UpdateStepCtrl() { - for (int i = 0; i < LOAD_STEP_COUNT; i++) { m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); } - for (int i = 0; i < UNLOAD_STEP_COUNT; i++) { m_filament_unload_step->AppendItem(FILAMENT_UNLOAD_STEP_STRING[i]); } + wxString FILAMENT_LOAD_STEP_STRING[LOAD_STEP_COUNT] = { + _L("Heat the nozzle"), + _L("Cut filament"), + _L("Pull back current filament"), + _L("Push new filament into extruder"), + _L("Purge old filament"), + }; + + wxString VT_TRAY_LOAD_STEP_STRING[VT_LOAD_STEP_COUNT] = { + _L("Heat the nozzle"), + _L("Feed new filament from external spool"), + _L("Confirm whether the filament has been extruded"), + _L("Purge old filament"), + }; + + wxString FILAMENT_UNLOAD_STEP_STRING[UNLOAD_STEP_COUNT] = { + _L("Heat the nozzle"), + _L("Cut filament"), + _L("Pull back current filament") + }; + + for (int i = 0; i < LOAD_STEP_COUNT; i++) { + m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); + } + for (int i = 0; i < UNLOAD_STEP_COUNT; i++) { + m_filament_unload_step->AppendItem(FILAMENT_UNLOAD_STEP_STRING[i]); + } + for (int i = 0; i < VT_LOAD_STEP_COUNT; i++) { + m_filament_vt_load_step->AppendItem(VT_TRAY_LOAD_STEP_STRING[i]); + } } void AMSControl::CreateAms() @@ -2204,7 +2203,7 @@ void AMSControl::Reset() m_current_senect = ""; } -void AMSControl::show_noams_mode(bool show, bool support_virtual_tray) +void AMSControl::show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load) { show_vams(support_virtual_tray); m_sizer_ams_tips->Show(support_virtual_tray); @@ -2214,7 +2213,7 @@ void AMSControl::show_noams_mode(bool show, bool support_virtual_tray) m_button_extrusion_cali->Show(); } - show?ExitNoneAMSMode() : EnterNoneAMSMode(); + show?ExitNoneAMSMode() : EnterNoneAMSMode(support_vt_load); } void AMSControl::show_vams(bool show) @@ -2244,6 +2243,10 @@ void AMSControl::update_vams_kn_value(AmsTray tray) m_vams_info.n = tray.n; m_vams_lib->m_info.k = tray.k; m_vams_lib->m_info.n = tray.n; + m_vams_info.material_name = tray.get_display_filament_type(); + m_vams_info.material_colour = tray.get_color(); + m_vams_lib->m_info.material_name = tray.get_display_filament_type(); + m_vams_lib->m_info.material_colour = tray.get_color(); m_vams_lib->Refresh(); } @@ -2392,26 +2395,56 @@ void AMSControl::SwitchAms(std::string ams_id) // update buttons } -void AMSControl::SetFilamentStep(int item_idx, bool isload) +void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type) { - if (item_idx == FilamentStep::STEP_IDLE && isload) { + if (item_idx == FilamentStep::STEP_IDLE) { + m_simplebook_right->SetSelection(0); m_filament_load_step->Idle(); - return; - } - - if (item_idx == FilamentStep::STEP_IDLE && !isload) { m_filament_unload_step->Idle(); + m_filament_vt_load_step->Idle(); return; } - if (item_idx >= 0 && isload && item_idx < FilamentStep::STEP_COUNT) { - m_simplebook_right->SetSelection(1); - m_filament_load_step->SelectItem(item_idx - 1); - } - - if (item_idx >= 0 && !isload && item_idx < FilamentStep::STEP_COUNT) { - m_simplebook_right->SetSelection(2); - m_filament_unload_step->SelectItem(item_idx - 1); + if (f_type == FilamentStepType::STEP_TYPE_LOAD) { + if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) { + m_simplebook_right->SetSelection(1); + m_filament_load_step->SelectItem(item_idx - 1); + } else { + m_filament_load_step->Idle(); + } + } else if (f_type == FilamentStepType::STEP_TYPE_UNLOAD) { + if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) { + m_simplebook_right->SetSelection(2); + m_filament_unload_step->SelectItem(item_idx - 1); + } + else { + m_filament_unload_step->Idle(); + } + } else if (f_type == FilamentStepType::STEP_TYPE_VT_LOAD) { + m_simplebook_right->SetSelection(3); + if (item_idx == STEP_HEAT_NOZZLE) { + m_filament_vt_load_step->SelectItem(0); + } + else if (item_idx == STEP_FEED_FILAMENT) { + m_filament_vt_load_step->SelectItem(1); + } + else if (item_idx == STEP_CONFIRM_EXTRUDED) { + m_filament_vt_load_step->SelectItem(2); + } + else if (item_idx == STEP_PURGE_OLD_FILAMENT) { + m_filament_vt_load_step->SelectItem(3); + } + else { + m_filament_vt_load_step->Idle(); + } + } else { + if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) { + m_simplebook_right->SetSelection(1); + m_filament_load_step->SelectItem(item_idx - 1); + } + else { + m_filament_load_step->Idle(); + } } } @@ -2459,6 +2492,15 @@ bool AMSControl::Enable(bool enable) return wxWindow::Enable(enable); } +void AMSControl::SetExtruder(bool on_off, wxColour col) +{ + if (!on_off) { + m_extruder->TurnOff(); + } else { + m_extruder->TurnOn(col); + } +} + void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step) { AmsCansWindow *cans = nullptr; @@ -2476,26 +2518,22 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (cans == nullptr) return; if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - if (ams_id == m_current_ams) { m_extruder->TurnOff(); } cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - type = AMSPassRoadType::AMS_ROAD_TYPE_LOAD; if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { - if (ams_id == m_current_ams) { m_extruder->TurnOff(); } cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { - if (ams_id == m_current_ams) { m_extruder->TurnOn(GetCanColour(ams_id, canid)); } - cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { - if (ams_id == m_current_ams) { m_extruder->TurnOn(GetCanColour(ams_id, canid)); } cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); } for (auto i = 0; i < m_ams_info.size(); i++) { @@ -2504,14 +2542,6 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy m_ams_info[i].current_can_id = canid; } } - - if (type == AMSPassRoadType::AMS_ROAD_TYPE_LOAD) { - SetActionState(AMSAction::AMS_ACTION_LOAD); - } - - if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) { - SetActionState(AMSAction::AMS_ACTION_UNLOAD); - } } void AMSControl::on_filament_load(wxCommandEvent &event) diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 9f1503e0d9..18bdd8bba1 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -35,6 +35,13 @@ namespace Slic3r { namespace GUI { +enum ActionButton { + ACTION_BTN_CALI = 0, + ACTION_BTN_LOAD = 1, + ACTION_BTN_UNLOAD = 2, + ACTION_BTN_COUNT = 3 +}; + enum class AMSRoadMode : int { AMS_ROAD_MODE_LEFT, AMS_ROAD_MODE_LEFT_RIGHT, @@ -95,9 +102,17 @@ enum FilamentStep { STEP_PULL_CURR_FILAMENT, STEP_PUSH_NEW_FILAMENT, STEP_PURGE_OLD_FILAMENT, + STEP_FEED_FILAMENT, + STEP_CONFIRM_EXTRUDED, STEP_COUNT, }; +enum FilamentStepType { + STEP_TYPE_LOAD = 0, + STEP_TYPE_UNLOAD = 1, + STEP_TYPE_VT_LOAD = 2, +}; + #define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(14), FromDIP(14)) #define AMS_ITEM_SIZE wxSize(FromDIP(82), FromDIP(27)) #define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27)) @@ -495,6 +510,7 @@ protected: ::StepIndicator *m_filament_load_step = {nullptr}; ::StepIndicator *m_filament_unload_step = {nullptr}; + ::StepIndicator *m_filament_vt_load_step = {nullptr}; Button *m_button_extruder_feed = {nullptr}; Button *m_button_extruder_back = {nullptr}; @@ -515,8 +531,8 @@ public: wxColour GetCanColour(std::string amsid, std::string canid); bool m_is_none_ams_mode{false}; - void SetActionState(AMSAction action, bool support_virtual_tray = true); - void EnterNoneAMSMode(); + void SetActionState(bool button_status[]); + void EnterNoneAMSMode(bool support_vt_load = false); void ExitNoneAMSMode(); void EnterCalibrationMode(bool read_to_calibration); @@ -528,7 +544,7 @@ public: void PlayRridLoading(wxString amsid, wxString canid); void StopRridLoading(wxString amsid, wxString canid); - void SetFilamentStep(int item_idx, bool isload = true); + void SetFilamentStep(int item_idx, FilamentStepType f_type); void ShowFilamentTip(bool hasams = true); void SetHumidity(std::string amsid, int humidity); @@ -536,6 +552,7 @@ public: void CreateAms(); void UpdateAms(std::vector info, bool keep_selection = true, bool has_extrusion_cali = true); void AddAms(AMSinfo info, bool refresh = true); + void SetExtruder(bool on_off, wxColour col); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); void SwitchAms(std::string ams_id); @@ -549,7 +566,7 @@ public: void on_clibration_cancel_click(wxMouseEvent &event); void Reset(); - void show_noams_mode(bool show, bool support_virtual_tray); + void show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load = false); void show_vams(bool show); void show_vams_kn_value(bool show); void update_vams_kn_value(AmsTray tray); diff --git a/src/slic3r/GUI/Widgets/DropDown.cpp b/src/slic3r/GUI/Widgets/DropDown.cpp index 6871437c9a..ca586dff39 100644 --- a/src/slic3r/GUI/Widgets/DropDown.cpp +++ b/src/slic3r/GUI/Widgets/DropDown.cpp @@ -3,9 +3,13 @@ #include +#ifdef __WXGTK__ +#include +#endif + wxDEFINE_EVENT(EVT_DISMISS, wxCommandEvent); -BEGIN_EVENT_TABLE(DropDown, wxPopupTransientWindow) +BEGIN_EVENT_TABLE(DropDown, PopupWindow) EVT_LEFT_DOWN(DropDown::mouseDown) EVT_LEFT_UP(DropDown::mouseReleased) @@ -50,7 +54,7 @@ DropDown::DropDown(wxWindow * parent, void DropDown::Create(wxWindow * parent, long style) { - wxPopupTransientWindow::Create(parent, wxPU_CONTAINS_CONTROLS); + PopupWindow::Create(parent, wxPU_CONTAINS_CONTROLS); SetBackgroundStyle(wxBG_STYLE_PAINT); SetBackgroundColour(*wxWHITE); state_handler.attach({&border_color, &text_color, &selector_border_color, &selector_background_color}); @@ -62,7 +66,7 @@ void DropDown::Create(wxWindow * parent, // BBS set default font SetFont(Label::Body_14); #ifdef __WXOSX__ - // wxPopupTransientWindow releases mouse on idle, which may cause various problems, + // PopupWindow releases mouse on idle, which may cause various problems, // such as losting mouse move, and dismissing soon on first LEFT_DOWN event. Bind(wxEVT_IDLE, [] (wxIdleEvent & evt) {}); #endif @@ -343,6 +347,10 @@ void DropDown::messureSize() szContent.y *= std::min((size_t)15, texts.size()); szContent.y += texts.size() > 15 ? rowSize.y / 2 : 0; wxWindow::SetSize(szContent); +#ifdef __WXGTK__ + // Gtk has a wrapper window for popup widget + gtk_window_resize (GTK_WINDOW (m_widget), szContent.x, szContent.y); +#endif need_sync = false; } @@ -417,11 +425,12 @@ void DropDown::mouseMove(wxMouseEvent &event) wxPoint pt = event.GetPosition(); if (pressedDown) { wxPoint pt2 = offset + pt - dragStart; - dragStart = pt; + wxSize size = GetSize(); + dragStart = pt; if (pt2.y > 0) pt2.y = 0; - else if (pt2.y + rowSize.y * texts.size() < GetSize().y) - pt2.y = GetSize().y - rowSize.y * texts.size(); + else if (pt2.y + rowSize.y * int(texts.size()) < size.y) + pt2.y = size.y - rowSize.y * int(texts.size()); if (pt2.y != offset.y) { offset = pt2; hover_item = -1; // moved @@ -443,11 +452,12 @@ void DropDown::mouseMove(wxMouseEvent &event) void DropDown::mouseWheelMoved(wxMouseEvent &event) { auto delta = event.GetWheelRotation(); - wxPoint pt2 = offset + wxPoint{0, delta}; + wxSize size = GetSize(); + wxPoint pt2 = offset + wxPoint{0, delta}; if (pt2.y > 0) pt2.y = 0; - else if (pt2.y + rowSize.y * texts.size() < GetSize().y) - pt2.y = GetSize().y - rowSize.y * texts.size(); + else if (pt2.y + rowSize.y * int(texts.size()) < size.y) + pt2.y = size.y - rowSize.y * int(texts.size()); if (pt2.y != offset.y) { offset = pt2; } else { diff --git a/src/slic3r/GUI/Widgets/DropDown.hpp b/src/slic3r/GUI/Widgets/DropDown.hpp index b2b7eaa73e..e2a6cb4930 100644 --- a/src/slic3r/GUI/Widgets/DropDown.hpp +++ b/src/slic3r/GUI/Widgets/DropDown.hpp @@ -4,6 +4,7 @@ #include #include "../wxExtensions.hpp" #include "StateHandler.hpp" +#include "PopupWindow.hpp" #define DD_NO_CHECK_ICON 0x0001 #define DD_NO_TEXT 0x0002 @@ -11,7 +12,7 @@ wxDECLARE_EVENT(EVT_DISMISS, wxCommandEvent); -class DropDown : public wxPopupTransientWindow +class DropDown : public PopupWindow { std::vector & texts; std::vector & icons; diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index 7e4eadb61f..da0a414b22 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -2,6 +2,7 @@ #include "Label.hpp" #include "../BitmapCache.hpp" #include "../I18N.hpp" +#include "../GUI_App.hpp" #include #include @@ -44,44 +45,26 @@ void Fan::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSi //auto m_bitmap_pointer = ScalableBitmap(this, "fan_pointer", FromDIP(25)); //m_img_pointer = m_bitmap_pointer.bmp().ConvertToImage(); - /*m_bitmap_scale_0 = ScalableBitmap(this, "fan_dash_board_level_0", FromDIP(13)); - m_bitmap_scale_1 = ScalableBitmap(this, "fan_dash_board_level_1", FromDIP(13)); - m_bitmap_scale_2 = ScalableBitmap(this, "fan_dash_board_level_2", FromDIP(13)); - m_bitmap_scale_3 = ScalableBitmap(this, "fan_dash_board_level_3", FromDIP(10)); - m_bitmap_scale_4 = ScalableBitmap(this, "fan_dash_board_level_4", FromDIP(5)); - m_bitmap_scale_5 = ScalableBitmap(this, "fan_dash_board_level_5", FromDIP(5)); - m_bitmap_scale_6 = ScalableBitmap(this, "fan_dash_board_level_6", FromDIP(10)); - m_bitmap_scale_7 = ScalableBitmap(this, "fan_dash_board_level_7", FromDIP(13)); - m_bitmap_scale_8 = ScalableBitmap(this, "fan_dash_board_level_8", FromDIP(13)); - m_bitmap_scale_9 = ScalableBitmap(this, "fan_dash_board_level_9", FromDIP(13));*/ - m_bitmap_bk = ScalableBitmap(this, "fan_dash_bk", FromDIP(80)); for (auto i = 0; i <= 10; i++) { - auto a = wxString::Format("fan_scale_%d", i); +#ifdef __APPLE__ + auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(60)); + m_bitmap_scales.push_back(m_bitmap_scale); +#else auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(46)); m_bitmap_scales.push_back(m_bitmap_scale); +#endif + } - /* m_bitmap_scale_0 = ScalableBitmap(this, "fan_scale_0", FromDIP(60)); - m_bitmap_scale_1 = ScalableBitmap(this, "fan_scale_1", FromDIP(60)); - m_bitmap_scale_2 = ScalableBitmap(this, "fan_scale_2", FromDIP(60)); - m_bitmap_scale_3 = ScalableBitmap(this, "fan_scale_3", FromDIP(60)); - m_bitmap_scale_4 = ScalableBitmap(this, "fan_scale_4", FromDIP(60)); - m_bitmap_scale_5 = ScalableBitmap(this, "fan_scale_5", FromDIP(60)); - m_bitmap_scale_6 = ScalableBitmap(this, "fan_scale_6", FromDIP(60)); - m_bitmap_scale_7 = ScalableBitmap(this, "fan_scale_7", FromDIP(60)); - m_bitmap_scale_8 = ScalableBitmap(this, "fan_scale_8", FromDIP(60)); - m_bitmap_scale_9 = ScalableBitmap(this, "fan_scale_9", FromDIP(60)); - m_bitmap_scale_10 = ScalableBitmap(this, "fan_scale_10", FromDIP(60));*/ - -#ifdef __APPLE__ - SetMinSize(wxSize(FromDIP(94), FromDIP(81) + FromDIP(6))); - SetMaxSize(wxSize(FromDIP(94), FromDIP(81) + FromDIP(6))); -#else +//#ifdef __APPLE__ +// SetMinSize(wxSize(FromDIP(100), FromDIP(100) + FromDIP(6))); +// SetMaxSize(wxSize(FromDIP(100), FromDIP(100) + FromDIP(6))); +//#else SetMinSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6))); SetMaxSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6))); -#endif // __APPLE__ +//#endif // __APPLE__ Bind(wxEVT_PAINT, &Fan::paintEvent, this); } @@ -155,13 +138,13 @@ void Fan::doRender(wxDC& dc) //fan val dc.SetTextForeground(DRAW_TEXT_COLOUR); - dc.SetFont(::Label::Head_14); + dc.SetFont(::Label::Head_13); auto speeds = wxString::Format("%d%%", m_current_speeds * 10); - dc.DrawText(speeds, (size.x - dc.GetTextExtent(speeds).x) / 2, size.y - dc.GetTextExtent(speeds).y - FromDIP(10)); + dc.DrawText(speeds, (size.x - dc.GetTextExtent(speeds).x) / 2 + FromDIP(2), size.y - dc.GetTextExtent(speeds).y - FromDIP(5)); //rpm - dc.SetFont(::Label::Body_13); - dc.DrawText(rpm, (size.x - dc.GetTextExtent(rpm).x) / 2, size.y - dc.GetTextExtent(rpm).y); + //dc.SetFont(::Label::Body_13); + //dc.DrawText(rpm, (size.x - dc.GetTextExtent(rpm).x) / 2, size.y - dc.GetTextExtent(rpm).y); } void Fan::msw_rescale() { @@ -303,9 +286,9 @@ void FanOperate::doRender(wxDC& dc) //txt dc.SetFont(::Label::Body_12); dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(0x898989))); - wxString text = wxString::Format("%d%%", m_current_speeds * 10); + wxString text = wxString::Format("%d%%", 10); wxSize text_size = dc.GetTextExtent(text); - dc.DrawText(text, wxPoint(left_fir + (left_fir- text_size.x) / 2, (size.y- text_size.y) / 2 + 2)); + dc.DrawText(text, wxPoint(left_fir + (left_fir- text_size.x) / 2, (size.y- text_size.y) / 2)); } void FanOperate::msw_rescale() { @@ -411,15 +394,16 @@ void FanControl::command_control_fan() { if (m_current_speed < 0 || m_current_speed > 10) { return; } int speed = floor(m_current_speed * float(25.5)); - m_obj->command_control_fan_val(m_type, speed); - post_event(wxCommandEvent(EVT_FAN_CHANGED)); + if (m_update_already) { + m_obj->command_control_fan_val(m_type, speed); + post_event(wxCommandEvent(EVT_FAN_CHANGED)); + } } void FanControl::on_swith_fan(wxMouseEvent& evt) { int speed = 0; if (m_switch_fan) { - speed = 0; m_switch_button->SetBitmap(m_bitmap_toggle_off->bmp()); m_switch_fan = false; } @@ -427,7 +411,7 @@ void FanControl::on_swith_fan(wxMouseEvent& evt) speed = 255; m_switch_button->SetBitmap(m_bitmap_toggle_on->bmp()); m_switch_fan = true; - } + } set_fan_speed(speed); command_control_fan(); @@ -446,6 +430,7 @@ void FanControl::on_swith_fan(bool on) void FanControl::set_machine_obj(MachineObject* obj) { + m_update_already = true; m_obj = obj; } @@ -498,7 +483,7 @@ void FanControl::post_event(wxCommandEvent&& event) Description:FanControlPopup **************************************************/ FanControlPopup::FanControlPopup(wxWindow* parent) - :wxPopupTransientWindow(parent, wxBORDER_NONE) + :PopupWindow(parent, wxBORDER_NONE) { this->SetSizeHints(wxDefaultSize, wxDefaultSize); @@ -542,20 +527,37 @@ FanControlPopup::FanControlPopup(wxWindow* parent) Bind(wxEVT_LEFT_DOWN, &FanControlPopup::on_left_down, this); #endif +#ifdef __WXOSX__ + Bind(wxEVT_IDLE, [](wxIdleEvent& evt) {}); +#endif + + Bind(wxEVT_SHOW, &FanControlPopup::on_show, this); SetBackgroundColour(*wxWHITE); } +void FanControlPopup::update_show_mode(bool support_cham_fun) +{ + + if (support_cham_fun && !m_is_suppt_cham_fun) { + m_cham_fan->Show(); + m_line_bottom->Show(); + Layout(); + Fit(); + } + + if (!support_cham_fun && m_is_suppt_cham_fun) { + m_cham_fan->Hide(); + m_line_bottom->Hide(); + Layout(); + Fit(); + } + m_is_suppt_cham_fun = support_cham_fun; +} + void FanControlPopup::update_fan_data(MachineObject::FanType type, MachineObject* obj) { - bool is_suppt_cham_fun = obj->is_function_supported(PrinterFunction::FUNC_CHAMBER_FAN); - if (is_suppt_cham_fun) { - m_cham_fan->Show(); - m_line_bottom->Show(); - } - else { - m_cham_fan->Hide(); - m_line_bottom->Hide(); - } + m_is_suppt_cham_fun = obj->is_function_supported(PrinterFunction::FUNC_CHAMBER_FAN); + update_show_mode(m_is_suppt_cham_fun); if (type == MachineObject::FanType::COOLING_FAN && obj->cooling_fan_speed >= 0) { m_part_fan->set_fan_speed(obj->cooling_fan_speed); @@ -576,15 +578,30 @@ void FanControlPopup::update_fan_data(MachineObject::FanType type, MachineObject Bind(EVT_FAN_CHANGED, [this](wxCommandEvent& e) { post_event(e.GetInt(), e.GetString()); }); - - Layout(); - Fit(); } void FanControlPopup::on_left_down(wxMouseEvent& evt) { auto mouse_pos = ClientToScreen(evt.GetPosition()); - + + auto win_pos = m_part_fan->m_switch_button->ClientToScreen(wxPoint(0, 0)); + auto size = m_part_fan->m_switch_button->GetSize(); + if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_part_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_part_fan->m_switch_button->GetSize().y)) { + m_part_fan->on_swith_fan(evt); + } + + win_pos = m_aux_fan->m_switch_button->ClientToScreen(wxPoint(0, 0)); + size = m_aux_fan->m_switch_button->GetSize(); + if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_aux_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_aux_fan->m_switch_button->GetSize().y)) { + m_aux_fan->on_swith_fan(evt); + } + + win_pos = m_cham_fan->m_switch_button->ClientToScreen(wxPoint(0, 0)); + size = m_cham_fan->m_switch_button->GetSize(); + if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_cham_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_cham_fan->m_switch_button->GetSize().y)) { + m_cham_fan->on_swith_fan(evt); + } + auto part_tag_pos = m_part_fan->ScreenToClient(mouse_pos); evt.SetPosition(part_tag_pos); m_part_fan->on_left_down(evt); @@ -601,7 +618,9 @@ void FanControlPopup::on_left_down(wxMouseEvent& evt) void FanControlPopup::OnDismiss() { - + m_part_fan->update_obj_state(false); + m_aux_fan->update_obj_state(false); + m_cham_fan->update_obj_state(false); } void FanControlPopup::post_event(int fan_type, wxString speed) @@ -616,7 +635,12 @@ void FanControlPopup::post_event(int fan_type, wxString speed) bool FanControlPopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); +} + +void FanControlPopup::on_show(wxShowEvent& evt) +{ + wxGetApp().UpdateDarkUIWin(this); } void FanControlPopup::paintEvent(wxPaintEvent& evt) diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index bfd5694de0..ff42eaeb2c 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -5,6 +5,7 @@ #include "StaticBox.hpp" #include "StepCtrl.hpp" #include "Button.hpp" +#include "PopupWindow.hpp" #include "../DeviceManager.hpp" #include "slic3r/GUI/Event.hpp" #include @@ -112,15 +113,17 @@ protected: MachineObject::FanType m_type; MachineObject* m_obj; wxStaticText* m_static_name{ nullptr }; - wxStaticBitmap* m_switch_button{ nullptr }; ScalableBitmap* m_bitmap_toggle_off{ nullptr }; ScalableBitmap* m_bitmap_toggle_on{ nullptr }; Fan* m_fan{ nullptr }; FanOperate* m_fan_operate{ nullptr }; bool m_switch_fan{ false }; + bool m_update_already{false}; int m_current_speed{0}; public: + wxStaticBitmap* m_switch_button{ nullptr }; + void update_obj_state(bool stat) {m_update_already = stat;}; void command_control_fan(); void set_machine_obj(MachineObject* obj); void set_type(MachineObject::FanType type); @@ -137,7 +140,7 @@ public: /************************************************* Description:FanControlPopup **************************************************/ -class FanControlPopup : public wxPopupTransientWindow +class FanControlPopup : public PopupWindow { public: FanControlPopup(wxWindow* parent); @@ -150,12 +153,15 @@ private: FanControl* m_cham_fan; wxWindow* m_line_top; wxWindow* m_line_bottom; + bool m_is_suppt_cham_fun{true}; public: + void update_show_mode(bool support_cham_fun); void update_fan_data(MachineObject::FanType type, MachineObject* obj); void on_left_down(wxMouseEvent& evt); void paintEvent(wxPaintEvent& evt); void post_event(int fan_type, wxString speed); + void on_show(wxShowEvent& evt); virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; }; diff --git a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp index b5fe0e74dc..27ac3ca2d0 100644 --- a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp +++ b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp @@ -312,7 +312,7 @@ void FanSwitchButton::render(wxDC& dc) dc.SetTextForeground(text_color.colorForStates(states)); pt.x = (size.x - dc.GetTextExtent(speed).x) / 2; - pt.y -= FromDIP(5); + pt.y += FromDIP(1); dc.DrawText(speed, pt); } diff --git a/src/slic3r/GUI/Widgets/Label.cpp b/src/slic3r/GUI/Widgets/Label.cpp index eef7dd55b7..3d24d975f2 100644 --- a/src/slic3r/GUI/Widgets/Label.cpp +++ b/src/slic3r/GUI/Widgets/Label.cpp @@ -116,16 +116,20 @@ public: // Find the last word to chop off. size_t lastSpace = posEnd; - while (lastSpace != size_t(-1)) { + while (lastSpace > 0) { auto c = line[lastSpace]; - if (c == ' ' || c > 0x4E00) + if (c == ' ') break; + if (c > 0x4E00) { + if (lastSpace != posEnd) + ++lastSpace; + break; + } --lastSpace; } - if (lastSpace == size_t(-1)) { + if (lastSpace == 0) { // No spaces, so can't wrap. - DoOutputLine(line); - break; + lastSpace = posEnd; } // Output the part that fits. @@ -225,7 +229,7 @@ Label::Label(wxWindow *parent, wxFont const &font, wxString const &text, long st { this->font = font; SetFont(font); - SetForegroundColour(*wxBLACK); + SetForegroundColour(wxColour("#262E30")); SetBackgroundColour(StaticBox::GetParentBackgroundColor(parent)); SetForegroundColour("#262E30"); if (style & LB_PROPAGATE_MOUSE_EVENT) { diff --git a/src/slic3r/GUI/Widgets/PopupWindow.cpp b/src/slic3r/GUI/Widgets/PopupWindow.cpp new file mode 100644 index 0000000000..135802c83e --- /dev/null +++ b/src/slic3r/GUI/Widgets/PopupWindow.cpp @@ -0,0 +1,37 @@ +#include "PopupWindow.hpp" + +static wxWindow *GetTopParent(wxWindow *pWindow) +{ + wxWindow *pWin = pWindow; + while (pWin->GetParent()) { + pWin = pWin->GetParent(); + if (auto top = dynamic_cast(pWin)) + return top; + } + return pWin; +} + +bool PopupWindow::Create(wxWindow *parent, int style) +{ + if (!wxPopupTransientWindow::Create(parent, style)) + return false; +#ifdef __WXGTK__ + GetTopParent(parent)->Bind(wxEVT_ACTIVATE, &PopupWindow::topWindowActiavate, this); +#endif + return true; +} + +PopupWindow::~PopupWindow() +{ +#ifdef __WXGTK__ + GetTopParent(this)->Unbind(wxEVT_ACTIVATE, &PopupWindow::topWindowActiavate, this); +#endif +} + +#ifdef __WXGTK__ +void PopupWindow::topWindowActiavate(wxActivateEvent &event) +{ + event.Skip(); + if (!event.GetActive() && IsShown()) DismissAndNotify(); +} +#endif diff --git a/src/slic3r/GUI/Widgets/PopupWindow.hpp b/src/slic3r/GUI/Widgets/PopupWindow.hpp new file mode 100644 index 0000000000..88993de88e --- /dev/null +++ b/src/slic3r/GUI/Widgets/PopupWindow.hpp @@ -0,0 +1,24 @@ +#ifndef slic3r_GUI_PopupWindow_hpp_ +#define slic3r_GUI_PopupWindow_hpp_ + +#include + +class PopupWindow : public wxPopupTransientWindow +{ +public: + PopupWindow() {} + + ~PopupWindow(); + + PopupWindow(wxWindow *parent, int style = wxBORDER_NONE) + { Create(parent, style); } + + bool Create(wxWindow *parent, int flags = wxBORDER_NONE); + +private: +#ifdef __WXGTK__ + void topWindowActiavate(wxActivateEvent &event); +#endif +}; + +#endif // !slic3r_GUI_PopupWindow_hpp_ diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.cpp b/src/slic3r/GUI/Widgets/ProgressDialog.cpp index 89f9af4353..6912a853a6 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.cpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.cpp @@ -608,6 +608,8 @@ bool ProgressDialog::Pulse(const wxString &newmsg, bool *skip) return m_state != Canceled; } +bool ProgressDialog::WasCanceled() const { return m_state == Canceled; } + bool ProgressDialog::DoBeforeUpdate(bool *skip) { // we have to yield because not only we want to update the display but diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.hpp b/src/slic3r/GUI/Widgets/ProgressDialog.hpp index ae314fc3a4..83268c267d 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.hpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.hpp @@ -36,6 +36,7 @@ public: virtual bool Update(int value, const wxString &newmsg = wxEmptyString, bool *skip = NULL); virtual bool Pulse(const wxString &newmsg = wxEmptyString, bool *skip = NULL); + bool WasCanceled() const; virtual void Resume(); diff --git a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp index a78020f860..a3c7c139a9 100644 --- a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp +++ b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp @@ -6,9 +6,9 @@ BEGIN_EVENT_TABLE(RoundedRectangle, wxPanel) EVT_PAINT(RoundedRectangle::OnPaint) END_EVENT_TABLE() - RoundedRectangle::RoundedRectangle(wxWindow *parent, wxColour col, wxPoint pos, wxSize size, double radius, int type) - : wxWindow(parent, wxID_ANY, pos, size, wxBORDER_NONE) -{ + RoundedRectangle::RoundedRectangle(wxWindow *parent, wxColour col, wxPoint pos, wxSize size, double radius, int type) + : wxWindow(parent, wxID_ANY, pos, size, wxBORDER_NONE) +{ SetBackgroundColour(wxColour(255,255,255)); m_type = type; m_color = col; @@ -26,9 +26,10 @@ void RoundedRectangle::OnPaint(wxPaintEvent &evt) } //draw RoundedRectangle only board - if (m_type == 1) { + if (m_type == 1) { wxPaintDC dc(this); - dc.SetPen(m_color); + dc.SetPen(m_color); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawRoundedRectangle(0, 0, GetSize().GetWidth(), GetSize().GetHeight(), m_radius); } } \ No newline at end of file diff --git a/src/slic3r/GUI/Widgets/SideMenuPopup.cpp b/src/slic3r/GUI/Widgets/SideMenuPopup.cpp index 21faf613bd..b50ed6b605 100644 --- a/src/slic3r/GUI/Widgets/SideMenuPopup.cpp +++ b/src/slic3r/GUI/Widgets/SideMenuPopup.cpp @@ -6,12 +6,12 @@ -wxBEGIN_EVENT_TABLE(SidePopup,wxPopupTransientWindow) +wxBEGIN_EVENT_TABLE(SidePopup,PopupWindow) EVT_PAINT(SidePopup::paintEvent) wxEND_EVENT_TABLE() SidePopup::SidePopup(wxWindow* parent) - :wxPopupTransientWindow(parent, + :PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) { @@ -28,16 +28,16 @@ SidePopup::~SidePopup() void SidePopup::OnDismiss() { Slic3r::GUI::wxGetApp().set_side_menu_popup_status(false); - wxPopupTransientWindow::OnDismiss(); + PopupWindow::OnDismiss(); } bool SidePopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } bool SidePopup::Show( bool show ) { - return wxPopupTransientWindow::Show(show); + return PopupWindow::Show(show); } void SidePopup::Popup(wxWindow* focus) @@ -66,7 +66,7 @@ void SidePopup::Popup(wxWindow* focus) Position(pos, {0, focus->GetSize().y + 12}); } Slic3r::GUI::wxGetApp().set_side_menu_popup_status(true); - wxPopupTransientWindow::Popup(); + PopupWindow::Popup(); } void SidePopup::Create() diff --git a/src/slic3r/GUI/Widgets/SideMenuPopup.hpp b/src/slic3r/GUI/Widgets/SideMenuPopup.hpp index 52f3066640..09f756a5eb 100644 --- a/src/slic3r/GUI/Widgets/SideMenuPopup.hpp +++ b/src/slic3r/GUI/Widgets/SideMenuPopup.hpp @@ -9,8 +9,9 @@ #include "../wxExtensions.hpp" #include "StateHandler.hpp" #include "SideButton.hpp" +#include "PopupWindow.hpp" -class SidePopup : public wxPopupTransientWindow +class SidePopup : public PopupWindow { private: std::vector btn_list; diff --git a/src/slic3r/GUI/Widgets/SideTools.cpp b/src/slic3r/GUI/Widgets/SideTools.cpp index 4c39614cdd..6d382cd18c 100644 --- a/src/slic3r/GUI/Widgets/SideTools.cpp +++ b/src/slic3r/GUI/Widgets/SideTools.cpp @@ -142,8 +142,26 @@ void SideTools::doRender(wxDC &dc) dc.SetBackgroundMode(wxTRANSPARENT); dc.SetTextForeground(*wxWHITE); - auto sizet = dc.GetTextExtent(_L("No printer")); - dc.DrawText(_L("No printer"), wxPoint(left, (size.y - sizet.y) / 2)); + wxString no_printer_str = _L("No printer"); + auto sizet = dc.GetTextExtent(no_printer_str); + auto left_add_bitmap = size.x - FromDIP(30) - m_wifi_none_img.GetBmpSize().x - m_none_add_img.GetBmpSize().x; + auto size_width = left_add_bitmap - left; + + if (sizet.x > size_width) { + wxString temp_str = wxEmptyString; + for (auto i = 0; i < no_printer_str.Len(); i++) { + if (dc.GetTextExtent(L("...") + temp_str).x < size_width) { + temp_str += no_printer_str[i]; + } + else { + break; + } + } + + no_printer_str = temp_str + L("..."); + } + + dc.DrawText(no_printer_str, wxPoint(left, (size.y - sizet.y) / 2)); left = size.x - FromDIP(30) - m_wifi_none_img.GetBmpSize().x; dc.DrawBitmap(m_none_add_img.bmp(), left, (size.y - m_none_add_img.GetBmpSize().y) / 2); diff --git a/src/slic3r/GUI/Widgets/SpinInput.cpp b/src/slic3r/GUI/Widgets/SpinInput.cpp index 4186cf2062..795b38df89 100644 --- a/src/slic3r/GUI/Widgets/SpinInput.cpp +++ b/src/slic3r/GUI/Widgets/SpinInput.cpp @@ -106,7 +106,7 @@ void SpinInput::SetTextColor(StateColor const &color) void SpinInput::SetSize(wxSize const &size) { - wxWindow::SetSize(size); + StaticBox::SetSize(size); Rescale(); } @@ -204,11 +204,11 @@ void SpinInput::messureSize() int h = textSize.y + 8; if (size.y < h) { size.y = h; - SetSize(size); - SetMinSize(size); - } else { - textSize.y = size.y * 14 / 24; } + wxSize minSize = size; + minSize.x = GetMinWidth(); + StaticBox::SetSize(size); + SetMinSize(size); wxSize btnSize = {14, (size.y - 4) / 2}; btnSize.x = btnSize.x * btnSize.y / 10; wxClientDC dc(this); diff --git a/src/slic3r/GUI/Widgets/StaticBox.cpp b/src/slic3r/GUI/Widgets/StaticBox.cpp index c000944e47..6fde9bb3a3 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.cpp +++ b/src/slic3r/GUI/Widgets/StaticBox.cpp @@ -141,6 +141,8 @@ void StaticBox::render(wxDC& dc) } wxSize size = GetSize(); + if (size.x <= 0 || size.y <= 0) + return; wxMemoryDC memdc; wxBitmap bmp(size.x, size.y); memdc.SelectObject(bmp); diff --git a/src/slic3r/GUI/Widgets/SwitchButton.cpp b/src/slic3r/GUI/Widgets/SwitchButton.cpp index b3b3cd5c3e..e3b7a5fc82 100644 --- a/src/slic3r/GUI/Widgets/SwitchButton.cpp +++ b/src/slic3r/GUI/Widgets/SwitchButton.cpp @@ -100,10 +100,18 @@ void SwitchButton::Rescale() } for (int i = 0; i < 2; ++i) { wxMemoryDC memdc(&dc); +#ifdef __WXMSW__ wxBitmap bmp(trackSize.x, trackSize.y); memdc.SelectObject(bmp); memdc.SetBackground(wxBrush(GetBackgroundColour())); memdc.Clear(); +#else + wxImage image(trackSize); + image.InitAlpha(); + memset(image.GetAlpha(), 0, trackSize.GetWidth() * trackSize.GetHeight()); + wxBitmap bmp(std::move(image)); + memdc.SelectObject(bmp); +#endif memdc.SetFont(dc.GetFont()); auto state = i == 0 ? StateColor::Enabled : (StateColor::Checked | StateColor::Enabled); { diff --git a/src/slic3r/GUI/Widgets/TempInput.cpp b/src/slic3r/GUI/Widgets/TempInput.cpp index 6c5701ada8..1311fe60d7 100644 --- a/src/slic3r/GUI/Widgets/TempInput.cpp +++ b/src/slic3r/GUI/Widgets/TempInput.cpp @@ -1,5 +1,6 @@ #include "TempInput.hpp" #include "Label.hpp" +#include "PopupWindow.hpp" #include "../I18N.hpp" #include #include "../GUI.hpp" @@ -190,7 +191,7 @@ void TempInput::Warning(bool warn, WarningType type) if (warning_mode) { if (wdialog == nullptr) { - wdialog = new wxPopupTransientWindow(this); + wdialog = new PopupWindow(this); wdialog->SetBackgroundColour(wxColour(0xFFFFFF)); wdialog->SetSizeHints(wxDefaultSize, wxDefaultSize); diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index e0cf7cf872..59b1a866ac 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -13,7 +13,7 @@ #endif #ifdef __WIN32__ -#include "../WebView2.h" +#include #elif defined __linux__ #include #define WEBKIT_API @@ -35,6 +35,48 @@ webkit_javascript_result_unref (WebKitJavascriptResult *js_result); } #endif +#ifdef __WIN32__ + +class WebViewEdge : public wxWebViewEdge +{ +public: + bool SetUserAgent(const wxString &userAgent) + { + ICoreWebView2 *webView2 = (ICoreWebView2 *) GetNativeBackend(); + if (webView2) { + ICoreWebView2Settings *settings; + HRESULT hr = webView2->get_Settings(&settings); + if (hr == S_OK) { + ICoreWebView2Settings2 *settings2; + hr = settings->QueryInterface(&settings2); + if (hr == S_OK) { + settings2->put_UserAgent(userAgent.wc_str()); + settings2->Release(); + return true; + } + } + return false; + } + pendingUserAgent = userAgent; + return true; + } + + void DoGetClientSize(int *x, int *y) const override + { + if (!pendingUserAgent.empty()) { + auto thiz = const_cast(this); + auto userAgent = std::move(thiz->pendingUserAgent); + thiz->pendingUserAgent.clear(); + thiz->SetUserAgent(userAgent); + } + wxWebViewEdge::DoGetClientSize(x, y); + }; +private: + wxString pendingUserAgent; +}; + +#endif + class FakeWebView : public wxWebView { virtual bool Create(wxWindow* parent, wxWindowID id, const wxString& url, const wxPoint& pos, const wxSize& size, long style, const wxString& name) override { return false; } @@ -108,7 +150,11 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) if (!url2.empty()) { url2 = wxURI(url2).BuildURI(); } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << url2.ToUTF8(); +#ifdef __WIN32__ + wxWebView* webView = new WebViewEdge; +#else auto webView = wxWebView::New(); +#endif if (webView) { webView->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); #ifdef __WIN32__ @@ -206,32 +252,9 @@ bool WebView::RunScript(wxWebView *webView, wxString const &javascript) void WebView::RecreateAll() { -#ifdef __WXMSW__ - auto webviews = g_webviews; - std::vector parents; - std::vector urls; - for (auto web : webviews) { - parents.push_back(web->GetParent()); - urls.push_back(web->GetCurrentURL()); - delete web; - } - assert(g_webviews.empty()); - for (int i = 0; i < parents.size(); ++i) { - auto webView = CreateWebView(parents[i], urls[i]); - if (webView) { - wxCommandEvent evt(EVT_WEBVIEW_RECREATED); - evt.SetEventObject(webView); - wxPostEvent(parents[i], evt); - } - } -#else for (auto webView : g_webviews) { webView->SetUserAgent(wxString::Format("BBL-Slicer/v%s (%s) Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko)", SLIC3R_VERSION, Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light")); webView->Reload(); - wxCommandEvent evt(EVT_WEBVIEW_RECREATED); - evt.SetEventObject(webView); - wxPostEvent(webView->GetParent(), evt); } -#endif } diff --git a/src/slic3r/GUI/Widgets/WebView.hpp b/src/slic3r/GUI/Widgets/WebView.hpp index f4ca3d389a..ca76fadb80 100644 --- a/src/slic3r/GUI/Widgets/WebView.hpp +++ b/src/slic3r/GUI/Widgets/WebView.hpp @@ -3,8 +3,6 @@ #include -wxDECLARE_EVENT(EVT_WEBVIEW_RECREATED, wxCommandEvent); - class WebView { public: diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 9ad6c08993..39c7992703 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -56,17 +56,17 @@ wxBoxSizer* WipingDialog::create_btn_sizer(long flags) btn_sizer->AddStretchSpacer(); StateColor ok_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal) ); StateColor ok_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) + std::pair(wxColour(0, 174, 66), StateColor::Normal) ); StateColor ok_btn_text( - std::pair(wxColour(255, 255, 255), StateColor::Normal) + std::pair(wxColour(255, 255, 254), StateColor::Normal) ); StateColor cancel_btn_bg( @@ -85,26 +85,37 @@ wxBoxSizer* WipingDialog::create_btn_sizer(long flags) StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal) ); - + StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) + std::pair(wxColour(0, 174, 66), StateColor::Normal) ); - + StateColor calc_btn_text( - std::pair(wxColour(255, 255, 255), StateColor::Normal) + std::pair(wxColour(255, 255, 254), StateColor::Normal) ); + if (flags & wxRESET) { + Button *calc_btn = new Button(this, _L("Auto-Calc")); + calc_btn->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); + calc_btn->SetCornerRadius(FromDIP(12)); + calc_btn->SetBackgroundColor(calc_btn_bg); + calc_btn->SetBorderColor(calc_btn_bd); + calc_btn->SetTextColor(calc_btn_text); + calc_btn->SetFocus(); + calc_btn->SetId(wxID_RESET); + btn_sizer->Add(calc_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + } if (flags & wxOK) { Button* ok_btn = new Button(this, _L("OK")); ok_btn->SetMinSize(BTN_SIZE); ok_btn->SetCornerRadius(FromDIP(12)); ok_btn->SetBackgroundColor(ok_btn_bg); ok_btn->SetBorderColor(ok_btn_bd); - ok_btn->SetTextColor(wxColour("#FFFFFE")); + ok_btn->SetTextColor(ok_btn_text); ok_btn->SetFocus(); ok_btn->SetId(wxID_OK); btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); @@ -132,35 +143,7 @@ WipingDialog::WipingDialog(wxWindow* parent, const std::vector& matrix, c this->SetBackgroundColour(*wxWHITE); this->SetMinSize(wxSize(MIN_WIPING_DIALOG_WIDTH, -1)); - // BBS -#ifdef __WINDOWS__ - StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_text( - std::pair(wxColour(255, 255, 255), StateColor::Normal) - ); - - Button* calc_btn = new Button(this, _L("Auto-Calc")); - calc_btn->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); - calc_btn->SetCornerRadius(FromDIP(12)); - calc_btn->SetBackgroundColor(calc_btn_bg); - calc_btn->SetBorderColor(calc_btn_bd); - calc_btn->SetTextColor(calc_btn_text); - calc_btn->SetFocus(); - calc_btn->SetId(wxID_RESET); - calc_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { m_panel_wiping->calc_flushing_volumes(); }); -#else - Button* calc_btn = nullptr; -#endif - m_panel_wiping = new WipingPanel(this, matrix, extruders, extruder_colours, calc_btn, extra_flush_volume, flush_multiplier); + m_panel_wiping = new WipingPanel(this, matrix, extruders, extruder_colours, nullptr, extra_flush_volume, flush_multiplier); auto main_sizer = new wxBoxSizer(wxVERTICAL); @@ -171,7 +154,7 @@ WipingDialog::WipingDialog(wxWindow* parent, const std::vector& matrix, c main_sizer->Add(m_panel_wiping, 1, wxEXPAND | wxALL, 0); - auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL); + auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL |wxRESET); main_sizer->Add(btn_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, BTN_GAP); SetSizer(main_sizer); main_sizer->SetSizeHints(this); @@ -188,6 +171,9 @@ WipingDialog::WipingDialog(wxWindow* parent, const std::vector& matrix, c this->FindWindowById(wxID_CANCEL, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxCANCEL); }); } + if (this->FindWindowById(wxID_RESET, this)) { + this->FindWindowById(wxID_RESET, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { m_panel_wiping->calc_flushing_volumes(); }); + } this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); }); this->Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { if (e.GetKeyCode() == WXK_ESCAPE) { @@ -238,7 +224,8 @@ void WipingPanel::create_panels(wxWindow* parent, const int num) { // This panel contains all control widgets for both simple and advanced mode (these reside in separate sizers) WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, const std::vector& extruders, const std::vector& extruder_colours, Button* calc_button, int extra_flush_volume, float flush_multiplier) -: wxPanel(parent,wxID_ANY, wxDefaultPosition, wxDefaultSize/*,wxBORDER_RAISED*/), m_min_flush_volume(extra_flush_volume), m_max_flush_volume(800) +: wxPanel(parent,wxID_ANY, wxDefaultPosition, wxDefaultSize/*,wxBORDER_RAISED*/) +,m_matrix(matrix), m_min_flush_volume(extra_flush_volume), m_max_flush_volume(800) { m_number_of_extruders = (int)(sqrt(matrix.size())+0.001); @@ -281,7 +268,7 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con edit_boxes[i][j]->Bind(wxEVT_SET_FOCUS, [this](wxFocusEvent&) {}); } else { - edit_boxes[i][j]->SetValue(wxString("") << int(matrix[m_number_of_extruders * j + i])); + edit_boxes[i][j]->SetValue(wxString("") << int(m_matrix[m_number_of_extruders * j + i] * flush_multiplier)); edit_boxes[i][j]->Bind(wxEVT_TEXT, [this, i, j](wxCommandEvent& e) { wxString str = edit_boxes[i][j]->GetValue(); @@ -293,6 +280,9 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con }); auto on_apply_text_modify = [this, i, j](wxEvent &e) { + wxString str = edit_boxes[i][j]->GetValue(); + int value = wxAtoi(str); + m_matrix[m_number_of_extruders * j + i] = value / get_flush_multiplier(); this->update_warning_texts(); e.Skip(); }; @@ -328,39 +318,6 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con create_panels(m_page_advanced, m_number_of_extruders); - m_sizer_advanced->AddSpacer(10); - auto info_str = new wxStaticText(m_page_advanced, wxID_ANY, _(L("Flushing volume (mm³) for each filament pair.")), wxDefaultPosition, wxDefaultSize, 0); - info_str->SetForegroundColour(g_text_color); - m_sizer_advanced->Add(info_str, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); - -#ifndef __WINDOWS__ - StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_text( - std::pair(wxColour(255, 255, 255), StateColor::Normal) - ); - - Button* calc_btn = new Button(this, _L("Auto-Calc")); - calc_btn->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); - calc_btn->SetCornerRadius(FromDIP(12)); - calc_btn->SetBackgroundColor(calc_btn_bg); - calc_btn->SetBorderColor(calc_btn_bd); - calc_btn->SetTextColor(calc_btn_text); - calc_btn->SetFocus(); - calc_btn->SetId(wxID_RESET); - calc_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { this->calc_flushing_volumes(); }); - - calc_button = calc_btn; -#endif - m_sizer_advanced->Add(calc_button, 0, wxALIGN_RIGHT | wxRIGHT, TEXT_BEG_PADDING); m_sizer_advanced->AddSpacer(BTN_SIZE.y); // BBS: for tunning flush volumes @@ -378,11 +335,11 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con param_sizer->AddStretchSpacer(1); m_sizer_advanced->Add(param_sizer, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); - auto multi_desc_label = new wxStaticText(m_page_advanced, wxID_ANY, _(L("Actual Volume = Flushing Volume * Multiplier")), wxDefaultPosition, wxDefaultSize, 0); + auto multi_desc_label = new wxStaticText(m_page_advanced, wxID_ANY, _(L("Flushing volume (mm³) for each filament pair.")), wxDefaultPosition, wxDefaultSize, 0); multi_desc_label->SetForegroundColour(g_text_color); m_sizer_advanced->Add(multi_desc_label, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); - wxString min_flush_str = wxString::Format(_L("Suggestion: Actual Volume in range [%d, %d]"), m_min_flush_volume, m_max_flush_volume); + wxString min_flush_str = wxString::Format(_L("Suggestion: Flushing Volume in range [%d, %d]"), m_min_flush_volume, m_max_flush_volume); m_min_flush_label = new wxStaticText(m_page_advanced, wxID_ANY, min_flush_str, wxDefaultPosition, wxDefaultSize, 0); m_min_flush_label->SetForegroundColour(g_text_color); m_sizer_advanced->Add(m_min_flush_label, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); @@ -398,6 +355,11 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con _L("Warning"), wxICON_WARNING | wxOK); dlg.ShowModal(); } + for (unsigned int i = 0; i < m_number_of_extruders; ++i) { + for (unsigned int j = 0; j < m_number_of_extruders; ++j) { + edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); + } + } this->update_warning_texts(); e.Skip(); @@ -582,7 +544,7 @@ void WipingPanel::update_warning_texts() auto text_box = box_vec[j]; wxString str = text_box->GetValue(); - int actual_volume = wxAtoi(str) * multiplier; + int actual_volume = wxAtoi(str); if (actual_volume < m_min_flush_volume || actual_volume > m_max_flush_volume) { if (text_box->GetForegroundColour() != g_warning_color) { text_box->SetForegroundColour(g_warning_color); @@ -632,6 +594,8 @@ void WipingPanel::calc_flushing_volumes() } } + m_matrix[m_number_of_extruders * from_idx + to_idx] = flushing_volume; + flushing_volume = int(flushing_volume * get_flush_multiplier()); edit_boxes[to_idx][from_idx]->SetValue(std::to_string(flushing_volume)); } } @@ -650,7 +614,7 @@ std::vector WipingPanel::read_matrix_values() { for (unsigned int j=0;jGetValue().ToDouble(&val); - output.push_back((float)val); + output.push_back((float)val / get_flush_multiplier()); } } return output; diff --git a/src/slic3r/GUI/WipeTowerDialog.hpp b/src/slic3r/GUI/WipeTowerDialog.hpp index f62c07dd8a..22b376c07e 100644 --- a/src/slic3r/GUI/WipeTowerDialog.hpp +++ b/src/slic3r/GUI/WipeTowerDialog.hpp @@ -54,6 +54,8 @@ private: wxTextCtrl* m_flush_multiplier_ebox = nullptr; wxStaticText* m_min_flush_label = nullptr; + + std::vector m_matrix; }; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 406698f213..d93c2840a6 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -1048,9 +1048,9 @@ void BlinkingBitmap::blink() } -wxIMPLEMENT_CLASS(ImageTransientPopup,wxPopupTransientWindow); +wxIMPLEMENT_CLASS(ImageTransientPopup,PopupWindow); -wxBEGIN_EVENT_TABLE(ImageTransientPopup,wxPopupTransientWindow) +wxBEGIN_EVENT_TABLE(ImageTransientPopup,PopupWindow) EVT_MOUSE_EVENTS( ImageTransientPopup::OnMouse ) EVT_SIZE( ImageTransientPopup::OnSize ) EVT_SET_FOCUS( ImageTransientPopup::OnSetFocus ) @@ -1058,7 +1058,7 @@ wxBEGIN_EVENT_TABLE(ImageTransientPopup,wxPopupTransientWindow) wxEND_EVENT_TABLE() ImageTransientPopup::ImageTransientPopup( wxWindow *parent, bool scrolled, wxBitmap bmp) - :wxPopupTransientWindow( parent, + :PopupWindow( parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS ) { @@ -1115,21 +1115,21 @@ void ImageTransientPopup::SetImage(wxBitmap bmp) void ImageTransientPopup::Popup(wxWindow* WXUNUSED(focus)) { - wxPopupTransientWindow::Popup(); + PopupWindow::Popup(); } void ImageTransientPopup::OnDismiss() { - wxPopupTransientWindow::OnDismiss(); + PopupWindow::OnDismiss(); } bool ImageTransientPopup::ProcessLeftDown(wxMouseEvent& event) { - return wxPopupTransientWindow::ProcessLeftDown(event); + return PopupWindow::ProcessLeftDown(event); } bool ImageTransientPopup::Show( bool show ) { - return wxPopupTransientWindow::Show(show); + return PopupWindow::Show(show); } void ImageTransientPopup::OnSize(wxSizeEvent &event) diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index 1a9ebf607f..e890d30ae3 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -16,6 +16,7 @@ #include #include +#include "Widgets/PopupWindow.hpp" #ifdef __WXMSW__ void msw_rescale_menu(wxMenu* menu); @@ -392,7 +393,7 @@ private: // ImageTransientPopup // ---------------------------------------------------------------------------- -class ImageTransientPopup : public wxPopupTransientWindow +class ImageTransientPopup : public PopupWindow { public: ImageTransientPopup( wxWindow *parent, bool scrolled, wxBitmap bmp); @@ -400,7 +401,7 @@ class ImageTransientPopup : public wxPopupTransientWindow void SetImage(wxBitmap bmp); - // wxPopupTransientWindow virtual methods are all overridden to log them + // PopupWindow virtual methods are all overridden to log them virtual void Popup(wxWindow *focus = NULL) wxOVERRIDE; virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; diff --git a/src/slic3r/GUI/wxMediaCtrl2.h b/src/slic3r/GUI/wxMediaCtrl2.h index e5e1a007ae..e894793afb 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.h +++ b/src/slic3r/GUI/wxMediaCtrl2.h @@ -39,6 +39,10 @@ public: protected: void DoSetSize(int x, int y, int width, int height, int sizeFlags) override; + static void bambu_log(void const * ctx, int level, char const * msg); + + void NotifyStopped(); + private: void create_player(); void * m_player = nullptr; diff --git a/src/slic3r/GUI/wxMediaCtrl2.mm b/src/slic3r/GUI/wxMediaCtrl2.mm index 5d8431c90f..bb78fe535e 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.mm +++ b/src/slic3r/GUI/wxMediaCtrl2.mm @@ -18,7 +18,7 @@ #define BAMBU_DYNAMIC -static void bambu_log(void const * ctx, int level, char const * msg) +void wxMediaCtrl2::bambu_log(void const * ctx, int level, char const * msg) { if (level == 1) { wxString msg2(msg); @@ -26,11 +26,14 @@ static void bambu_log(void const * ctx, int level, char const * msg) int n = msg2.find_last_of('['); if (n != wxString::npos) { long val = 0; - int * error = (int *) ctx; + wxMediaCtrl2 * ctrl = (wxMediaCtrl2 *) ctx; if (msg2.SubString(n + 1, msg2.Length() - 2).ToLong(&val)) - *error = (int) val; + ctrl->m_error = (int) val; } } + } else if (level < 0) { + wxMediaCtrl2 * ctrl = (wxMediaCtrl2 *) ctx; + ctrl->NotifyStopped(); } BOOST_LOG_TRIVIAL(info) << msg; } @@ -69,7 +72,7 @@ void wxMediaCtrl2::create_player() NSView * imageView = (NSView *) GetHandle(); BambuPlayer * player = [cls alloc]; [player initWithImageView: imageView]; - [player setLogger: bambu_log withContext: &m_error]; + [player setLogger: bambu_log withContext: this]; m_player = player; } @@ -126,6 +129,11 @@ void wxMediaCtrl2::Stop() } BambuPlayer * player2 = (BambuPlayer *) m_player; [player2 close]; + NotifyStopped(); +} + +void wxMediaCtrl2::NotifyStopped() +{ if (m_state != wxMEDIASTATE_STOPPED) { m_state = wxMEDIASTATE_STOPPED; wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); diff --git a/src/slic3r/Utils/FixModelByWin10.cpp b/src/slic3r/Utils/FixModelByWin10.cpp index f56c084e1f..38684f2c8e 100644 --- a/src/slic3r/Utils/FixModelByWin10.cpp +++ b/src/slic3r/Utils/FixModelByWin10.cpp @@ -82,7 +82,7 @@ static HRESULT winrt_activate_instance(const std::wstring &class_name, IInspecta { HSTRING hClassName; HRESULT hr = (*s_WindowsCreateString)(class_name.c_str(), class_name.size(), &hClassName); - if (S_OK != hr) + if (S_OK != hr) return hr; hr = (*s_RoActivateInstance)(hClassName, pinst); (*s_WindowsDeleteString)(hClassName); @@ -320,7 +320,7 @@ public: // returt FALSE, if fixing was canceled // fix_result is empty, if fixing finished successfully -// fix_result containes a message if fixing failed +// fix_result containes a message if fixing failed bool fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog& progress_dialog, const wxString& msg_header, std::string& fix_result) { std::mutex mutex; @@ -379,7 +379,7 @@ bool fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx, GUI:: model.clear_materials(); boost::filesystem::path path_dst = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path(); path_dst += ".3mf"; - fix_model_by_win10_sdk(path_src.string().c_str(), path_dst.string(), on_progress, + fix_model_by_win10_sdk(path_src.string().c_str(), path_dst.string(), on_progress, [&canceled]() { if (canceled) throw RepairCanceledException(); }); boost::filesystem::remove(path_src); // PresetBundle bundle; @@ -403,6 +403,7 @@ bool fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx, GUI:: for (size_t i = 0; i < volumes.size(); ++ i) { volumes[i]->set_mesh(std::move(meshes_repaired[i])); volumes[i]->calculate_convex_hull(); + volumes[i]->invalidate_convex_hull_2d(); volumes[i]->set_new_unique_id(); } model_object.invalidate_bounding_box(); diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index bf5c4b4a1a..cd63fb4156 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -95,6 +95,7 @@ func_start_pubilsh NetworkAgent::start_publish_ptr = nullptr; func_get_profile_3mf NetworkAgent::get_profile_3mf_ptr = nullptr; func_get_model_publish_url NetworkAgent::get_model_publish_url_ptr = nullptr; func_get_model_mall_home_url NetworkAgent::get_model_mall_home_url_ptr = nullptr; +func_get_my_profile NetworkAgent::get_my_profile_ptr = nullptr; NetworkAgent::NetworkAgent() @@ -236,6 +237,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_profile_3mf_ptr = reinterpret_cast(get_network_function("bambu_network_get_profile_3mf")); get_model_publish_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_publish_url")); get_model_mall_home_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_home_url")); + get_my_profile_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_profile")); return 0; } @@ -331,6 +333,7 @@ int NetworkAgent::unload_network_module() get_profile_3mf_ptr = nullptr; get_model_publish_url_ptr = nullptr; get_model_mall_home_url_ptr = nullptr; + get_my_profile_ptr = nullptr; return 0; } @@ -1103,4 +1106,15 @@ int NetworkAgent::get_model_mall_home_url(std::string* url) return ret; } +int NetworkAgent::get_my_profile(std::string token, unsigned int *http_code, std::string *http_body) +{ + int ret = 0; + if (network_agent && get_my_profile_ptr) { + ret = get_my_profile_ptr(network_agent, token, http_code, http_body); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + } //namespace diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 83bd1ffd7d..7d8b593214 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -75,6 +75,7 @@ typedef int (*func_start_pubilsh)(void *agent, PublishParams params, OnUpdateSta typedef int (*func_get_profile_3mf)(void *agent, BBLProfile* profile); typedef int (*func_get_model_publish_url)(void *agent, std::string* url); typedef int (*func_get_model_mall_home_url)(void *agent, std::string* url); +typedef int (*func_get_my_profile)(void *agent, std::string token, unsigned int *http_code, std::string *http_body); //the NetworkAgent class @@ -158,6 +159,7 @@ public: int get_profile_3mf(BBLProfile* profile); int get_model_publish_url(std::string* url); int get_model_mall_home_url(std::string* url); + int get_my_profile(std::string token, unsigned int* http_code, std::string* http_body); private: @@ -231,6 +233,7 @@ private: static func_get_profile_3mf get_profile_3mf_ptr; static func_get_model_publish_url get_model_publish_url_ptr; static func_get_model_mall_home_url get_model_mall_home_url_ptr; + static func_get_my_profile get_my_profile_ptr; }; } diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 50e414b594..6ae7ad8827 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -36,11 +36,12 @@ namespace BBL { #define BAMBU_NETWORK_ERR_GET_MODEL_MALL_HOME_PAGE -27 #define BAMBU_NETWORK_ERR_GET_USER_INFO -28 #define BAMBU_NETWORK_ERR_WRONG_IP_ADDRESS -29 +#define BAMBU_NETWORK_ERR_NO_SPACE_LEFT_ON_DEVICE -30 #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.04.02.02" +#define BAMBU_NETWORK_AGENT_VERSION "01.05.00.08" //iot preset type strings #define IOT_PRINTER_TYPE_STRING "printer" @@ -119,12 +120,15 @@ struct PrintParams { std::string filename; std::string config_filename; int plate_index; + std::string ftp_folder; std::string ftp_file; std::string ftp_file_md5; std::string ams_mapping; std::string ams_mapping_info; std::string connection_type; std::string comments; + int origin_profile_id = 0; + std::string origin_model_id; /* access options */ std::string dev_ip; diff --git a/version.inc b/version.inc index 20efb9be2b..448f796723 100644 --- a/version.inc +++ b/version.inc @@ -10,5 +10,5 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.04.02.13") +set(SLIC3R_VERSION "01.05.00.59") set(SoftFever_VERSION "1.4.5")