SWFShape->drawLineTo()
(PHP 4 >= 4.0.5)
SWFShape->drawLineTo() — Draws a line
Описание
SWFShape
void drawLineTo
( int $x
, int $y
)
Внимание
Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.
swfshape->setrightfill() draws a line (using the current line style, set by swfshape->setline()) from the current pen position to point (x ,y ) in the shape's coordinate space.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Генерация нетекстовых MIME форматов
- Ming (flash)
- Функция SWFShape::addFill() - Adds a solid fill to the shape
- Функция SWFShape::__construct() - Creates a new shape object
- Функция SWFShape::drawArc() - Draws an arc of radius r centered at the current location, from angle startAngle to angle endAngle measured clockwise from 12 o'clock
- Функция SWFShape::drawCircle() - Draws a circle of radius r centered at the current location, in a counter-clockwise fashion
- Функция SWFShape::drawCubic() - Draws a cubic bezier curve using the current position and the three given points as control points
- Функция SWFShape::drawCubicTo() - Draws a cubic bezier curve using the current position and the three given points as control points
- Функция SWFShape::drawCurve() - Draws a curve (relative)
- Функция SWFShape::drawCurveTo() - Draws a curve
- Функция SWFShape::drawGlyph() - Draws the first character in the given string into the shape using the glyph definition from the given font
- Функция SWFShape::drawLine() - Draws a line (relative)
- Функция SWFShape::drawLineTo() - Draws a line
- Функция SWFShape::movePen() - Moves the shape's pen (relative)
- Функция SWFShape::movePenTo() - Moves the shape's pen
- Функция SWFShape::setLeftFill() - Sets left rasterizing color
- Функция SWFShape::setLine() - Sets the shape's line style
- Функция SWFShape::setRightFill() - Sets right rasterizing color
Коментарии
If you have the error <<drawlineto(): failed assertion>> :
Ming can't handel drawLineToTo if the distance from the previous point is over 8276.7 pixels (mesured empiriticaly) in the vertical or horizontal axis
Why ?
Coordinates in SWF are in twips (20 twips = 1 pixel)
and 2^16 = 65536 = 3276.8 * 20
So we can assume that coordinates of drawLineTo in SWf are relatives to the previous point, and take 16 bits (plus the sign).
Or it can be ming that brings this limitation
These measures have been made with ming_setScale(20.00000000);
This issue doesn't seem to occur with movePenTo
Here's how you can handle this :
<?php
function splitForMing($x1, $y1, $x2, $y2) {
$res = array();
$nbSegments = floor(max(abs($x2 - $x1), abs($y2 - $y1)) / 3276) + 1;
for($i = 1; $i < $nbSegments ; $i++) { // ($nbSegments - 1) iterations in the loop : the 1st point is assumed to have been already processed ; the last one is already known
$res[] = array($x1 + ($x2 - $x1) * $i / $nbSegments, $y1 + ($y2 - $y1) * $i / $nbSegments);
}
$res[] = array($x2, $y2);
return $res;
}
ming_setScale(20.00000000);
ming_useswfversion(6); // With ming 0.3
$movie = new SWFMovie();
$movie->setDimension(20000,8000);
$movie->setBackground(0xcc, 0xcc, 0xcc );
$movie->setRate(24);
$polygone = new SWFShape();
$polygone->setRightFill($polygone->addFill(0xff, 0, 0));
$polygone->setLine(20, 0x7f, 0, 0);
$polygone->movePenTo(10000, 500); // No split needed for movePenTo
$tmp = splitForMing(10000, 500, 15000, 500);
for( $i = 0 ; $i < count($tmp) ; $i++) {
$polygone->drawLineTo($tmp[$i][0], $tmp[$i][1]); // C
}
$tmp = splitForMing(15000, 500, 15000, 5500);
for( $i = 0 ; $i < count($tmp) ; $i++) {
$polygone->drawLineTo($tmp[$i][0], $tmp[$i][1]); // C
}
$tmp = splitForMing(15000, 5500, 10000, 500);
for( $i = 0 ; $i < count($tmp) ; $i++) {
$polygone->drawLineTo($tmp[$i][0], $tmp[$i][1]); // C
}
$polygone->drawLineTo(15000, 15000);
$ajout = $movie->add($polygone);
$ajout->setName("test");
$movie->output();
?>