Cutting demo - as3 [message #2211] |
Tue, 06 March 2012 15:23  |
sokerr Messages: 6 Registered: August 2011 |
Junior Member |
|
|
Maybe help for someone.
I know english not very well.
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import nape.geom.GeomPoly;
import nape.geom.GeomPolyList;
import nape.geom.Vec2;
import nape.util.BitmapDebug;
/**
* use debug_nape_m8.2_r6
*/
[Frame(factoryClass="Preloader")]
[SWF(width="600",height="450",frameRate="31",background="#000000")]
public class Main extends Sprite
{
public function Main():void
{
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var debug:BitmapDebug = new BitmapDebug(600, 450, 0x333333);
var handlesize:int = 4;
var segsize:int = 6;
var subsize:int = 2;
var poly:GeomPoly = new GeomPoly([new Vec2(100, 100), new Vec2(200, 150), new Vec2(300, 100), new Vec2(100, 300), new Vec2(200, 300), new Vec2(300, 300)]);
var seg0:Vec2 = new Vec2(150, 50);
var seg1:Vec2 = new Vec2(150, 225);
addChild(debug.display);
function render():void
{
debug.clear();
debug.drawFilledPolygon(poly, 0x555555);
debug.drawPolygon(poly, 0x999999);
var size:int = poly.size();
while (size--)
{
poly.skip_forward(1);
var p:Vec2 = poly.current();
debug.drawFilledCircle(p, handlesize, 0x666666);
debug.drawCircle(p, handlesize, 0xaaaaaa);
}
var simples:GeomPolyList = poly.simple_decomposition();
simples.foreach(function(poly:GeomPoly):void
{
var polys:GeomPolyList = poly.cut(seg0, seg1, true, true);
var sum:Number = 0.0;
polys.foreach(function(p:GeomPoly):void
{
sum += p.area();
var max:Number = 0.0;
var size:int = p.size();
while (size--)
{
p.skip_forward(1);
var q:Vec2 = p.current();
var dot:Number = q.sub(seg0).cross(seg1.sub(seg0));
if (dot * dot > max * max)
max = dot;
}
debug.drawFilledPolygon(p, max > 0 ? 0x55aa55 : 0xaa55aa);
debug.drawPolygon(p, max > 0 ? 0x99ff99 : 0xff99ff);
size = p.size();
while (size--)
{
p.skip_forward(1);
q = p.current();
debug.drawFilledCircle(q, subsize, max > 0 ? 0x66bb66 : 0xbb66bb);
debug.drawCircle(q, subsize, max > 0 ? 0xaaffaa : 0xffaaff);
}
});
});
debug.drawLine(seg0, seg1, 0xffffff);
debug.drawFilledCircle(seg0, segsize, 0xcc0000);
debug.drawCircle(seg0, segsize, 0xff0000);
debug.drawFilledCircle(seg1, segsize, 0xcc);
debug.drawCircle(seg1, segsize, 0xff);
debug.flush();
}
render();
var mdrag:Function = null;
stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void
{
var mp:Vec2 = new Vec2(mouseX, mouseY);
var s0:Number = mp.sub(seg0).length;
var s1:Number = mp.sub(seg1).length;
if (s0 < segsize || s1 < segsize)
{
var seg:Vec2 = s0 < segsize ? seg0 : seg1;
var delta:Vec2 = mp.sub(seg);
mdrag = function(mp:Vec2):void
{
seg.set(mp.sub(delta));
render();
};
return;
}
var size:int = poly.size();
while (size--)
{
poly.skip_forward(1);
var p:Vec2 = poly.current();
if (mp.sub(p).length < handlesize)
{
var delta2:Vec2 = mp.sub(p);
mdrag = function(mp:Vec2):void
{
p.set(mp.sub(delta2));
render();
}
return;
}
}
});
stage.addEventListener(MouseEvent.MOUSE_UP, function():void
{
mdrag = null
});
stage.addEventListener(MouseEvent.MOUSE_MOVE, function():void
{
if (mdrag == null)
return;
var mp:Vec2 = new Vec2(mouseX, mouseY);
mdrag(mp);
});
}
}
}
|
|
|
|
| Re: Cutting demo - as3 [message #2213 is a reply to message #2212] |
Tue, 06 March 2012 15:53   |
dELtaluca Messages: 2225 Registered: July 2010 Location: Malden Rushett, Surrey |
Senior Member Administrator |
|
|
done.
I can probably add a GeomPoly::foreach function like the Nape lists to neaten it up a bit in AS3 instead of using the iterator(), or doing it like tried with skip_forward and current()
I created nape!
|
|
|
|
|
| Re: Cutting demo - as3 [message #2413 is a reply to message #2410] |
Mon, 26 March 2012 23:06   |
dELtaluca Messages: 2225 Registered: July 2010 Location: Malden Rushett, Surrey |
Senior Member Administrator |
|
|
by tried do you mean the one up on the website, or compiled yourself?
The one on the website is compiled to flash version 10, so even with 11.2 player you would still be able to view it.
On the other hand if your flash player version is so old as to not be able to use alchemy opcodes at all, you might get such an error.
I created nape!
|
|
|
|
| Re: Cutting demo - as3 [message #2539 is a reply to message #2531] |
Thu, 05 April 2012 22:25   |
dELtaluca Messages: 2225 Registered: July 2010 Location: Malden Rushett, Surrey |
Senior Member Administrator |
|
|
Yeh, it was changed from swf-version 13 to swf-version 11 now (aka 10.1 i think)
I created nape!
|
|
|
|
| Re: Cutting demo - as3 [message #2556 is a reply to message #2555] |
Fri, 06 April 2012 20:40  |
dELtaluca Messages: 2225 Registered: July 2010 Location: Malden Rushett, Surrey |
Senior Member Administrator |
|
|
Release versions of 11.2 don't have the issue since, they licensing rules regarding alchemy + stage3d have come into effect.
I created nape!
|
|
|