Smartcalls рдХреИрд╕реЗ Voximplant Kit рдмрдиреЗ - рд░реАрдмреНрд░рд╛рдВрдбрд┐рдВрдЧ рдФрд░ рдХрд┐рд▓рд░ рдлреАрдЪрд░реНрд╕


рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣рдо рд╕реНрдорд╛рд░реНрдЯ рдХреЙрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗ, рдЬреЛ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдерд╛, рдФрд░ рдЕрдм рдпрд╣ рд╣реБрдЖред рдЖрдЬ, рдХрдЯ рдХреЗ рддрд╣рдд, рд╣рдо UI / UX рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбреЗрдореЛ рдореЛрдб рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЪрдврд╝рдХрд░ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдордиреЗ JointJS рдХреЛ рдХреИрд╕реЗ рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ?


рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕реЗ - рдПрдХ рдирдпрд╛ рдирд╛рдо рдФрд░ URL, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Voximplant Kit рдЙрдкрдпреБрдХреНрдд рд▓рд┐рдВрдХ voximplant.com/kit рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рд╣рдордиреЗ рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рдЕрдм рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдЫрд╡рд┐

рдпрджреНрдпрдкрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рдорд╛рди рдмрдиреА рд╣реБрдИ рд╣реИ, рдЙрддреНрдкрд╛рдж рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рдлреА рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрди рдЧрдпрд╛ рд╣реИред рд╢реАрд░реНрд╖ рдореЗрдиреВ рдмрд╛рдИрдВ рдУрд░ рдЪрд▓рд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рджрд┐рдпрд╛ред

рдЫрд╡рд┐

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдФрд░ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рд╕рдореВрд╣рди рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрднрд┐рдпрд╛рди рдХрд╛рд░реНрдб, рдирдП рд╕рдВрдХреЗрддрдХ рд╕рд╣рд┐рдд - рдПрдХ рд╕рдлрд▓ рдХреЙрд▓ рдХреА рдФрд╕рдд рдЕрд╡рдзрд┐ рдФрд░ рдЦрд░реНрдЪ рдХреА рдЧрдИ рдХреБрд▓ рд░рд╛рд╢рд┐, рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЫрд╡рд┐

рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдорд┐рд▓рд╛, рдФрд░ рдбрд╛рдпрд▓реЙрдЧрдлрд╝реНрд▓реЛ, рдПрд╕рдЖрдИрдкреА, рдЧреНрд▓реЛрдмрд▓ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЯреИрдм рдкрд░, рдЖрдИрдбреА рдФрд░ рд╣реЛрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдЫрдВрдЯрд╛рдИ рджрд┐рдЦрд╛рдИ рджреАред

рдЫрд╡рд┐

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╣реБрдд рдХреБрдЫ рдирдпрд╛ рдФрд░ рдардВрдбрд╛! рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд╣реИ рд╕рдВрдкрд╛рджрдХ


рдбреЗрдореЛ рдореЛрдб (рд╕реНрдкреЙрдЗрд▓рд░: рдпрд╣ рдореБрдЦреНрдп рд╣рддреНрдпрд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ)ред


рд╢рд╛рдорд┐рд▓ рдмреНрд▓реЙрдХ рдХреЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж - рдПрдХ рдХреЙрд▓ (рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд▓реЙрдЧ) рдХрд╛ рдкрд░рд┐рдгрд╛рдо, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред

рдЫрд╡рд┐

рдЖрдк рдпрд╣рд╛рдВ рдбреЗрдореЛ рдореЛрдб рдХрд╛ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ Voximplant Kit рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдФрд░ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗред рд╕рдВрдкрд╛рджрдХ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ / рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ (рдиреАрдЪреЗ рджреА рдЧрдИ рдЫрд╡рд┐ рдореЗрдВ 1);
  • рдЧрд░реНрдо рдЪрд╛рдмрд┐рдпрд╛рдБ (2);
  • рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдХреЗрд▓ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдорд┐рдиреА рдореИрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЙрдкреА рдпрд╛ рдкреАрдПрдирдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ) (3);
  • рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдиреВ;
  • рдХреЙрдкреА рдмреНрд▓реЙрдХреНрд╕ - рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднреАрддрд░, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ (!) рд╡рд┐рднрд┐рдиреНрди рдЦрд╛рддреЛрдВ рдХреЗ рдмреАрдЪ рднреА;
  • рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдмреНрд▓реЙрдХ - рдПрдХ рд▓реЙрдХ рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ;
  • рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди - рдиреЗрддреНрд░рд╣реАрди рдЖрдк рдХрдИ "рд╕рдВрдмрдВрдзрд┐рдд" рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
  • рдирд╛рдо рдФрд░ рдкреНрд░рдпреБрдХреНрдд рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ;
  • "рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдореЗрдиреВ" рдмреНрд▓реЙрдХ - рдмрд╕ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ (рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ) рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдЫрд╡рд┐

