diff --git a/CMakeLists.txt b/CMakeLists.txt index 77f0609..643537d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,10 @@ cmake_minimum_required(VERSION 3.13) + +# The CMake version on Windows must not be greater than 4.0. +if ( ((MSVC) OR (WIN32)) AND (${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0") ) + message(FATAL_ERROR "Only cmake versions between 3.13.x and 4.0.x is supported on windows. Detected version: ${CMAKE_VERSION}") +endif() + project(QIDIStudio) include("version.inc") diff --git a/resources/shaders/140/gcode.fs b/resources/shaders/140/gcode.fs new file mode 100644 index 0000000..98d7898 --- /dev/null +++ b/resources/shaders/140/gcode.fs @@ -0,0 +1,168 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +const mat3 KTravel_Colors = mat3(0.505, 0.064, 0.028, + 0.219, 0.282, 0.609, + 0.112, 0.422, 0.103); + +uniform vec2 u_isTopLayer_hasCustomOptins; +uniform mat3 normal_matrix; +uniform float emission_factor; +uniform vec3 u_rangeType_isUnlit_topLayerIndex; +uniform vec4 u_isRangeView_isRangeVaild_topLayerOnly_viewType; +uniform vec2 u_pathDataRange; +uniform sampler2D s_color_range_texture; +uniform samplerBuffer s_per_move_data_texture; + +in float moveId; +in vec3 frag_normal; +in vec3 frag_pos; + +out vec4 frag_color; + +bool is_top_layer() +{ + return u_isTopLayer_hasCustomOptins.x > 0.5; +} + +vec4 extrusion_color(vec3 type_rangeData_deltaExtruder) +{ + vec4 final_color = vec4(0.25, 0.25, 0.25, 1.0); // Neutral_Color + float path_data = type_rangeData_deltaExtruder.y; + if (u_isRangeView_isRangeVaild_topLayerOnly_viewType.x > 0.5) + { + float view_type = u_isRangeView_isRangeVaild_topLayerOnly_viewType.w; + if (view_type < 0.5 || (view_type > 8.5 && view_type < 9.5)) // Summer or ColorPrint + { + if (int(path_data + 0.5) > int(u_pathDataRange.y + 0.5)) + { + final_color = vec4(0.5, 0.5, 0.5, 1.0); + return final_color; + } + } + else if (view_type > 9.5 && view_type < 10.5) // FilamentId + { + float path_data2 = type_rangeData_deltaExtruder.z; + float id = path_data / (u_pathDataRange.y - u_pathDataRange.x); + float role = path_data2 / (u_pathDataRange.y - u_pathDataRange.x); + final_color = vec4(id, role, id, 1.0); + return final_color; + } + // helio + else if (view_type > 11.5 && view_type < 14.5) + { + if (path_data < u_pathDataRange.x - 0.01) + { + final_color = vec4(0.5, 0.5, 0.5, 1.0); + return final_color; + } + } + // end helio + vec2 uv = vec2(0.0, 0.5); + if (u_isRangeView_isRangeVaild_topLayerOnly_viewType.y > 0.5) + { + if (u_rangeType_isUnlit_topLayerIndex.x < 0.5) + { + uv.x = (path_data - u_pathDataRange.x) / (u_pathDataRange.y - u_pathDataRange.x); + } + else + { + uv.x = (log(path_data) - u_pathDataRange.x) / (u_pathDataRange.y - u_pathDataRange.x); + } + uv.x = clamp(uv.x, 0.0, 1.0); + } + final_color = texture(s_color_range_texture, uv); + } + return final_color; +} + +vec4 get_base_color(vec3 type_rangeData_deltaExtruder) +{ + vec4 final_color = vec4(0.0, 0.0, 0.0, 1.0); + float path_type = type_rangeData_deltaExtruder.x; + + if (path_type > 7.5 && path_type < 8.5) //EMoveType::Travel + { + bool is_top_layer_only = u_isRangeView_isRangeVaild_topLayerOnly_viewType.z > 0.5; + if (!is_top_layer_only || is_top_layer()) + { + float view_type = u_isRangeView_isRangeVaild_topLayerOnly_viewType.w; + if ((view_type > 3.5 && view_type < 4.5) || (view_type > 7.5 && view_type < 8.5)) + { + final_color = extrusion_color(type_rangeData_deltaExtruder); + } + else + { + float flag = sign(type_rangeData_deltaExtruder.z); + final_color.rgb = KTravel_Colors[int(flag) + 1]; + } + } + else + { + final_color = vec4(0.25, 0.25, 0.25, 1.0); // Neutral_Color + } + } + else if (path_type > 8.5 && path_type < 9.5) + { + final_color = vec4(1.0, 1.0, 0.0, 1.0); // Wipe_Color + } + else if (path_type > 9.5 && path_type < 10.5) + { + bool is_top_layer_only = u_isRangeView_isRangeVaild_topLayerOnly_viewType.z > 0.5; + if (!is_top_layer_only || is_top_layer()) + { + final_color = extrusion_color(type_rangeData_deltaExtruder); + } + else + { + final_color = vec4(0.25, 0.25, 0.25, 1.0); // Neutral_Color + } + } + return final_color; +} + +void main() +{ + vec4 custom_option_color = vec4(0.5, 0.5, 0.5, 1.0); + + vec3 type_rangeData_deltaExtruder = texelFetch(s_per_move_data_texture, int(moveId)).rgb; + vec4 base_color = get_base_color(type_rangeData_deltaExtruder); + + vec4 mixed_color = mix(custom_option_color, base_color, u_isTopLayer_hasCustomOptins.y > 0.5 ? 0.0 : 1.0); + // x = tainted, y = specular; + vec2 intensity = vec2(0.0, 0.0); + float t_emission_factor = 1.0; + if (u_rangeType_isUnlit_topLayerIndex.y < 0.5) + { + vec3 norm = normal_matrix * normalize(frag_normal); + norm = normalize(norm); + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(norm, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(frag_pos.xyz), reflect(-LIGHT_TOP_DIR, norm)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(norm, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + t_emission_factor = emission_factor; + } + + frag_color = vec4(vec3(intensity.y) + mixed_color.rgb * (intensity.x + t_emission_factor), mixed_color.a); +} diff --git a/resources/shaders/140/gcode.vs b/resources/shaders/140/gcode.vs new file mode 100644 index 0000000..f9e9f37 --- /dev/null +++ b/resources/shaders/140/gcode.vs @@ -0,0 +1,110 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +uniform samplerBuffer s_position_texture; +uniform samplerBuffer s_width_height_data_texture; +uniform samplerBuffer s_segment_texture; + +out float moveId; +out vec3 frag_normal; +out vec3 frag_pos; + +void main() +{ + vec4 seg_startEnd_hasPrev_prevIndex = texelFetch(s_segment_texture, gl_InstanceID); + int start_index = int(seg_startEnd_hasPrev_prevIndex.x); + int end_index = int(seg_startEnd_hasPrev_prevIndex.y); + bool hasPrev = seg_startEnd_hasPrev_prevIndex.z > 0.5; + + vec4 startPos_mid = texelFetch(s_position_texture, start_index); + vec4 endPos_mid = texelFetch(s_position_texture, end_index); + + vec3 line = endPos_mid.xyz - startPos_mid.xyz; + vec3 line_dir = vec3(1.0, 0.0, 0.0); + float line_len = length(line); + line_dir = line / max(line_len, 1e-6); + + vec3 right_dir = vec3(line_dir.y, -line_dir.x, 0.0); + vec3 up = vec3(0.0, 0.0, 1.0); + if (length(right_dir) < 1e-4) + { + up = vec3(1.0, 0.0, 0.0); + right_dir = cross(line_dir, up); + } + else + { + right_dir = normalize(right_dir); + line_dir = normalize(line_dir); + up = cross(right_dir, line_dir); + } + + vec3 base_pos = gl_VertexID < 4 ? startPos_mid.xyz : endPos_mid.xyz; + moveId = endPos_mid.w + 0.5; + + vec2 width_height = texelFetch(s_width_height_data_texture, int(moveId)).rg; + float width = width_height.x; + float height = width_height.y; + + float half_width = 0.5 * width; + float half_height = 0.5 * height; + vec3 d_up = half_height * up; + vec3 d_right = half_width * right_dir; + vec3 d_down = -half_height * up; + vec3 d_left = -half_width * right_dir; + + vec3 position = base_pos - half_height * up; + if (0 == gl_VertexID || 4 == gl_VertexID) + { + position = position + d_up; + frag_normal = up; + } + else if (1 == gl_VertexID || 5 == gl_VertexID) + { + position = position + d_right; + frag_normal = right_dir; + } + else if (2 == gl_VertexID || 6 == gl_VertexID) + { + position = position + d_down; + frag_normal = -up; + } + else if (3 == gl_VertexID || 7 == gl_VertexID) + { + position = position + d_left; + frag_normal = -right_dir; + } + + if (gl_VertexID > 7) { + int prev_start_index = int(seg_startEnd_hasPrev_prevIndex.w); + vec4 prevPos_mid = texelFetch(s_position_texture, prev_start_index); + if (hasPrev) { + vec3 prev_dir = startPos_mid.xyz - prevPos_mid.xyz; + prev_dir = prev_dir / max(length(prev_dir), 1e-6); + prev_dir = normalize(prev_dir); + vec3 prev_right_dir = vec3(prev_dir.y, -prev_dir.x, 0.0); + prev_right_dir = normalize(prev_right_dir); + vec3 prev_left_dir = -prev_right_dir; + vec3 prev_up = cross(prev_right_dir, prev_dir); + + vec3 prev_second_pos = startPos_mid.xyz - half_height * prev_up; + if (8 == gl_VertexID) + { + position = prev_second_pos + half_width * prev_left_dir; + frag_normal = prev_left_dir; + } + + else if (9 == gl_VertexID) + { + position = prev_second_pos + half_width * prev_right_dir; + frag_normal = prev_right_dir; + } + } + } + + vec4 final_position = view_model_matrix * vec4(position, 1.0); + frag_pos = final_position.xyz; + frag_normal = normalize(frag_normal); + gl_Position = projection_matrix * final_position; +} diff --git a/resources/shaders/140/gcode_custom_effect.fs b/resources/shaders/140/gcode_custom_effect.fs new file mode 100644 index 0000000..311ce90 --- /dev/null +++ b/resources/shaders/140/gcode_custom_effect.fs @@ -0,0 +1,50 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +const mat3 KTravel_Colors = mat3(0.505, 0.064, 0.028, + 0.219, 0.282, 0.609, + 0.112, 0.422, 0.103); + +uniform mat3 normal_matrix; +uniform float emission_factor; +uniform vec4 u_base_color; + +in vec3 frag_normal; +in vec3 frag_pos; + +out vec4 frag_color; + +void main() +{ + // x = tainted, y = specular; + vec2 intensity = vec2(0.0, 0.0); + float t_emission_factor = emission_factor; + vec3 norm = normal_matrix * normalize(frag_normal); + norm = normalize(norm); + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(norm, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(frag_pos.xyz), reflect(-LIGHT_TOP_DIR, norm)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(norm, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + frag_color = vec4(vec3(intensity.y) + u_base_color.rgb * (intensity.x + t_emission_factor), u_base_color.a); +} diff --git a/resources/shaders/140/gcode_options.fs b/resources/shaders/140/gcode_options.fs new file mode 100644 index 0000000..9301db8 --- /dev/null +++ b/resources/shaders/140/gcode_options.fs @@ -0,0 +1,79 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform float u_is_top_layer; +uniform mat3 normal_matrix; +uniform vec4 u_isUnlit_optionTextureSize_topLayerOnly_emissionFactor; +uniform sampler2D s_option_color_texture; +uniform samplerBuffer s_per_move_data_texture; + +in float moveId; +in vec3 frag_normal; +in vec3 frag_pos; + +out vec4 frag_color; + +bool is_top_layer() +{ + return u_is_top_layer > 0.5; +} + +vec4 get_base_color(float moveType) +{ + vec4 final_color = vec4(0.0, 0.0, 0.0, 1.0); + + bool is_top_layer_only = u_isUnlit_optionTextureSize_topLayerOnly_emissionFactor.z > 0.5; + if (!is_top_layer_only || is_top_layer()) + { + final_color = texture(s_option_color_texture, vec2((moveType - 1.0 + 0.5) / u_isUnlit_optionTextureSize_topLayerOnly_emissionFactor.y, 0.5)); + } + else + { + final_color = vec4(0.25, 0.25, 0.25, 1.0); // Neutral_Color + } + return final_color; +} + +void main() +{ + float moveType = texelFetch(s_per_move_data_texture, int(moveId)).r; + + vec4 base_color = get_base_color(moveType); + + // x = tainted, y = specular; + vec2 intensity = vec2(0.0, 0.0); + float t_emission_factor = 1.0; + if (u_isUnlit_optionTextureSize_topLayerOnly_emissionFactor.x < 0.5) + { + vec3 norm = normal_matrix * normalize(frag_normal); + norm = normalize(norm); + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(norm, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(frag_pos.xyz), reflect(-LIGHT_TOP_DIR, norm)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(norm, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + t_emission_factor = u_isUnlit_optionTextureSize_topLayerOnly_emissionFactor.w; + } + + frag_color = vec4(vec3(intensity.y) + base_color.rgb * (intensity.x + t_emission_factor), base_color.a); +} diff --git a/resources/shaders/140/gcode_options.vs b/resources/shaders/140/gcode_options.vs new file mode 100644 index 0000000..7420d3e --- /dev/null +++ b/resources/shaders/140/gcode_options.vs @@ -0,0 +1,39 @@ +#version 140 + +in vec3 v_position; +in vec3 v_normal; + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; + +uniform samplerBuffer s_position_texture; +uniform samplerBuffer s_width_height_data_texture; +uniform samplerBuffer s_segment_texture; + +out float moveId; +out vec3 frag_normal; +out vec3 frag_pos; + +void main() +{ + vec4 seg_startEnd_hasPrev = texelFetch(s_segment_texture, gl_InstanceID); + int end_index = int(seg_startEnd_hasPrev.y); + + vec4 endPos_mid = texelFetch(s_position_texture, end_index); + + moveId = endPos_mid.w + 0.5; + + vec2 width_height = texelFetch(s_width_height_data_texture, int(moveId)).rg; + float width = 1.5 * width_height.x; + float height = width_height.y; + + mat4 model_matrix = mat4( + width, 0.0, 0.0, 0.0, + 0.0, width, 0.0, 0.0, + 0.0, 0.0, 1.5 * height, 0.0, + endPos_mid.x, endPos_mid.y, endPos_mid.z - 0.5 * height, 1.0); + vec4 final_position = view_model_matrix * model_matrix * vec4(v_position, 1.0); + frag_pos = final_position.xyz; + frag_normal = normalize(v_normal); + gl_Position = projection_matrix * final_position; +} diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 4290616..df09565 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -118,6 +118,11 @@ var LangText={ "t124": "", "t125": "Maker’s Supply", "t126": "Loading……", + "wk17": "QIDI Tech Academy", + "wk18": "Quick Start Tutorial", + "wk19": "Learn by Topic", + "wk20": "Filament Guide", + "wk21": "Explore now", "t201":"Connect Device", "t202":"Please set up your printer connection to view the device.", "t203":"Please use the QIDI Link APP to connect to your printer. Once the link is completed, the online device will be synced to the \"Link\" page." @@ -259,7 +264,12 @@ var LangText={ "wk13": "STEP格式", "wk14": "与STL相比,STEP带来了更多有效的信息。由于STEP的高精度,切片时可以生成更多的圆弧路径。STEP还包括模型每个零件的装配关系,可分割模型后恢复装配视图。", "wk15": "3D文本", - "wk16": "使用3D文本工具,用户可以轻松地在项目中创建各种3D文本形状,使模型更加个性化。QIDI Studio提供了数十种字体,并支持粗体和斜体样式,使文本具有更大的灵活性。" + "wk16": "使用3D文本工具,用户可以轻松地在项目中创建各种3D文本形状,使模型更加个性化。QIDI Studio提供了数十种字体,并支持粗体和斜体样式,使文本具有更大的灵活性。", + "wk17": "QIDI科技", + "wk18": "快速入门指南", + "wk19": "按主题学习", + "wk20": "材料指南", + "wk21": "立即探索" }, "ja_JP": { "t1": "QIDI Studioへようこそ", @@ -379,6 +389,11 @@ var LangText={ "t123": "シート材", "t124": "", "t126": "読み込み中……", + "wk17": "バンブーラボ アカデミー", + "wk18": "クイックスタート チュートリアル", + "wk19": "トピック別に学ぶ", + "wk20": "フィラメント ガイド", + "wk21": "今すぐ探索", "t201": "デバイスを接続", "t202": "デバイスを表示するには、プリンター接続を設定してください。", "t203": "プリンターに接続するには、QIDI Linkアプリを使用してください。リンクが完了すると、オンラインデバイスが「リンク」ページに同期されます。" @@ -501,6 +516,11 @@ var LangText={ "t123": "piatto", "t124": "", "t126": "Caricamento in corso……", + "wk17": "QIDI Tech Accademia", + "wk18": "Tutorial di Avvio Rapido", + "wk19": "Impara per Argomento", + "wk20": "Guida al Filamento", + "wk21": "Esplora ora", "t201": "Collega dispositivo", "t202": "Si prega di configurare la connessione della stampante per visualizzare il dispositivo.", "t203": "Si prega di utilizzare l'app QIDI Link per connettersi alla stampante. Una volta completato il collegamento, il dispositivo online verrà sincronizzato nella pagina \"Link\"." @@ -623,6 +643,11 @@ var LangText={ "t123": "assiette", "t124": "", "t126": "Chargement en cours……", + "wk17": "Académie QIDI Tech", + "wk18": "Tutoriel de Démarrage Rapide", + "wk19": "Apprendre par sujet", + "wk20": "Guide des filaments", + "wk21": "Explorer maintenant", "t201": "Connecter l'appareil", "t202": "Veuillez configurer la connexion de votre imprimante pour voir l'appareil.", "t203": "Veuillez utiliser l'application QIDI Link pour vous connecter à votre imprimante. Une fois le lien terminé, l'appareil en ligne sera synchronisé sur la page \"Lien\"." @@ -745,6 +770,11 @@ var LangText={ "t123": "Teller", "t124": "", "t126": "Laden……", + "wk17": "QIDI Tech Akademie", + "wk18": "Schnellstartanleitung", + "wk19": "Lernen nach Thema", + "wk20": "Filament-Leitfaden", + "wk21": "Jetzt erkunden", "t201": "Gerät verbinden", "t202": "Bitte richten Sie die Druckerverbindung ein, um das Gerät anzuzeigen.", "t203": "Bitte verwenden Sie die QIDI Link App, um sich mit Ihrem Drucker zu verbinden. Sobald die Verbindung hergestellt ist, wird das Online-Gerät auf der Seite \"Link\" synchronisiert." @@ -867,6 +897,11 @@ var LangText={ "t123": "tányér", "t124": "", "t126": "Betöltés folyamatban……", + "wk17": "QIDI Tech Akadémia", + "wk18": "Gyorsindítási Útmutató", + "wk19": "Tanulj témakörök szerint", + "wk20": "Filament Útmutató", + "wk21": "Fedezd fel most", "t201": "Eszköz csatlakoztatása", "t202": "Kérjük, állítsa be a nyomtató kapcsolatát az eszköz megtekintéséhez.", "t203": "Kérjük, használja a QIDI Link alkalmazást a nyomtatóhoz való csatlakozáshoz. Miután a kapcsolat létrejött, az online eszköz szinkronizálódik a „Link” oldalon." @@ -989,6 +1024,11 @@ var LangText={ "t123": "plato", "t124": "", "t126": "Carga en progreso……", + "wk17": "Academia QIDI Tech", + "wk18": "Tutorial de Inicio Rápido", + "wk19": "Aprender por tema", + "wk20": "Guía de filamentos", + "wk21": "Explorar ahora", "t201": "Conectar dispositivo", "t202": "Por favor, configure la conexión de su impresora para ver el dispositivo.", "t203": "Por favor, use la aplicación QIDI Link para conectarse a su impresora. Una vez completado el enlace, el dispositivo en línea se sincronizará en la página \"Enlace\"." @@ -1111,6 +1151,11 @@ var LangText={ "t123": "fat", "t124": "", "t126": "Laddning pågår……", + "wk17": "QIDI Tech Akademin", + "wk18": "Snabbstartsguide", + "wk19": "Lär dig efter ämne", + "wk20": "Filamentguide", + "wk21": "Utforska nu", "t201": "Anslut enhet", "t202": "Vänligen ställ in din skrivarkoppling för att se enheten.", "t203": "Använd QIDI Link-appen för att ansluta till din skrivare. När länken är klar kommer den online-enheten att synkroniseras till \"Länk\"-sidan." @@ -1233,6 +1278,11 @@ var LangText={ "t123": "talíř", "t124": "", "t126": "Načtení probíhá……", + "wk17": "QIDI Tech Akademie", + "wk18": "Rychlý Návod k Použití", + "wk19": "Učit se podle tématu", + "wk20": "Průvodce filamenty", + "wk21": "Prozkoumat nyní", "t201": "Připojit zařízení", "t202": "Nastavte prosím připojení tiskárny, abyste mohli zobrazit zařízení.", "t203": "Použijte prosím aplikaci QIDI Link k připojení k tiskárně. Jakmile bude spojení dokončeno, online zařízení bude synchronizováno na stránce \"Odkaz\"." @@ -1355,6 +1405,11 @@ var LangText={ "t123": "bord", "t124": "", "t126": "Laden in uitvoering……", + "wk17": "QIDI Tech Academie", + "wk18": "Snelstartgids", + "wk19": "Leren per Onderwerp", + "wk20": "Filamentgids", + "wk21": "Nu verkennen", "t201": "Apparaat verbinden", "t202": "Stel de printerverbinding in om het apparaat te bekijken.", "t203": "Gebruik de QIDI Link-app om verbinding te maken met uw printer. Zodra de koppeling is voltooid, wordt het online apparaat gesynchroniseerd op de pagina \"Link\"." @@ -1477,6 +1532,11 @@ var LangText={ "t123": "тарілка", "t124": "", "t126": "Завантаження триває……", + "wk17": "Академія QIDI Tech", + "wk18": "Керівництво з Швидкого Початку", + "wk19": "Навчання за Темою", + "wk20": "Посібник з Філаментів", + "wk21": "Досліджуйте зараз", "t201": "Підключити пристрій", "t202": "Будь ласка, налаштуйте підключення принтера, щоб переглянути пристрій.", "t203": "Будь ласка, використовуйте додаток QIDI Link для підключення до вашого принтера. Після завершення підключення онлайн-пристрій буде синхронізовано на сторінці \"Посилання\"." @@ -1599,6 +1659,11 @@ var LangText={ "t123": "тарелка", "t124": "", "t126": "Загрузка идёт……", + "wk17": "Академия QIDI Tech", + "wk18": "Руководство по быстрому запуску", + "wk19": "Обучение по теме", + "wk20": "Руководство по пруткам", + "wk21": "Исследуйте сейчас", "t201": "Подключить устройство", "t202": "Пожалуйста, настройте подключение принтера, чтобы просмотреть устройство.", "t203": "Пожалуйста, используйте приложение QIDI Link для подключения к вашему принтеру. После завершения подключения онлайн-устройство будет синхронизировано на странице \"Ссылка\"." @@ -1721,6 +1786,11 @@ var LangText={ "t123": "tabak", "t124": "", "t126": "Yükleme devam ediyor……", + "wk17": "QIDI Tech Akademisi", + "wk18": "Hızlı Başlangıç Kılavuzu", + "wk19": "Konuya Göre Öğrenme", + "wk20": "Filament Kılavuzu", + "wk21": "Şimdi Keşfet", "t201": "Cihazı Bağla", "t202": "Cihazı görüntülemek için lütfen yazıcı bağlantınızı ayarlayın.", "t203": "Yazıcınıza bağlanmak için lütfen QIDI Link uygulamasını kullanın. Bağlantı tamamlandığında, çevrimiçi cihaz \"Bağlantı\" sayfasına senkronize edilecektir." @@ -1843,6 +1913,11 @@ var LangText={ "t123": "prato", "t124": "", "t126": "Carregamento em andamento……", + "wk17": "Academia QIDI Tech", + "wk18": "Tutorial de Início Rápido", + "wk19": "Aprendizado por Tópico", + "wk20": "Guia de Filamento", + "wk21": "Explore Agora", "t201": "Conectar Dispositivo", "t202": "Por favor, configure a conexão da sua impressora para visualizar o dispositivo.", "t203": "Por favor, use o aplicativo QIDI Link para se conectar à sua impressora. Uma vez concluída a conexão, o dispositivo online será sincronizado na página \"Link\"." @@ -1965,6 +2040,11 @@ var LangText={ "t123": "접시", "t124": "", "t126": "로딩 중……", + "wk17": "밤부랩 아카데미", + "wk18": "빠른 시작 튜토리얼", + "wk19": "주제별 학습", + "wk20": "필라멘트 가이드", + "wk21": "지금 탐색", "t201": "장치 연결", "t202": "장치를 보려면 프린터 연결을 설정하십시오.", "t203": "프린터에 연결하려면 QIDI Link 앱을 사용하십시오. 연결이 완료되면 온라인 장치가 '링크' 페이지에 동기화됩니다." @@ -2087,6 +2167,11 @@ var LangText={ "t123": "talerz", "t124": "", "t126": "Ładowanie trwa……", + "wk17": "Akademia QIDI Tech", + "wk18": "Samouczek Szybkiego Startu", + "wk19": "Nauka według Tematu", + "wk20": "Przewodnik po Filamentach", + "wk21": "Odkrywaj teraz", "t201": "Podłącz urządzenie", "t202": "Proszę skonfigurować połączenie drukarki, aby wyświetlić urządzenie.", "t203": "Proszę użyć aplikacji QIDI Link, aby połączyć się z drukarką. Po zakończeniu połączenia, urządzenie online zostanie zsynchronizowane na stronie \"Link\"." diff --git a/resources/web/flush/WipingDialog.html b/resources/web/flush/WipingDialog.html index 8761c91..ce7b814 100644 --- a/resources/web/flush/WipingDialog.html +++ b/resources/web/flush/WipingDialog.html @@ -153,7 +153,7 @@ background-color: #4479fb; } .btn-ok:hover { - background-color: #3d97cb; + background-color: #74a8ff; } .btn-cancel { @@ -388,6 +388,7 @@ let m_max_flush_volumes = [] let m_min_flush_multiplier = 0.50 let m_max_flush_multiplier = 3 + let m_default_matrix //系统默认矩阵 function storeData() { var data = JSON.stringify({ @@ -516,6 +517,9 @@ m_raw_matrix = data.flush_volume_matrixs.map(function(arr) { return arr.slice(); }); + m_default_matrix = data.default_matrixs.map(function (arr) { + return arr.slice(); + }); m_flush_multipiers = data.flush_multiplier.slice() m_max_flush_volumes = data.max_flush_volumes m_min_flush_volumes = data.min_flush_volumes @@ -607,10 +611,10 @@ function handleExtruderSelect(extruder) { m_curr_extruder_id = extruder == 'left' ? 0 : 1 - updateTable(m_raw_matrix[m_curr_extruder_id], m_curr_extruder_id) updateVolumeRange(m_min_flush_volumes[m_curr_extruder_id],m_max_flush_volumes[m_curr_extruder_id]) updateFlushMultiplier(m_min_flush_multiplier[m_curr_extruder_id],m_max_flush_multiplier[m_curr_extruder_id]) updateFlushMultiplier(m_curr_extruder_id) + updateTable(m_raw_matrix[m_curr_extruder_id], m_curr_extruder_id) } function onMultiplierChange() { @@ -641,6 +645,14 @@ function updateWarningTexts() { + let val = parseFloat(document.getElementById("multiplierInput").value); + const input = document.getElementById('multiplierInput'); + if (val !== 1.0) { + input.style.color = 'orange'; + } else { + input.style.color = 'black'; + } + let hasException = false; for (let i = 0; i < m_number_of_filaments; i++) { for (let j = 0; j < m_number_of_filaments; j++) { @@ -649,11 +661,18 @@ let val = parseInt(input.value, 10); if (isNaN(val)) val = 0; + var index = i * m_number_of_filaments + j; + let defaultVal = rawToDislay(m_default_matrix[m_curr_extruder_id][index], m_flush_multipiers[m_curr_extruder_id]) + if (val < m_min_flush_volumes[m_curr_extruder_id] || val > m_max_flush_volumes[m_curr_extruder_id]) { input.style.color = "red"; hasException = true; - } else { - input.style.removeProperty("color"); + } + else if (val != defaultVal) { + input.style.color = "orange"; + } + else { + input.style.removeProperty("color"); } } } diff --git a/resources/web/guide/22/22.css b/resources/web/guide/22/22.css index 56d226a..235b82b 100644 --- a/resources/web/guide/22/22.css +++ b/resources/web/guide/22/22.css @@ -1,70 +1,93 @@ - -.ChooseBlock -{ - display:flex; - line-height: 32px; +#Content { + display:flex; + flex-direction: row; } -.CName -{ - width:130px; - font-weight: 700; - height: 100%; - text-align: right; - white-space: nowrap; - flex-shrink: 0; +#leftBlock { + flex: 1; + padding-left: 9px; + padding-right: 9px; + border-right: 1px solid #EEEEEE; } -.CValues -{ - display:flex; - justify-content: flex-start; - align-content: flex-start; - flex-wrap: wrap; +#rightBlock { + flex: 2; + padding-left: 15px; + padding-right: 9px; } -input +.CNameBlock { + font-weight: 700; + height: 28px; +} + +.inlineAlign { + display: inline-block; + vertical-align: middle; + line-height:normal; +} + +.CNameIcon { + width: 16px; + height: 16px; +} + +.CArrow { - margin-left: 20px; - margin-right: 6px; + width: 20px; + height: 20px; + background-image: url(../img/pull.svg); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + float: right; + transition: transform 0.3s ease; + transform: rotate(90deg); +} +.CArrow.active { + transform: rotate(0deg); +} + +.CValues { + padding: 8px; + background-color: #F8F8F8; +} + +input { + margin-right: 8px; vertical-align: middle; + width: 16px; + height: 16px; } -#ItemSelectArea -{ - flex: 0 0 40px; - height:40px; - border-top: 1px solid #4479FB; /* y96 */ - display: flex; - align-items: center; +.inputIndent { margin-left: 8px;} + +.checkboxText { + width: 212px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; } -#ItemSelectArea .SmallBtn -{ - margin-left:5px; +/* right block */ +.SelectAll { + width: 100%; + text-align: right; + font-weight: 700; } - -#ItemBlockArea -{ - flex: 1 0 236px; - display:flex; - overflow-x:auto; - flex-wrap:wrap; - flex-direction: column; - justify-content:flex-start; - align-items: flex-start; - align-content:flex-start; - line-height: 32px; +#ItemBlockArea { + column-count: 2; + column-gap: 16px; + padding-top: 16px; } -.MItem -{ - min-width: 220px; - height: 32px; +.cols > *{ + break-inside: avoid; } - +/* NoticeMask */ #NoticeMask { background-color: #000; @@ -116,4 +139,4 @@ input #GotoNetPluginBtn { display: none; -} +} \ No newline at end of file diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js index cf7a8fd..d075804 100644 --- a/resources/web/guide/22/22.js +++ b/resources/web/guide/22/22.js @@ -1,17 +1,37 @@ - var m_ProfileItem; - var FilamentPriority=new Array( "pla","abs","pet","tpu","pc"); -var VendorPriority=new Array("qidi","generic"); - +var VendorPriority=new Array("qidi","qdt","kexcelled","polymaker","esun","generic","bambu lab","bambulab","bbl"); + function OnInit() { - TranslatePage(); - - RequestProfile(); - - //m_ProfileItem=cData; - //SortUI(); + $("#printerBtn").on("click", function(){ + $("#MachineList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $("#filatypeBtn").on("click", function(){ + $("#FilatypeList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $("#vendorBtn").on("click", function(){ + $("#VendorList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $('#SelectAllCheckbox').change(function() { + if ($(this).is(':checked')) { + SelectAllFilament(1); + } else { + SelectAllFilament(0); + } + }); + + TranslatePage(); + RequestProfile(); + + // m_ProfileItem=cData; + // SortUI(); } function RequestProfile() @@ -23,15 +43,6 @@ function RequestProfile() SendWXMessage( JSON.stringify(tSend) ); } -//function RequestModelSelect() -//{ -// var tSend={}; -// tSend['sequence_id']=Math.round(new Date() / 1000); -// tSend['command']="request_userguide_modelselected"; -// -// SendWXMessage( JSON.stringify(tSend) ); -//} - function HandleStudio(pVal) { let strCmd=pVal['command']; @@ -52,9 +63,11 @@ function GetFilamentShortname( sName ) } -function SortUI() +function ChooseAllMachine() { - var ModelList = new Array(); + let bCheck=$("#MachineList input:first").prop("checked"); + + $("#MachineList input").prop("checked",bCheck); //w22 const vendorOrder = ["Q Series", "X 4 Series", "X 3 Series"]; @@ -64,314 +77,22 @@ function SortUI() return indexA - indexB; }); - let nMode=m_ProfileItem["model"].length; - for(let n=0;n'+sName+''; -// } -// } -// -// $('#MachineList .CValues').append(HtmlMachine); -// $('#MachineList .CValues input').prop("checked",true); -// if(nMachine<=1) -// { -// $('#MachineList').hide(); -// } - - //model - let HtmlMode=''; - nMode=ModelList.length; - for(let n=0;n'+sModel['model']+''; - } - - $('#MachineList .CValues').append(HtmlMode); - $('#MachineList .CValues input').prop("checked",true); - if(nMode<=1) - { - $('#MachineList').hide(); - } - - //Filament - let HtmlFilament=''; - let SelectNumber=0; - - var TypeHtmlArray={}; - var VendorHtmlArray={}; - for( let key in m_ProfileItem['filament'] ) - { - let OneFila=m_ProfileItem['filament'][key]; - - //alert(JSON.stringify(OneFila)); - - let fWholeName=OneFila['name'].trim(); - let fShortName=GetFilamentShortname( OneFila['name'] ); - let fVendor = OneFila['vendor']; - //w22 - if (fVendor != "QIDI") - continue; - let fType=OneFila['type']; - let fSelect=OneFila['selected']; - let fModel=OneFila['models'] - - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - -// if(OneFila['name'].indexOf("QIDI PA-CF")>=0) -// { -// alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ) -// -// let b=1+2; -// } - - let bFind=false; - //let bCheck=$("#MachineList input:first").prop("checked"); - if( fModel=='') - { - bFind=true; - } - else - { - //check in modellist - let nModelAll=ModelList.length; - for(let m=0;m=0) - { - bFind=true; - break; - } - } - } - } - - if(bFind) - { - //Type - let LowType=fType.toLowerCase(); - if(!TypeHtmlArray.hasOwnProperty(LowType)) - { - let HtmlType='
'+fType+'
'; - - TypeHtmlArray[LowType]=HtmlType; - } - - //Vendor - let lowVendor=fVendor.toLowerCase(); - if(!VendorHtmlArray.hasOwnProperty(lowVendor)) - { - let HtmlVendor='
'+fVendor+'
'; - - VendorHtmlArray[lowVendor]=HtmlVendor; - } - - //Filament - let pFila=$("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']"); - if(pFila.length==0) - { - let HtmlFila='
'+fShortName+'
'; - - $("#ItemBlockArea").append(HtmlFila); - } - else - { - let strModel=pFila.attr("model"); - let strFilalist=pFila.attr("filalist"); - - pFila.attr("model", strModel+fModel); - pFila.attr("filalist", strFilalist+fWholeName+';'); - } - - if(fSelect*1==1) - { - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - - $("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']").prop("checked",true); - SelectNumber++; - } -// else -// $("#ItemBlockArea input[vendor='"+fVendor+"'][model='"+fModel+"'][filatype='"+fType+"'][name='"+key+"']").prop("checked",false); - } - } - - //w22 - for (let key in m_ProfileItem['filament']) { - let OneFila = m_ProfileItem['filament'][key]; - - //alert(JSON.stringify(OneFila)); - - let fWholeName = OneFila['name'].trim(); - let fShortName = GetFilamentShortname(OneFila['name']); - let fVendor = OneFila['vendor']; - if (fVendor == "QIDI") - continue; - let fType = OneFila['type']; - let fSelect = OneFila['selected']; - let fModel = OneFila['models'] - - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - - // if(OneFila['name'].indexOf("QIDI PA-CF")>=0) - // { - // alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ) - // - // let b=1+2; - // } - - let bFind = false; - //let bCheck=$("#MachineList input:first").prop("checked"); - if (fModel == '') { - bFind = true; - } - else { - //check in modellist - let nModelAll = ModelList.length; - for (let m = 0; m < nModelAll; m++) { - let sOne = ModelList[m]; - - let OneName = sOne['model']; - let NozzleArray = sOne["nozzle_selected"].split(';'); - - let nNozzle = NozzleArray.length; - - for (let b = 0; b < nNozzle; b++) { - let nowModel = OneName + "++" + NozzleArray[b]; - if (fModel.indexOf(nowModel) >= 0) { - bFind = true; - break; - } - } - } - } - - if (bFind) { - //Type - let LowType = fType.toLowerCase(); - if (!TypeHtmlArray.hasOwnProperty(LowType)) { - let HtmlType = '
' + fType + '
'; - - TypeHtmlArray[LowType] = HtmlType; - } - - //Vendor - let lowVendor = fVendor.toLowerCase(); - if (!VendorHtmlArray.hasOwnProperty(lowVendor)) { - let HtmlVendor = '
' + fVendor + '
'; - - VendorHtmlArray[lowVendor] = HtmlVendor; - } - - //Filament - let pFila = $("#ItemBlockArea input[vendor='" + fVendor + "'][filatype='" + fType + "'][name='" + fShortName + "']"); - if (pFila.length == 0) { - let HtmlFila = '
' + fShortName + '
'; - - $("#ItemBlockArea").append(HtmlFila); - } - else { - let strModel = pFila.attr("model"); - let strFilalist = pFila.attr("filalist"); - - pFila.attr("model", strModel + fModel); - pFila.attr("filalist", strFilalist + fWholeName + ';'); - } - - if (fSelect * 1 == 1) { - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - - $("#ItemBlockArea input[vendor='" + fVendor + "'][filatype='" + fType + "'][name='" + fShortName + "']").prop("checked", true); - SelectNumber++; - } - // else - // $("#ItemBlockArea input[vendor='"+fVendor+"'][model='"+fModel+"'][filatype='"+fType+"'][name='"+key+"']").prop("checked",false); - } - } - - //Sort TypeArray - let TypeAdvNum=FilamentPriority.length; - for( let n=0;n-1 ) - { - DefaultMaterialString+=OneMode['materials']+';'; - } - } - - let DefaultMaterialArray=DefaultMaterialString.split(';'); - //alert(DefaultMaterialString); - - //Filament - let FilaNodes=$("#ItemBlockArea .MItem"); - let nFilament=FilaNodes.length; - for(let m=0;m-1) - { - HasModel=true; - break; - } - } - - if(HasModel) - $(OneFF).prop("checked",true); - } - - ShowNotice(0); -} - function SelectAllFilament( nShow ) { if( nShow==0 ) @@ -623,6 +263,198 @@ function ShowNotice( nShow ) } } +function SortUI() +{ + var ModelList=new Array(); + + let nMode=m_ProfileItem["model"].length; + for(let n=0;n'+sModel['model']+''; + } + + $('#MachineList').append(HtmlMode); + $('#MachineList input').prop("checked",true); + if(nMode<=1) + { + $('#MachineList').hide(); + } + + //Filament + let HtmlFilament=''; + let SelectNumber=0; + + var TypeHtmlArray={}; + var VendorHtmlArray={}; + + //y73 + var sortedFilamentKeys = Object.keys(m_ProfileItem['filament']).sort((a, b) => { + let vendorA = m_ProfileItem['filament'][a]['vendor'].toLowerCase(); + let vendorB = m_ProfileItem['filament'][b]['vendor'].toLowerCase(); + + let indexA = VendorPriority.indexOf(vendorA); + let indexB = VendorPriority.indexOf(vendorB); + + if(indexA === -1) indexA = Number.MAX_SAFE_INTEGER; + if(indexB === -1) indexB = Number.MAX_SAFE_INTEGER; + + return indexA - indexB; + }); + //alert(sortedFilamentKeys); + for( let key of sortedFilamentKeys) + { + //alert(key); + let OneFila=m_ProfileItem['filament'][key]; + + //alert(JSON.stringify(OneFila)); + + let fWholeName=OneFila['name'].trim(); + let fShortName=GetFilamentShortname( OneFila['name'] ); + let fVendor = OneFila['vendor']; + let fType=OneFila['type']; + let fSelect=OneFila['selected']; + let fModel=OneFila['models'] + + let bFind=false; + if( fModel=='') + { + bFind=true; + } + else + { + //check in modellist + let nModelAll=ModelList.length; + for(let m=0;m=0) + { + bFind=true; + break; + } + } + } + } + + if(bFind) + { + //Type + let LowType=fType.toLowerCase(); + if(!TypeHtmlArray.hasOwnProperty(LowType)) + { + let HtmlType='
'+fType+'
'; + + TypeHtmlArray[LowType]=HtmlType; + } + + //Vendor + let lowVendor=fVendor.toLowerCase(); + if(!VendorHtmlArray.hasOwnProperty(lowVendor)) + { + let HtmlVendor='
'+fVendor+'
'; + + VendorHtmlArray[lowVendor]=HtmlVendor; + } + + //Filament + let pFila=$("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']"); + if(pFila.length==0) + { + let HtmlFila='
'+fShortName+'
'; + + $("#ItemBlockArea").append(HtmlFila); + } + else + { + let strModel=pFila.attr("model"); + let strFilalist=pFila.attr("filalist"); + + pFila.attr("model", strModel+fModel); + pFila.attr("filalist", strFilalist+fWholeName+';'); + } + + if(fSelect*1==1) + { + //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); + + $("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']").prop("checked",true); + SelectNumber++; + } +// else +// $("#ItemBlockArea input[vendor='"+fVendor+"'][model='"+fModel+"'][filatype='"+fType+"'][name='"+key+"']").prop("checked",false); + } + } + + //Sort TypeArray + let TypeAdvNum=FilamentPriority.length; + for( let n=0;n-1 ) + { + DefaultMaterialString+=OneMode['materials']+';'; + } + } + + let DefaultMaterialArray=DefaultMaterialString.split(';'); + //alert(DefaultMaterialString); + + //Filament + let FilaNodes=$("#ItemBlockArea input"); + let nFilament=FilaNodes.length; + for(let m=0;m-1) + { + HasModel=true; + break; + } + } + + if(HasModel) + $(OneFF).prop("checked",true); + } + + ShowNotice(0); +} \ No newline at end of file diff --git a/resources/web/guide/22/index.html b/resources/web/guide/22/index.html index 369aa83..25a43d4 100644 --- a/resources/web/guide/22/index.html +++ b/resources/web/guide/22/index.html @@ -3,165 +3,140 @@ -引导_P21 +引导_P22 - + - + -
+
Filament Selection
- -
-
printer
-
-
all
- -
-
- -
-
filament type
-
-
all
- -
-
- -
-
vendor
-
-
all
- +
+
+
+ + printer +
+
+
+
all
+ +
-
- - -
-
All
-
Clear all
-
-
- -
- +
+
+ + vendor +
+
+
+
all
+ +
+
+
+
+ + filament type +
+
+
+
all
+ +
+
+
+
+
Select All
+
+ +
+
Back
finish
-
finish
+
-
+
+
+
error
+
+
At least one filament must be selected.
+
Do you want to use default filament ?
+
+
Yes
+
No
+
+
-
-
error
-
-
At least one filament must be selected.
-
Do you want to use default filament ?
-
-
Yes
-
No
-
-
-
- - + \ No newline at end of file diff --git a/resources/web/guide/22_remove/22.css b/resources/web/guide/22_remove/22.css new file mode 100644 index 0000000..27005a5 --- /dev/null +++ b/resources/web/guide/22_remove/22.css @@ -0,0 +1,119 @@ + +.ChooseBlock +{ + display:flex; + line-height: 32px; +} + +.CName +{ + width:130px; + font-weight: 700; + height: 100%; + text-align: right; + white-space: nowrap; + flex-shrink: 0; +} + +.CValues +{ + display:flex; + justify-content: flex-start; + align-content: flex-start; + flex-wrap: wrap; +} + +input +{ + margin-left: 20px; + margin-right: 6px; + vertical-align: middle; +} + +#ItemSelectArea +{ + flex: 0 0 40px; + height:40px; + border-top: 1px solid #4479fb; + display: flex; + align-items: center; +} + +#ItemSelectArea .SmallBtn +{ + margin-left:5px; +} + + +#ItemBlockArea +{ + flex: 1 0 236px; + display:flex; + overflow-x:auto; + flex-wrap:wrap; + flex-direction: column; + justify-content:flex-start; + align-items: flex-start; + align-content:flex-start; + line-height: 32px; +} + +.MItem +{ + min-width: 220px; + height: 32px; +} + + +#NoticeMask +{ + background-color: #000; + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + opacity: 0.05; + display: none; +} + +#NoticeBody +{ + display: none; + width: 500px; + border-width: 1px; + border-style: solid; + border-radius: 4px; + background-color: inherit; + position: absolute; + left: 50%; + top: 200px; + margin-left: -250px; +} + +#NoticeBar +{ + background-color:#00B35C; + height: 40px; + line-height: 40px; + color: #fff; + text-align: center; +} + +#NoticeContent +{ + padding: 4mm 10mm; +} + + +#NoticeBtns +{ + margin-top: 4mm; + display: flex; + justify-content:space-around; +} + +#GotoNetPluginBtn +{ + display: none; +} diff --git a/resources/web/guide/22_remove/22.js b/resources/web/guide/22_remove/22.js new file mode 100644 index 0000000..6335c2e --- /dev/null +++ b/resources/web/guide/22_remove/22.js @@ -0,0 +1,599 @@ + +var m_ProfileItem; + +var FilamentPriority=new Array( "pla","abs","pet","tpu","pc"); +var VendorPriority=new Array("qidi tech","qidi","qdt","kexcelled","polymaker","esun","generic","bambu lab","bambulab","bbl"); + +function OnInit() +{ + TranslatePage(); + + RequestProfile(); + + //m_ProfileItem=cData; + //SortUI(); +} + +function RequestProfile() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="request_userguide_profile"; + + SendWXMessage( JSON.stringify(tSend) ); +} + +//function RequestModelSelect() +//{ +// var tSend={}; +// tSend['sequence_id']=Math.round(new Date() / 1000); +// tSend['command']="request_userguide_modelselected"; +// +// SendWXMessage( JSON.stringify(tSend) ); +//} + +function HandleStudio(pVal) +{ + let strCmd=pVal['command']; + //alert(strCmd); + + if(strCmd=='response_userguide_profile') + { + m_ProfileItem=pVal['response']; + SortUI(); + } +} + +function GetFilamentShortname( sName ) +{ + let sShort=sName.split('@')[0].trim(); + + return sShort; +} + + +function SortUI() +{ + var ModelList=new Array(); + + let nMode=m_ProfileItem["model"].length; + for(let n=0;n'+sName+'
'; +// } +// } +// +// $('#MachineList .CValues').append(HtmlMachine); +// $('#MachineList .CValues input').prop("checked",true); +// if(nMachine<=1) +// { +// $('#MachineList').hide(); +// } + + //model + let HtmlMode=''; + nMode=ModelList.length; + for(let n=0;n'+sModel['model']+'
'; + } + + $('#MachineList .CValues').append(HtmlMode); + $('#MachineList .CValues input').prop("checked",true); + if(nMode<=1) + { + $('#MachineList').hide(); + } + + //Filament + let HtmlFilament=''; + let SelectNumber=0; + + var TypeHtmlArray={}; + var VendorHtmlArray={}; + for( let key in m_ProfileItem['filament'] ) + { + let OneFila=m_ProfileItem['filament'][key]; + + //alert(JSON.stringify(OneFila)); + + let fWholeName=OneFila['name'].trim(); + let fShortName=GetFilamentShortname( OneFila['name'] ); + let fVendor=OneFila['vendor']; + let fType=OneFila['type']; + let fSelect=OneFila['selected']; + let fModel=OneFila['models'] + + //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); + +// if(OneFila['name'].indexOf("PA-CF")>=0) +// { +// alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ) +// +// let b=1+2; +// } + + let bFind=false; + //let bCheck=$("#MachineList input:first").prop("checked"); + if( fModel=='') + { + bFind=true; + } + else + { + //check in modellist + let nModelAll=ModelList.length; + for(let m=0;m=0) + { + bFind=true; + break; + } + } + } + } + + if(bFind) + { + //Type + let LowType=fType.toLowerCase(); + if(!TypeHtmlArray.hasOwnProperty(LowType)) + { + let HtmlType='
'+fType+'
'; + + TypeHtmlArray[LowType]=HtmlType; + } + + //Vendor + let lowVendor=fVendor.toLowerCase(); + if(!VendorHtmlArray.hasOwnProperty(lowVendor)) + { + let HtmlVendor='
'+fVendor+'
'; + + VendorHtmlArray[lowVendor]=HtmlVendor; + } + + //Filament + let pFila=$("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']"); + if(pFila.length==0) + { + let HtmlFila='
'+fShortName+'
'; + + $("#ItemBlockArea").append(HtmlFila); + } + else + { + let strModel=pFila.attr("model"); + let strFilalist=pFila.attr("filalist"); + + pFila.attr("model", strModel+fModel); + pFila.attr("filalist", strFilalist+fWholeName+';'); + } + + if(fSelect*1==1) + { + //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); + + $("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']").prop("checked",true); + SelectNumber++; + } +// else +// $("#ItemBlockArea input[vendor='"+fVendor+"'][model='"+fModel+"'][filatype='"+fType+"'][name='"+key+"']").prop("checked",false); + } + } + + //Sort TypeArray + let TypeAdvNum=FilamentPriority.length; + for( let n=0;n=0) + { + HasModel=true; + break; + } + } + + if(HasModel || fModel=='') + $(OneNode).show(); + else + $(OneNode).hide(); + } + else + $(OneNode).hide(); + } +} + +function ChooseDefaultFilament() +{ + //ModelList + let pModel=$("#MachineList input:gt(0)"); + let nModel=pModel.length; + let ModelList=new Array(); + for(let n=0;n-1 ) + { + DefaultMaterialString+=OneMode['materials']+';'; + } + } + + let DefaultMaterialArray=DefaultMaterialString.split(';'); + //alert(DefaultMaterialString); + + //Filament + let FilaNodes=$("#ItemBlockArea .MItem"); + let nFilament=FilaNodes.length; + for(let m=0;m-1) + { + HasModel=true; + break; + } + } + + if(HasModel) + $(OneFF).prop("checked",true); + } + + ShowNotice(0); +} + +function SelectAllFilament( nShow ) +{ + if( nShow==0 ) + { + $('#ItemBlockArea input').prop("checked",false); + } + else + { + $('#ItemBlockArea input').prop("checked",true); + } +} + +function ShowNotice( nShow ) +{ + if(nShow==0) + { + $("#NoticeMask").hide(); + $("#NoticeBody").hide(); + } + else + { + $("#NoticeMask").show(); + $("#NoticeBody").show(); + } +} + + +function ResponseFilamentResult() +{ + let FilaSelectedList= $("#ItemBlockArea input:checked"); + let nAll=FilaSelectedList.length; + + if( nAll==0 ) + { + ShowNotice(1); + return false; + } + + let FilaArray=new Array(); + for(let n=0;n + + + + +引导_P21 + + + + + + + + + + + + +
+
Filament Selection
+
+
+ +
+
printer
+
+
all
+ +
+
+ +
+
filament type
+
+
all
+ +
+
+ +
+
vendor
+
+
all
+ +
+
+ + +
+
All
+
Clear all
+
+
+ +
+ +
+
+
Back
+
finish
+
Next
+
+
+
+
+
error
+
+
At least one filament must be selected.
+
Do you want to use default filament ?
+
+
Yes
+
No
+
+
+
+ + + diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index 4e9126f..52db825 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -1,68 +1,85 @@ - -.ChooseBlock -{ - display:flex; - line-height: 32px; +#leftBlock { + flex: 1; + padding-left: 9px; + padding-right: 9px; + border-right: 1px solid #EEEEEE; } -.CName -{ - width:130px; - font-weight: 700; - height: 100%; - text-align: right; - white-space: nowrap; - flex-shrink: 0; +#rightBlock { + flex: 2; + padding-left: 15px; + padding-right: 9px; } -.CValues -{ - display:flex; - justify-content: flex-start; - align-content: flex-start; - flex-wrap: wrap; +.CNameBlock { + font-weight: 700; + height: 28px; } -input +.inlineAlign { + display: inline-block; + vertical-align: middle; + line-height:normal; +} + +.CNameIcon { + width: 16px; + height: 16px; +} + +.CArrow { - margin-left: 20px; - margin-right: 6px; + width: 20px; + height: 20px; + background-image: url(../img/pull.svg); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + float: right; + transition: transform 0.3s ease; + transform: rotate(90deg); +} +.CArrow.active { + transform: rotate(0deg); +} + +.CValues { + padding: 8px; + background-color: #F8F8F8; +} + +input { + margin-right: 8px; vertical-align: middle; + width: 16px; + height: 16px; } -#ItemSelectArea -{ - flex: 0 0 40px; - height:40px; - border-top: 1px solid #4479FB; /* y96 */ - display: flex; - align-items: center; +.inputIndent { margin-left: 8px;} + +.checkboxText { + width: 212px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; } -#ItemSelectArea .SmallBtn -{ - margin-left:5px; +/* right block */ +.SelectAll { + width: 100%; + text-align: right; + font-weight: 700; } - -#ItemBlockArea -{ - display:flex; - overflow-x:auto; - flex-wrap:wrap; - flex-direction: column; - justify-content:flex-start; - align-items: flex-start; - align-content:flex-start; - line-height: 32px; - height: 100%; - flex:1 0 236px; +#ItemBlockArea { + column-count: 2; + column-gap: 16px; + padding-top: 16px; } -.MItem -{ - min-width: 220px; - height: 32px; +.cols > *{ + break-inside: avoid; } @@ -94,7 +111,7 @@ input #NoticeBar { - background-color:#4479FB; /* y96 */ + background-color:#00B35C; height: 40px; line-height: 40px; color: #fff; @@ -117,7 +134,7 @@ input #SystemFilamentsArea { display: none; - flex-direction: column; + flex-direction: row; } #CFilament_Btn_Area @@ -148,7 +165,7 @@ input height: calc(100% - 6px); display: flex; align-items: center; - border-bottom: 6px solid #4479FB; + border-bottom: 6px solid #4479fb; } #Title div.TitleUnselected diff --git a/resources/web/guide/23/23.js b/resources/web/guide/23/23.js index 8530916..6dc85d1 100644 --- a/resources/web/guide/23/23.js +++ b/resources/web/guide/23/23.js @@ -6,8 +6,30 @@ var VendorPriority=new Array("qidi","generic"); function OnInit() { + $("#printerBtn").on("click", function(){ + $("#MachineList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $("#filatypeBtn").on("click", function(){ + $("#FilatypeList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $("#vendorBtn").on("click", function(){ + $("#VendorList").slideToggle(300); + $(this).find(".CArrow").toggleClass("active"); + }); + + $('#SelectAllCheckbox').change(function() { + if ($(this).is(':checked')) { + SelectAllFilament(1); + } else { + SelectAllFilament(0); + } + }); TranslatePage(); - OnSelectMenu(1); + OnSelectMenu(1); RequestProfile(); @@ -79,30 +101,6 @@ function SortUI() ModelList.push(OneMode); } - //machine -// let HtmlMachine=''; -// -// let nMachine=m_ProfileItem['machine'].length; -// for(let n=0;n'+sName+'
'; -// } -// } -// -// $('#MachineList .CValues').append(HtmlMachine); -// $('#MachineList .CValues input').prop("checked",true); -// if(nMachine<=1) -// { -// $('#MachineList').hide(); -// } - //model let HtmlMode=''; nMode=ModelList.length; @@ -110,11 +108,11 @@ function SortUI() { let sModel=ModelList[n]; - HtmlMode+='
'+sModel['model']+'
'; + HtmlMode+='
'+sModel['model']+'
'; } - $('#MachineList .CValues').append(HtmlMode); - $('#MachineList .CValues input').prop("checked",true); + $('#MachineList').append(HtmlMode); + $('#MachineList input').prop("checked",true); if(nMode<=1) { $('#MachineList').hide(); @@ -126,7 +124,23 @@ function SortUI() var TypeHtmlArray={}; var VendorHtmlArray={}; - for( let key in m_ProfileItem['filament'] ) + + + //y73 + var sortedFilamentKeys = Object.keys(m_ProfileItem['filament']).sort((a, b) => { + let vendorA = m_ProfileItem['filament'][a]['vendor'].toLowerCase(); + let vendorB = m_ProfileItem['filament'][b]['vendor'].toLowerCase(); + + let indexA = VendorPriority.indexOf(vendorA); + let indexB = VendorPriority.indexOf(vendorB); + + if(indexA === -1) indexA = Number.MAX_SAFE_INTEGER; + if(indexB === -1) indexB = Number.MAX_SAFE_INTEGER; + + return indexA - indexB; + }); + //alert(sortedFilamentKeys); + for( let key of sortedFilamentKeys) { let OneFila=m_ProfileItem['filament'][key]; @@ -135,9 +149,6 @@ function SortUI() let fWholeName=OneFila['name'].trim(); let fShortName=GetFilamentShortname( OneFila['name'] ); let fVendor = OneFila['vendor']; - //w22 - if (fVendor != "QIDI") - continue; let fType=OneFila['type']; let fSelect=OneFila['selected']; let fModel=OneFila['models'] @@ -188,7 +199,7 @@ function SortUI() let LowType=fType.toLowerCase(); if(!TypeHtmlArray.hasOwnProperty(LowType)) { - let HtmlType='
'+fType+'
'; + let HtmlType='
'+fType+'
'; TypeHtmlArray[LowType]=HtmlType; } @@ -197,7 +208,7 @@ function SortUI() let lowVendor=fVendor.toLowerCase(); if(!VendorHtmlArray.hasOwnProperty(lowVendor)) { - let HtmlVendor='
'+fVendor+'
'; + let HtmlVendor='
'+fVendor+'
'; VendorHtmlArray[lowVendor]=HtmlVendor; } @@ -206,7 +217,7 @@ function SortUI() let pFila=$("#ItemBlockArea input[vendor='"+fVendor+"'][filatype='"+fType+"'][name='"+fShortName+"']"); if(pFila.length==0) { - let HtmlFila='
'+fShortName+'
'; + let HtmlFila='
'+fShortName+'
'; $("#ItemBlockArea").append(HtmlFila); } @@ -231,99 +242,6 @@ function SortUI() } } - //w22 - for (let key in m_ProfileItem['filament']) { - let OneFila = m_ProfileItem['filament'][key]; - - //alert(JSON.stringify(OneFila)); - - let fWholeName = OneFila['name'].trim(); - let fShortName = GetFilamentShortname(OneFila['name']); - let fVendor = OneFila['vendor']; - if (fVendor == "QIDI") - continue; - let fType = OneFila['type']; - let fSelect = OneFila['selected']; - let fModel = OneFila['models'] - - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - - // if(OneFila['name'].indexOf("QIDI PA-CF")>=0) - // { - // alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ) - // - // let b=1+2; - // } - - let bFind = false; - //let bCheck=$("#MachineList input:first").prop("checked"); - if (fModel == '') { - bFind = true; - } - else { - //check in modellist - let nModelAll = ModelList.length; - for (let m = 0; m < nModelAll; m++) { - let sOne = ModelList[m]; - - let OneName = sOne['model']; - let NozzleArray = sOne["nozzle_selected"].split(';'); - - let nNozzle = NozzleArray.length; - - for (let b = 0; b < nNozzle; b++) { - let nowModel = OneName + "++" + NozzleArray[b]; - if (fModel.indexOf(nowModel) >= 0) { - bFind = true; - break; - } - } - } - } - - if (bFind) { - //Type - let LowType = fType.toLowerCase(); - if (!TypeHtmlArray.hasOwnProperty(LowType)) { - let HtmlType = '
' + fType + '
'; - - TypeHtmlArray[LowType] = HtmlType; - } - - //Vendor - let lowVendor = fVendor.toLowerCase(); - if (!VendorHtmlArray.hasOwnProperty(lowVendor)) { - let HtmlVendor = '
' + fVendor + '
'; - - VendorHtmlArray[lowVendor] = HtmlVendor; - } - - //Filament - let pFila = $("#ItemBlockArea input[vendor='" + fVendor + "'][filatype='" + fType + "'][name='" + fShortName + "']"); - if (pFila.length == 0) { - let HtmlFila = '
' + fShortName + '
'; - - $("#ItemBlockArea").append(HtmlFila); - } - else { - let strModel = pFila.attr("model"); - let strFilalist = pFila.attr("filalist"); - - pFila.attr("model", strModel + fModel); - pFila.attr("filalist", strFilalist + fWholeName + ';'); - } - - if (fSelect * 1 == 1) { - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - - $("#ItemBlockArea input[vendor='" + fVendor + "'][filatype='" + fType + "'][name='" + fShortName + "']").prop("checked", true); - SelectNumber++; - } - // else - // $("#ItemBlockArea input[vendor='"+fVendor+"'][model='"+fModel+"'][filatype='"+fType+"'][name='"+key+"']").prop("checked",false); - } - } - //Sort TypeArray let TypeAdvNum=FilamentPriority.length; for( let n=0;n-1 ) + { + DefaultMaterialString+=OneMode['materials']+';'; + } + } + + let DefaultMaterialArray=DefaultMaterialString.split(';'); + //alert(DefaultMaterialString); + + //Filament + let FilaNodes=$("#ItemBlockArea input"); + let nFilament=FilaNodes.length; + for(let m=0;m-1) + { + HasModel=true; + break; + } + } + + if(HasModel) + $(OneFF).prop("checked",true); + } + + ShowNotice(0); +} + function ShowNotice( nShow ) { if(nShow==0) diff --git a/resources/web/guide/23/index.html b/resources/web/guide/23/index.html index 9a00c08..cd49a7d 100644 --- a/resources/web/guide/23/index.html +++ b/resources/web/guide/23/index.html @@ -22,111 +22,105 @@
-
-
printer
-
-
all
- -
-
- -
-
filament type
-
-
all
- -
-
- -
-
vendor
-
-
all
- +
+
+
+ + printer +
+
+
+
all
+ +
-
- -
-
all
-
Clear all
-
- -
- -
+
+
+ + vendor +
+
+
+
all
+ +
+
+
+
+ + filament type +
+
+
+
all
+ +
+
+
+
+
Select All
+
+ +
+
diff --git a/resources/web/guide/css/dark.css b/resources/web/guide/css/dark.css index fc5aef3..8eb1aff 100644 --- a/resources/web/guide/css/dark.css +++ b/resources/web/guide/css/dark.css @@ -73,3 +73,8 @@ body { color: #BEBEC0; } + +/*----pull region---*/ +.CValues { + background-color: #535353; +} \ No newline at end of file diff --git a/resources/web/helio/helio_service_cn.html b/resources/web/helio/helio_service_cn.html new file mode 100644 index 0000000..ab25ae4 --- /dev/null +++ b/resources/web/helio/helio_service_cn.html @@ -0,0 +1,153 @@ + + + + + + + + +

您正准备开启一个来自Helio Additive的第三方软件服务功能!在确认使用此功能前,请仔细阅读以下声明。

+ +

除非特殊说明,拓竹科技仅对官方提供的软件功能提供支持。本软件中基于Helio Additive云端服务的切片评估和切片优化功能由Helio Additive负责开发、维护以及对外提供服务,其服务效果和可用性由Helio Additive负责。本服务的优化功能可能修改默认的打印指令,存在打印机损坏的风险。同时这些功能将收集必要的用户信息和数据以实现相关服务功能,并可能涉及订阅与付费,请访问Helio Addtive和参考Helio Additive隐私协议Helio Addtive 用户使用协议获取详细信息。

+ +

同时,您理解本产品是基于Helio Additive的服务“按原样”向您提供,拓竹不存在任何形式的明示或暗示担保,也无法控制服务效果,并且在适用法律允许的最大范围内,拓竹、其许可方/附属公司均不提供任何明示或暗示的陈述或保证,包括但不限于有关适销性、满意质量、适用于特定目的、准确性、保密权以及不侵犯第三方权利的保证。基于网络服务的特性,拓竹无法保证该服务随时可达,并且拓竹有权根据相关情况终止该服务。

+ +

您同意不使用本产品及相关更新内容从事以下行为:

+
    +
  1. 在Helio Additive和拓竹授权范围之外复制或使用本产品的任何一部分内容;
  2. +
  3. 企图破坏、绕过、改变、作废或者逃避和本产品相关的以及/或者属于本产品有机组成的一部分的任何数字版权管理系统;
  4. +
  5. 利用本软件和服务进行任何不当或违反法律的行为。
  6. +
+ +

当您确认开启此功能后,代表您已经确认和同意以上声明。

+ + + + \ No newline at end of file diff --git a/resources/web/helio/helio_service_en.html b/resources/web/helio/helio_service_en.html new file mode 100644 index 0000000..cf5caff --- /dev/null +++ b/resources/web/helio/helio_service_en.html @@ -0,0 +1,152 @@ + + + + + + + + +

You are about to enable a third-party software service feature from Helio Additive! Before confirming the use of this feature, please carefully read the following statements.

+ +

Unless otherwise specified, QIDI Tech only provides support for the software features officially provided. The slicing evaluation and slicing optimization features based on Helio Additive's cloud service in this software will be developed, operated, provided, and maintained by Helio Additive. Helio Additive is responsible for the effectiveness and availability of this service. The optimization feature of this service may modify the default print commands, posing a risk of printer damage. These features will collect necessary user information and data to achieve relevant service functions. Subscriptions and payments may be involved. Please visit Helio Additive and refer to the Helio Additive Privacy Agreement and Helio Additive User Agreement for detailed information.

+ +

Meanwhile, you understand that this product is provided to you "as is" based on Helio Additive's services, and QIDI Tech makes no express or implied warranties of any kind, nor can it control the service effects. To the fullest extent permitted by applicable law, QIDI Tech or its licensors/affiliates do not provide any express or implied representations or warranties, including but not limited to warranties regarding merchantability, satisfactory quality, fitness for a particular purpose, accuracy, confidentiality, and non-infringement of third-party rights. Due to the nature of network services, QIDI Tech cannot guarantee that the service will be available at all times, and QIDI Tech reserves the right to terminate the service based on relevant circumstances. You agree not to use this product and its related updates to engage in the following activities:

+ +
    +
  1. Copy or use any part of this product outside the authorized scope of Helio Additive and QIDI Tech;
  2. +
  3. Attempt to disrupt, bypass, alter, invalidate, or evade any Digital Rights Management system related to and/or an integral part of this product;
  4. +
  5. Using this software and services for any improper or illegal activities.
  6. +
+ +

When you confirm to enable this feature, it means that you have confirmed and agreed to the above statements.

+ + + + \ No newline at end of file diff --git a/resources/web/helio/helio_service_snote_cn.html b/resources/web/helio/helio_service_snote_cn.html new file mode 100644 index 0000000..6540bb0 --- /dev/null +++ b/resources/web/helio/helio_service_snote_cn.html @@ -0,0 +1,174 @@ + + + + + + + + +

特别说明

+ +

该内容由第三方 Helio Additive 提供和托管。所有数据收集和处理活动均由 Helio Additive 独立负责,QIDI Tech对此不承担任何责任。 点击“同意并继续”即表示您同意 Helio Additive的隐私协议

+ + + + + \ No newline at end of file diff --git a/resources/web/helio/helio_service_snote_en.html b/resources/web/helio/helio_service_snote_en.html new file mode 100644 index 0000000..1060f89 --- /dev/null +++ b/resources/web/helio/helio_service_snote_en.html @@ -0,0 +1,155 @@ + + + + + + + + +

Special Note

+ +

This service is provided and hosted by a third party, Helio Additive. All data collection and processing activities are solely managed by Helio Additive, and QIDI Tech assumes no responsibility in this regard. By clicking "Accept and proceed", you agree to Helio Additive's privacy policy.

+ + + + + \ No newline at end of file diff --git a/resources/web/helio/js/index.js b/resources/web/helio/js/index.js new file mode 100644 index 0000000..fc0bffd --- /dev/null +++ b/resources/web/helio/js/index.js @@ -0,0 +1,31 @@ +function IsInSlicer() { + let bMatch = navigator.userAgent.match(RegExp('BBL-Slicer', 'i')); + + return bMatch; +} + +function SendWXMessage(strMsg) { + let bCheck = IsInSlicer(); + + if (bCheck != null) { + window.wx.postMessage(strMsg); + } +} + +function OpenPPLink() { + SendWXMessage("helio_link_pp"); +} + +function OpenTouLink() { + SendWXMessage("helio_link_tou"); +} + +function OpenHomeLink() { + SendWXMessage("helio_link_home"); +} + +function getUrlParam(name) { + const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`); + const r = window.location.search.substr(1).match(reg); + return r ? decodeURIComponent(r[2]) : null; +} \ No newline at end of file diff --git a/resources/web/homepage3/css/dark.css b/resources/web/homepage3/css/dark.css index de8c0b4..835a3dd 100644 --- a/resources/web/homepage3/css/dark.css +++ b/resources/web/homepage3/css/dark.css @@ -104,7 +104,7 @@ html,body box-shadow: 0px 0px 3px #DCDCDC; } -#HotModel_Search_Btn img +.searchBtn img { filter: brightness(78%); } @@ -137,24 +137,24 @@ html,body filter: invert(1); } -#HotModel_Search_Bar +.searchBar { border: 1px solid #5C5C5C; background-color: #242428; } -#HotModel_Search_InputArea +.searchInputArea { } -#HotModel_Search_Input +.searchInput { background-color: #242428; caret-color: white; color: #FFFFFF; } -#HotModel_Search_Btn img +.searchBtn img { filter: invert(100%) brightness(100); } @@ -188,4 +188,17 @@ html,body #HideBtn:hover { background-color: rgba(70, 70, 71, 1); +} + +/*wiki.css*/ +.topicBlock{ + background-color: #000000; +} + +.card{ + background-color: #737373; +} + +.topicCard{ + background-color: #737373; } \ No newline at end of file diff --git a/resources/web/homepage3/css/online.css b/resources/web/homepage3/css/online.css index bf2fff6..75ac0e4 100644 --- a/resources/web/homepage3/css/online.css +++ b/resources/web/homepage3/css/online.css @@ -162,7 +162,7 @@ } /*-----Search Bar------*/ -#HotModel_Search_Bar +.searchBar { display: none; align-items: center; @@ -174,7 +174,7 @@ height: 40px; } -#HotModel_Search_InputArea +.searchInputArea { display: flex; align-items: center; @@ -183,7 +183,7 @@ border-radius: 22px 0px 0px 22px; } -#HotModel_Search_Input +.searchInput { height: 30px; flex-grow: 1; @@ -193,7 +193,7 @@ } -#HotModel_Search_Btn +.searchBtn { width: 60px; height: 100%; diff --git a/resources/web/homepage3/css/wiki.css b/resources/web/homepage3/css/wiki.css new file mode 100644 index 0000000..f7f05a6 --- /dev/null +++ b/resources/web/homepage3/css/wiki.css @@ -0,0 +1,281 @@ +html{ + padding-top: 28px !important; + padding-bottom: 0 !important; + padding-left: 0 !important; + padding-right: 0 !important; +} + +body{ + max-width: none !important; +} +/* -----------searchBlock----------- */ +.searchBlock{ + height: 60px; + padding: 0 88px; + position: relative; +} + +.searchBar{ + display: flex; + align-items: center; + border-radius: 22px; + border: 1px solid #C2C2C2; + flex-grow: 1; + background-color: #F7F7F7; + height: 40px; +} + +.searchBtn{ + width: 60px; + height: 100%; + border-radius: 0px 22px 22px 0px; + display: flex; + align-items: center; + justify-content: center; +} + +.searchInputArea{ + display: flex; + align-items: center; + flex-grow: 1; + padding: 0px 22px 0px 0px; + border-radius: 22px 0px 0px 22px; +} + +.searchInput{ + height: 30px; + flex-grow: 1; + outline: none; + font-size: 16px; + background-color: #F7F7F7; +} + +.searchResultArea{ + width: calc(100% - 176px); + max-height: 300px; + overflow-y: auto; + background-color: #FFFFFF; + position: absolute; + left: 88px; + right: 0; /* 与输入框同宽 */ + top: calc(100% - 6px); + z-index: 2; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); +} + +.searchResult{ + height: 30px; + border-bottom: #C2C2C2 1px solid; + line-height: 30px; + padding: 0px 16px; +} + +.searchResult:hover{ + background-color: #F0F0F0; + cursor: pointer; +} + +/* -----------academyBlock----------- */ +.academyBlock{ + position: relative; + padding-left: 48px; +} + +.titleBlock{ + display: flex; + padding-right: 48px; +} + +.title { + font-size: 24px; + font-weight: bold; + flex-grow: 1; +} +.more { + font-size: 16px; + cursor: pointer; +} +.academyContent{ + margin-top: 20px; + height: 268px; + display: flex; + align-items: center; + position: relative; + overflow: hidden; +} +.cardContent{ + display: flex; + height: 100%; + gap: 16px; + align-items:center; +} +.card { + width: 240px; + height: 100%; + border-radius: 12px; + background-color: #F8F8F8; + box-sizing: border-box; + padding: 36px 39px; + cursor: pointer; +} + +.cardImg { + width: 162px; +} + +.cardTitle { + font-weight: bold; + text-align: center; +} + +.switchBlock{ + position: absolute; + margin-top: 20px; + width: calc(100% - 48px); + z-index: 1; + display: flex; + justify-content: space-between; + align-items: center; + height: 268px; + pointer-events: none; +} + +/*share*/ +.leftSwitch{ + transform: rotate(180deg); +} +.leftSwitch:active { transform: rotate(180deg) translateY(-1px); } +.rightSwitch:active { transform: translateY(1px); } + +/*share*/ +.switchBtn{ + width: 40px; + height: 40px; + background-image: url("../img/switch_page.svg"); + background-repeat: no-repeat; + background-position: center center; + background-clip: content-box; + background-size: cover; + cursor: pointer; + opacity: 0.2; + pointer-events: auto; +} +.switchBtn:hover{ + opacity: 1; +} + +/* -----------tutorialBlock----------- */ +.tutorialBlock{ + margin-top: 48px; + position: relative; + padding-left: 48px; +} + +.tutorialContent{ + margin-top: 20px; + height: 290px; + display: flex; + align-items: center; + position: relative; + overflow: hidden; +} + +.videoCard{ + width: 352px; + height: 100%; + box-sizing: border-box; + cursor: pointer; +} + +.videoThumbnail{ + width: 352px; +} + +.tutorialSwitchBlock{ + position: absolute; + margin-top: 20px; + width: calc(100% - 48px); + z-index: 1; + display: flex; + justify-content: space-between; + align-items: center; + height: 290px; + pointer-events: none; +} + +/* -----------topicBlock----------- */ +.topicBlock{ + padding: 48px 48px; + background-color: #F8F8F8; + margin-top: 48px; +} + +.topicContent{ + display: flex; + flex-wrap: wrap; + margin-top: 20px; + gap: 12px; +} + +.topicCard{ + padding: 24px 24px; + flex: 1 1 300px; + min-width: 600px; + background-color: #FFFFFF; + box-sizing: border-box;; +} + +.topicTitle{ + font-size: 20px; + font-weight: bold; +} + +ul{ + margin-top: 18px; + padding-left: 18px; +} + +li { + color: #4479fb; + cursor: pointer; +} + +/* -----------footerBlock----------- */ +.footerBlock{ + width: 100%; + aspect-ratio: 2536 / 416; + background-image: url("../img/wiki_bottom_banner.png"); + background-repeat: no-repeat; + background-position: center center; + background-clip: content-box; + background-size: cover; + position: relative; +} + +.rabbit{ + width: 18%; + position: absolute; + bottom: 10%; + right: 20%; +} + +.bannerContent{ + height: 100%; + width: 50%; + padding: 32px 54px; + box-sizing: border-box; +} + +.bannerTitle{ + font-size: 20px; + font-weight: bold; +} + +.bannerBtn{ + border: 1px solid #000000; + border-radius: 3px; + padding: 10px 45px; + display: inline-block; + cursor: pointer; + margin-top: 24px; +} \ No newline at end of file diff --git a/resources/web/homepage3/home.html b/resources/web/homepage3/home.html index 8c9b312..57feaee 100644 --- a/resources/web/homepage3/home.html +++ b/resources/web/homepage3/home.html @@ -14,7 +14,8 @@ - + + @@ -33,12 +34,12 @@ Create new project
-