![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Здравствуйте.
Столкнулся со следующим: ЗАДАЧА - динамически изготовить маску (сложной формы с наклонными и множеством углов) Есть некая картинка и нужно вырезать ее часть (хотя бы одну), рисуя мышкой выделение. Я делаю следующим образом: создаю программно мувик - при нажатии по нему запоминаю точку и добавляю в массив, сразу после нажатия в цикле отрисовываю на этом мувике по точкам из массива прямые (это выделение). Затем, по окончании "выделения", (допустим это будет разница по Х и У между первой точкой и любой, которая меньше 3 пикселей) мне нужно то, что внутри выделенного сделать маской, залить и применить эту маску к основной фото (из которой вырезать часть пытаюсь). Все бы ничего но, например, в рисунках где много изгибов (чертежи допустим) я никак не могу правильно залить (beginFill) Вот часть кода... _root.createEmptyMovieClip("VirtMC_container",_root.getNextHighestDepth()); LoadedPict=_root.VirtMC_container.createEmptyMovieCl("VirtMC",_root.VirtMC_container.getNextHighestDepth()); HOLST=LoadedPict.createEmptyMovieClip("hlst",LoadedPict.getNextHighestDepth()); PiesRamka=LoadedPict.createEmptyMovieClip("ramka",LoadedPict.getNextHighestDepth()); SelectionMC=LoadedPict.createEmptyMovieClip("Sel",LoadedPict.getNextHighestDepth()); MASK=_root.VirtMC_container.createEmptyMovieClip("VirtMC_mask",_root.VirtMC_container.getNextHighestDepth()); MASK.onPress=function(){ var tmp_Point=new Array(); tmp_Point[0]=HOLST._xmouse; tmp_Point[1]=HOLST._ymouse; var canAddPoint=true; for(m=0;m<MaskPointsArray.length;m++){ if(Math.abs(MaskPointsArray[m][0]-tmp_Point[0])< 5 and Math.abs(MaskPointsArray[m][1]-tmp_Point[1])< 5) { canAddPoint=false; break; } } if(canAddPoint){ MaskPointsArray.push(tmp_Point); _root.drawSelection(); }else{ MaskPointsArray.push(tmp_Point); _root.drawSelection(); _root.fillSelection(); // пока здесь ничего нет //inf.text+="Близкие точки !\n"; } } _root.drawSelection=function(){ MASK.beginFill(0xFF0000,30); SelectionMC.lineStyle(2, 0xFF0000, 100); for(u=0;u<(MaskPointsArray.length-1);u++){ SelectionMC.moveTo(MaskPointsArray[u][0],MaskPointsArray[u][1]); SelectionMC.lineTo(MaskPointsArray[u+1][0],MaskPointsArray[u+1][1]); if(u<>0){ MASK.moveTo(MaskPointsArray[0][0],MaskPointsArray[0][1]); MASK.lineTo(MaskPointsArray[u][0],MaskPointsArray[u][1]); MASK.lineTo(MaskPointsArray[u+1][0],MaskPointsArray[u+1][1]); } } // вообще эти предидущие строчки не решают проблемы но хот как-то маска заполняет выделение хотя и неправильно // если вместо MASK.moveTo(MaskPointsArray[0][0],MaskPointsArray[0][1]) сделать MASK.moveTo(MaskPointsArray[u-1][0],MaskPointsArray[u-1][1]) тоже естественно неправильно маска заполняется MASK.endFill(); LoadedPict.setMask(MASK); } Возможно, кто-то уже работал плотно с динамически создаваемыми масками - подскажите наиболее правильный способ - мой уж очень плох да и не работает как нужно. На рисунке карсное- это выделение (его не замкнул я специально). Заранее спасибо ![]() Последний раз редактировалось djyamato; 27.06.2009 в 20:44. |
![]() |
Часовой пояс GMT +4, время: 11:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|