рд╣рдо рдХрд╛рд░реНрдб рдкреНрд░рдХрдЯ рдХрд░рддреЗ рд╣реИрдВ


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдмреНрд▓реЙрдХ рдПрдиреАрдореЗрд╢рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдХреНрд▓рд╛рдЙрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХ рд╣рдорд╛рд░реА HTTP API рд╡рд┐рдзрд┐ - StartScenarios - рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╡реЛрдХреНрд╕рд┐рдордкреНрд▓рд╛рдВрдЯ рдХреНрд▓рд╛рдЙрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ media_access_url рдПрдбрд┐рдЯрд░ рдХреЛ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рд╕рдВрдкрд╛рджрдХ рд╣рд░ рд╕реЗрдХрдВрдб media_access_url рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ "рдпрд╛рддреНрд░рд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрдкрд╛рджрдХ рдЖрд╡рд╢реНрдпрдХ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЗрддрд┐рд╣рд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ JSON рд╡рд╕реНрддреБ рд╣реИ:

  • рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк;
  • idSource - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХ;
  • idTarget - рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ;
  • рдкреЛрд░реНрдЯ - рдкреЛрд░реНрдЯ (1 рдмреНрд▓реЙрдХ рд╕реЗ рдХрдИ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЫрд╡рд┐

рдЗрди рдХрд╕реНрдЯрдо рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдЪрд░ рдХреА рдорджрдж рд╕реЗ, рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рд╡рд╣ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдордЭрддрд╛ рд╣реИ? рдЬрдм рджреГрд╢реНрдп рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ (рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рдПрдХ рдЖрдИрдбреА рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ idSource / idTarget рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЬреЙрдЗрдВрдЯрдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдереЗред

рдЖрдЗрдП рдореБрдЦреНрдп рдЪрдпрдирдмреНрд▓реЙрдХ () рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╣рдо рдЖрдВрджреЛрд▓рди рдЗрддрд┐рд╣рд╛рд╕ (idSource, idTarget) рдХреА рд╕рд░рдгреА рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреИрд╕реЗ рд╣реА рд╣рдо рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдмрд┐рдВрджреБ рдкрд╛рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рджреЗрдЦреЗрдВ:

const link = this.editor.getTestLink(sourceCell, portId);

рдпрджрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдмрдВрдз рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдЪрд╛рд░ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЧреЗрдВрдж рдХреЛ рдЪреЗрддрди рдХрд░рддреЗ рд╣реИрдВ:
if (link) this.setLinkAnimation(link);

Select.tlock () рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕.testHistory рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдХрдИ рдмреНрд▓реЙрдХ рдкрд╛рд╕ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕.testHistory рдкрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ 700 ms (рдПрдХ рдмрд╛рд░ рдмреНрд▓реЙрдХ рд╕реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрдВрджреЛрд▓рди рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп) рдХрд╣рддреЗ рд╣реИрдВред

setTimeout(this.selectBlock, 700);

рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред SelectTestBlock рдФрд░ getTestLink рддрд░реАрдХреЛрдВ, рд▓рд╛рдЗрдиреЛрдВ 7 рдФрд░ 10 рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЕрдм рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ:

selectBlock ( ) : рд╢реВрдиреНрдп {
рдЕрдЧрд░ ( рдпрд╣ ред HistoryIndex < рдпрд╣ ред TestHistory ред рд▓рдВрдмрд╛рдИ ) {
const i = рдпрд╣ ред historyIndex ;
const targetCellId = this.testHistory[i].idTarget;
const sourceCellId = this.testHistory[i].idSource;
const portId = this.testHistory[i].port;
const targetCell = this.editor.selectTestBlock(targetCellId);
const sourceCell = this.editor.getCell(sourceCellId);
if (sourceCell && targetCell) {
const link = this.editor.getTestLink(sourceCell, portId);
if (link) this.setLinkAnimation(link);
}
this.historyIndex += 1;
setTimeout ( рдпрд╣ ред рдЪрдпрди , 700 ) ;
}
}
рдХрдЪреНрдЪреЗ рджреЗрдЦреЗрдВ GitHub рджреНрд╡рд╛рд░рд╛ рдХреЗ рд╕рд╛рде selectBlock.js рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреА рдЧрдИ


рдПрдХ рдХрдиреЗрдХреНрд╢рди рдбреНрд░рд╛ рдХрд░реЗрдВ


GetTestLink () рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ - рдпрд╣ getConnectedLinks () рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд JointJS рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдмреНрд▓реЙрдХ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд▓рд┐рдВрдХ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдПрдХ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕реНрд░реЛрдд рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдореВрд▓реНрдп portId рд╣реИ:

link = this.graph.getConnectedLinks(cell, {outbound : true}).find(item => {
     return item.get('source').port === portId;

рдлрд┐рд░, рдпрджрд┐ рдХреЛрдИ рд▓рд┐рдВрдХ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВ:

return link ? (link.toFront() && link) : null;

рд╡рд┐рдзрд┐ рдХреЛрдб:

getTestLink(sourceCell: Cell, portId: string): Link {
  let link = null;
  if (sourceCell && sourceCell.id) {
    let cell = null;
    if (sourceCell.type === 'ScenarioStart' || sourceCell.type === 'IncomingStart') {
      cell = this.getStartCell()
    } else {
      cell = this.graph.getCell(sourceCell.id);
    }
    link = this.graph.getConnectedLinks(cell, {outbound : true}).find(item => {
      return item.get('source').port === portId;
    });
  }
  return link ? (link.toFront() && link) : null;
}
 

рд░рдирд┐рдВрдЧ рдмреЙрд▓ рдХрд╛ рдПрдиреАрдореЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЙрдЗрдВрдЯрдЬреЗрд╕ ( рдбреЗрдореЛ рджреЗрдЦреЗрдВ ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд╣рдо рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ


рд╣рдо SelectTestBlock () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдФрд░ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ:

const center = cell.getBBox().center();

рдлрд┐рд░ рдмреНрд▓реЙрдХ рдХреЛ рдХрд▓рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setTestCell () рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

editor.tester.setTestCell(cell);

рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЬрд╝реВрдордЯреЙрд╕реЗрд▓ () рдлрд╝рдВрдХреНрд╢рди (рдпрд╣ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдХреЗрдВрджреНрд░ рдкрд░ рдЬрд╝реВрдо рдХрд┐рдпрд╛:

editor.paperController.zoomToCell(center, 1, false);

рд╡рд┐рдзрд┐ рдХреЛрдб:

selectTestBlock(id: string): Cell {
 const cell = (id === 'ScenarioStart') ? editor.tester.getStartCell() : editor.graph.getCell(id);
 if (cell) {
   const center = cell.getBBox().center();
   editor.tester.setTestCell(cell);
   editor.paperController.zoomToCell(center, 1, false);
 }
 return cell;
}

рд░рдВрдЧ рднрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐: рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рдПрд╕рд╡реАрдЬреА рддрддреНрд╡ рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдмреНрд▓реЙрдХ рд░рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВред рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛:

setTestCell(cell: Cell): void {
 const view = cell.findView(this.paper);
 if (view) view.el.classList.add('is-tested');
}

рдЪрд┐рдХрдирд╛ рдЬреВрдо


рдЕрдВрдд рдореЗрдВ, zoomToCell ()! рдЬреЙрдЗрдВрдЯрдЬреЗрдб рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рдЗрд╕реЗ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдПрд╕рд╡реАрдЬреА рдЯреИрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ; рдпрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ + рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд┐рдХрдиреА рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╕реАрдкреАрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

рд╣рдордиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╣реИрдХ рдХреА - рд╣рдордиреЗ рдЕрдкрдирд╛ рдлрдВрдХреНрд╢рди zoomToCell () рд▓рд┐рдЦрд╛, рдЬреЛ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрди CSS рдХреЗ рд░реВрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ WebGL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рди рдХреЗрд╡рд▓ рдПрдХреНрд╕рд╡рд╛рдИ рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рд╕реНрдХреЗрд▓ (рдЬрд╝реВрдо) рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

.Animate-viewport рд╡рд░реНрдЧ рдХреА рд╡рд╕реАрдпрдд-рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдкрддреНрддрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ GPU рдХреЗ рдЙрдкрдпреЛрдЧ рд╕рд╣рд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рдВрдХреНрд░рдордг рдЧреБрдг рдХреИрдирд╡рд╛рд╕ рдХреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЪрд┐рдХрдирд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:

.animate-viewport {
 will-change: transform;
 transition: transform 0.5s ease-in-out;

рд╣рдорд╛рд░реЗ рд╕рднреА рд╡рд┐рдзрд┐ рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:

public zoomToCell(center: g.Point, zoom: number, offset: boolean = true): void {
   this.updateGridSize();
   const currentMatrix = this.paper.layers.getAttribute('transform');
   //   svg-,        center
   //   ,     style
   const { a, b, c, d, e, f } = this.zoomMatrix(zoom, center, offset);
   //  FireFox    ,       
   this.paper.layers.style.transform = currentMatrix;
   //    FF  ,     ,    
   setTimeout(() => {
     //  CSS- .animate-viewport,    - transition;
     //    style      - transition
     this.paper.layers.classList.add('animate-viewport');
     this.paper.layers.style.transform = `matrix(${ a }, ${ b }, ${ c }, ${ d }, ${ e }, ${ f })`;
     const duration = parseFloat(getComputedStyle(this.paper.layers)['transitionDuration']) * 1000;
     //        style;
     //      joint
     setTimeout(() => {
       this.paper.layers.classList.remove('animate-viewport');
       this.paper.layers.style.transform = null;
       this.paper.matrix(newMatrix);
       this.paper.trigger('paper:zoom');
       this.updateGridSize();
       this.paper.trigger('paper:update');
     }, duration);
   }, 100);
 }

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ :) рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╡реНрд╣реЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛ рдерд╛ (рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ)ред рд╣рдо рдЖрдкрдХреЛ Voximplant Kit рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рд╕рдлрд▓ рд╡рд┐рдХрд╛рд╕ рдХреА рдХрд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ!

All Articles