Created
July 9, 2024 18:59
-
-
Save nanjizal/574ec51fc7d5b0eb3149358223fdffb0 to your computer and use it in GitHub Desktop.
Mitre support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public inline | |
function mitreDraw( ax_: Float, ay_: Float, bx_: Float, by_: Float, width_: Float, clockWise: Bool ){ | |
// bx_, by_ currently not required... but incase. | |
// work out the opposite point to j, ie the mitre corner. | |
// calculate the difference from centre | |
var deltaX = ax_ - jx; | |
var deltaY = ay_ - jy; | |
// reflect j in relation to a | |
var mitreCornerX = ax_ + deltaX; | |
var mitreCornerY = ay_ + deltaY; | |
// calculate distance between mitreCorner and centre a. | |
var distXY = Math.sqrt(deltaX*deltaX + deltaY*deltaY); | |
// calculate the miter cut off distance. | |
var mitreVal = mitreLimit*width_/2; | |
// see if it is applicable | |
var mitreLimited = distXY > mitreVal; | |
// find the ratio for extending the lines to the mitre cut off. | |
var mitreRatio = mitreVal/distXY; | |
if( clockWise ){ | |
if( !mitreLimited ) { // simple case no mitre cropped | |
triangle2DFill( dxOld, dyOld, mitreCornerX, mitreCornerY, exPrev, eyPrev ); | |
} else { | |
var deltaX1 = dxOld + mitreRatio*( mitreCornerX - dxOld ); | |
var deltaY1 = dyOld + mitreRatio*( mitreCornerY - dyOld ); | |
var deltaX2 = exPrev + mitreRatio*( mitreCornerX - exPrev ); | |
var deltaY2 = eyPrev + mitreRatio*( mitreCornerY - eyPrev ); | |
trace( 'delta ' + deltaX1 + ' ' + deltaX2 + ' ' + deltaY1 + ' ' + deltaY2 ); | |
// split mitre cropped into two triangle from the first line to the crop | |
triangle2DFill( dxOld, dyOld, deltaX1, deltaY1, deltaX2, deltaY2 ); | |
// from the first line to second crop point and then to second line | |
triangle2DFill( dxOld, dyOld, deltaX2, deltaY2, exPrev, eyPrev ); | |
} | |
// draw normal triangle corner | |
triangle2DFill( dxOld, dyOld, exPrev, eyPrev, jx, jy ); | |
} else { | |
if( !mitreLimited ) { // see notes above | |
triangle2DFill( exOld, eyOld, mitreCornerX, mitreCornerY, dxPrev, dyPrev ); | |
} else { | |
var deltaX1 = exOld + mitreRatio*( mitreCornerX - exOld ); | |
var deltaY1 = eyOld + mitreRatio*( mitreCornerY - eyOld ); | |
var deltaX2 = dxPrev + mitreRatio*( mitreCornerX - dxPrev ); | |
var deltaY2 = dyPrev + mitreRatio*( mitreCornerY - dyPrev ); | |
trace( 'delta ' + deltaX1 + ' ' + deltaX2 + ' ' + deltaY1 + ' ' + deltaY2 ); | |
triangle2DFill( exOld, eyOld, deltaX1, deltaY1, deltaX2, deltaY2 ); | |
triangle2DFill( exOld, eyOld, deltaX2, deltaY2, dxPrev, dyPrev ); | |
} | |
triangle2DFill( exOld, eyOld, dxPrev, dyPrev, jx, jy ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment