亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? line.c

?? STM32+Grlib
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*****************************************************************************
//
// line.c - Routines for drawing lines.
//
// Copyright (c) 2007-2010 Texas Instruments Incorporated.  All rights reserved.
// Software License Agreement
// 
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
// 
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
// 
// This is part of revision 5821 of the Stellaris Graphics Library.
//
//*****************************************************************************

#include "driverlib/debug.h"
#include "grlib/grlib.h"

//*****************************************************************************
//
//! \addtogroup primitives_api
//! @{
//
//*****************************************************************************

//*****************************************************************************
//
//! Draws a horizontal line.
//!
//! \param pContext is a pointer to the drawing context to use.
//! \param lX1 is the X coordinate of one end of the line.
//! \param lX2 is the X coordinate of the other end of the line.
//! \param lY is the Y coordinate of the line.
//!
//! This function draws a horizontal line, taking advantage of the fact that
//! the line is horizontal to draw it more efficiently.  The clipping of the
//! horizontal line to the clipping rectangle is performed within this routine;
//! the display driver's horizontal line routine is used to perform the actual
//! line drawing.
//!
//! \return None.
//
//*****************************************************************************
void
GrLineDrawH(const tContext *pContext, long lX1, long lX2, long lY)
{
    long lTemp;

    //
    // Check the arguments.
    //
    ASSERT(pContext);

    //
    // If the Y coordinate of this line is not in the clipping region, then
    // there is nothing to be done.
    //
    if((lY < pContext->sClipRegion.sYMin) ||
       (lY > pContext->sClipRegion.sYMax))
    {
        return;
    }

    //
    // Swap the X coordinates if the first is larger than the second.
    //
    if(lX1 > lX2)
    {
        lTemp = lX1;
        lX1 = lX2;
        lX2 = lTemp;
    }

    //
    // If the entire line is outside the clipping region, then there is nothing
    // to be done.
    //
    if((lX1 > pContext->sClipRegion.sXMax) ||
       (lX2 < pContext->sClipRegion.sXMin))
    {
        return;
    }

    //
    // Clip the starting coordinate to the left side of the clipping region if
    // required.
    //
    if(lX1 < pContext->sClipRegion.sXMin)
    {
        lX1 = pContext->sClipRegion.sXMin;
    }

    //
    // Clip the ending coordinate to the right side of the clipping region if
    // required.
    //
    if(lX2 > pContext->sClipRegion.sXMax)
    {
        lX2 = pContext->sClipRegion.sXMax;
    }

    //
    // Call the low level horizontal line drawing routine.
    //
    DpyLineDrawH(pContext->pDisplay, lX1, lX2, lY, pContext->ulForeground);
}

//*****************************************************************************
//
//! Draws a vertical line.
//!
//! \param pContext is a pointer to the drawing context to use.
//! \param lX is the X coordinate of the line.
//! \param lY1 is the Y coordinate of one end of the line.
//! \param lY2 is the Y coordinate of the other end of the line.
//!
//! This function draws a vertical line, taking advantage of the fact that the
//! line is vertical to draw it more efficiently.  The clipping of the vertical
//! line to the clipping rectangle is performed within this routine; the
//! display driver's vertical line routine is used to perform the actual line
//! drawing.
//!
//! \return None.
//
//*****************************************************************************
void
GrLineDrawV(const tContext *pContext, long lX, long lY1, long lY2)
{
    long lTemp;

    //
    // Check the arguments.
    //
    ASSERT(pContext);

    //
    // If the X coordinate of this line is not within the clipping region, then
    // there is nothing to be done.
    //
    if((lX < pContext->sClipRegion.sXMin) ||
       (lX > pContext->sClipRegion.sXMax))
    {
        return;
    }

    //
    // Swap the Y coordinates if the first is larger than the second.
    //
    if(lY1 > lY2)
    {
        lTemp = lY1;
        lY1 = lY2;
        lY2 = lTemp;
    }

    //
    // If the entire line is out of the clipping region, then there is nothing
    // to be done.
    //
    if((lY1 > pContext->sClipRegion.sYMax) ||
       (lY2 < pContext->sClipRegion.sYMin))
    {
        return;
    }

    //
    // Clip the starting coordinate to the top side of the clipping region if
    // required.
    //
    if(lY1 < pContext->sClipRegion.sYMin)
    {
        lY1 = pContext->sClipRegion.sYMin;
    }

    //
    // Clip the ending coordinate to the bottom side of the clipping region if
    // required.
    //
    if(lY2 > pContext->sClipRegion.sYMax)
    {
        lY2 = pContext->sClipRegion.sYMax;
    }

    //
    // Call the low level vertical line drawing routine.
    //
    DpyLineDrawV(pContext->pDisplay, lX, lY1, lY2, pContext->ulForeground);
}

//*****************************************************************************
//
//! Computes the clipping code used by the Cohen-Sutherland clipping algorithm.
//!
//! \param pContext is a pointer to the drawing context to use.
//! \param lX is the X coordinate of the point.
//! \param lY is the Y coordinate of the point.
//!
//! This function computes the clipping code used by the Cohen-Sutherland
//! clipping algorithm.  Clipping is performed by classifying the endpoints of
//! the line based on their relation to the clipping region; this determines
//! those relationships.
//!
//! \return Returns the clipping code.
//
//*****************************************************************************
static long
GrClipCodeGet(const tContext *pContext, long lX, long lY)
{
    long lCode;

    //
    // Initialize the clipping code to zero.
    //
    lCode = 0;

    //
    // Set bit zero of the clipping code if the Y coordinate is above the
    // clipping region.
    //
    if(lY < pContext->sClipRegion.sYMin)
    {
        lCode |= 1;
    }

    //
    // Set bit one of the clipping code if the Y coordinate is below the
    // clipping region.
    //
    if(lY > pContext->sClipRegion.sYMax)
    {
        lCode |= 2;
    }

    //
    // Set bit two of the clipping code if the X coordinate is to the left of
    // the clipping region.
    //
    if(lX < pContext->sClipRegion.sXMin)
    {
        lCode |= 4;
    }

    //
    // Set bit three of the clipping code if the X coordinate is to the right
    // of the clipping region.
    //
    if(lX > pContext->sClipRegion.sXMax)
    {
        lCode |= 8;
    }

    //
    // Return the clipping code.
    //
    return(lCode);
}

//*****************************************************************************
//
//! Clips a line to the clipping region.
//!
//! \param pContext is a pointer to the drawing context to use.
//! \param plX1 is the X coordinate of the start of the line.
//! \param plY1 is the Y coordinate of the start of the line.
//! \param plX2 is the X coordinate of the end of the line.
//! \param plY2 is the Y coordinate of the end of the line.
//!
//! This function clips a line to the extents of the clipping region using the
//! Cohen-Sutherland clipping algorithm.  The ends of the line are classified
//! based on their relation to the clipping region, and the codes are used to
//! either trivially accept a line (both end points within the clipping
//! region), trivially reject a line (both end points to one side of the
//! clipping region), or to adjust an endpoint one axis at a time to the edge
//! of the clipping region until the line can either be trivially accepted or
//! trivially rejected.
//!
//! The provided coordinates are modified such that they reside within the
//! extents of the clipping region if the line is not rejected.  If it is
//! rejected, the coordinates may be modified during the process of attempting
//! to clip them.
//!
//! \return Returns one if the clipped line lies within the extent of the
//! clipping region and zero if it does not.
//
//*****************************************************************************
static long
GrLineClip(const tContext *pContext, long *plX1, long *plY1, long *plX2,
           long *plY2)
{
    long lCode, lCode1, lCode2, lX, lY;

    //
    // Compute the clipping codes for the two endpoints of the line.
    //
    lCode1 = GrClipCodeGet(pContext, *plX1, *plY1);
    lCode2 = GrClipCodeGet(pContext, *plX2, *plY2);

    //
    // Loop forever.  This loop will be explicitly broken out of when the line
    // is either trivially accepted or trivially rejected.
    //
    while(1)
    {
        //
        // If both codes are zero, then both points lie within the extent of
        // the clipping region.  In this case, trivally accept the line.
        //

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情久久久久久久久久久久久久久久| 欧美三级电影网| 欧美乱妇20p| 国产精品久久久久永久免费观看 | 国产精品亚洲综合一区在线观看| 一本色道久久综合精品竹菊| 久久亚洲综合色一区二区三区| 亚洲精品国产a久久久久久| 国产在线一区二区综合免费视频| 欧美二区在线观看| 亚洲男女一区二区三区| 成人精品一区二区三区四区| 欧美成人aa大片| 免费三级欧美电影| 欧美亚洲一区二区在线| 亚洲色图制服诱惑| 成人永久免费视频| 久久久久久久综合狠狠综合| 日韩电影免费一区| 欧美精品久久久久久久多人混战 | 日韩国产在线观看| 欧美亚洲另类激情小说| 亚洲另类在线视频| 成人h精品动漫一区二区三区| 精品久久免费看| 久久国产欧美日韩精品| 宅男噜噜噜66一区二区66| 亚洲综合在线电影| 欧美午夜电影一区| 亚洲综合免费观看高清在线观看| 日本高清不卡视频| 亚洲一级片在线观看| 欧美中文字幕一区| 五月婷婷欧美视频| 日韩欧美综合一区| 国模冰冰炮一区二区| 久久精品这里都是精品| 国产精品99久久久久久久vr | aaa亚洲精品一二三区| 中文字幕在线一区免费| 99re66热这里只有精品3直播 | 国产精品美女久久久久aⅴ| 国产高清一区日本| 国产精品久久久久婷婷二区次| av午夜精品一区二区三区| 一区二区在线观看视频在线观看| 在线影视一区二区三区| 日本午夜精品一区二区三区电影| 欧美一级黄色大片| 国产激情精品久久久第一区二区| 日本一区二区三区免费乱视频| www.综合网.com| 亚洲国产日韩一区二区| 91精品国产色综合久久| 国产一区二区三区免费观看| 国产精品国产自产拍在线| 欧美综合天天夜夜久久| 日韩成人精品在线观看| 国产日韩影视精品| 在线免费观看一区| 狠狠色丁香婷婷综合| 亚洲欧美另类久久久精品2019 | 色香色香欲天天天影视综合网| 亚洲国产美国国产综合一区二区| 日韩欧美一二三区| 99在线视频精品| 首页亚洲欧美制服丝腿| 欧美国产精品劲爆| 欧美日韩国产区一| av亚洲精华国产精华| 日本欧美一区二区| 亚洲精品福利视频网站| 精品人在线二区三区| 色婷婷av一区| 国产一区二区剧情av在线| 亚洲国产精品麻豆| 亚洲国产精华液网站w| 欧美日韩国产另类一区| 99热国产精品| 国产在线精品国自产拍免费| 亚洲一区二区三区四区五区黄| 久久婷婷综合激情| 欧美精品久久久久久久多人混战| 成人免费视频一区二区| 美女脱光内衣内裤视频久久网站 | 精品国一区二区三区| 欧美亚洲一区三区| 成人sese在线| 国产一区二区91| 美女一区二区视频| 亚洲123区在线观看| 亚洲乱码中文字幕| 国产午夜三级一区二区三| 91精品福利在线一区二区三区 | 欧美性xxxxxxxx| 91香蕉视频在线| 国产成人aaa| 国产一区999| 久久9热精品视频| 麻豆国产精品视频| 视频一区二区中文字幕| 午夜精品久久久久久久99水蜜桃 | 国产精品三级视频| 久久综合久色欧美综合狠狠| 欧美一区二区精品在线| 欧美精品一二三| 欧美三级电影一区| 欧美日韩国产美| 欧美午夜精品久久久久久超碰 | 精品国产亚洲在线| 日韩一区二区三| 日韩无一区二区| 欧美电影免费观看高清完整版在 | 精品一区二区在线看| 免费成人小视频| 美女爽到高潮91| 久久99九九99精品| 国产激情视频一区二区三区欧美 | 欧美一区二区三级| 欧美一卡在线观看| 欧美大白屁股肥臀xxxxxx| 日韩久久免费av| 久久伊人中文字幕| 国产精品污污网站在线观看| 国产精品伦一区二区三级视频| 国产精品每日更新在线播放网址 | 蜜臀av性久久久久蜜臀aⅴ四虎| 日一区二区三区| 国产一区在线精品| 99视频精品免费视频| 在线精品视频小说1| 欧美高清一级片在线| 欧美mv日韩mv国产网站app| 国产日韩欧美综合一区| 1区2区3区欧美| 亚洲永久精品国产| 青青青伊人色综合久久| 国产在线精品国自产拍免费| 北条麻妃一区二区三区| 在线观看亚洲精品| 日韩欧美一区电影| 日韩毛片一二三区| 午夜精品久久久| 国产1区2区3区精品美女| 色噜噜狠狠成人中文综合| 欧美一区2区视频在线观看| 国产精品无遮挡| 亚洲午夜一二三区视频| 国产一区二区三区国产| 一本大道久久a久久综合| 4438x亚洲最大成人网| 国产农村妇女毛片精品久久麻豆 | 日韩精品一区二区三区在线 | 狠狠色丁香婷婷综合| 一本大道久久a久久综合| 日韩精品一区二区三区在线 | 欧美在线观看视频在线| 精品处破学生在线二十三| 亚洲欧美一区二区三区极速播放| 日韩成人伦理电影在线观看| 91在线码无精品| 亚洲精品一线二线三线| 亚洲最新在线观看| 国产成人在线免费观看| 欧美情侣在线播放| 国产精品久久久久9999吃药| 日韩av二区在线播放| 一本一本大道香蕉久在线精品 | 精品少妇一区二区三区| 一区二区三区资源| 国产精品99久久久久久久vr| 6080国产精品一区二区| 中文字幕日韩一区| 国产98色在线|日韩| 欧美一区二区三区视频免费| 一区二区三区国产精品| 99久久伊人精品| 国产免费观看久久| 国产在线麻豆精品观看| 欧美一区二区三区喷汁尤物| 亚洲国产一区视频| 欧美制服丝袜第一页| 中文字幕亚洲电影| 成人av免费在线播放| 国产欧美在线观看一区| 国产在线麻豆精品观看| 欧美变态凌虐bdsm| 麻豆精品一区二区av白丝在线| 欧美日韩亚洲综合一区二区三区 | 最新国产の精品合集bt伙计| 国产在线看一区| 久久免费国产精品| 国产美女视频一区| www国产成人免费观看视频 深夜成人网| 亚洲国产精品麻豆| 欧美日韩成人综合在线一区二区| 亚洲v中文字幕| 99视频热这里只有精品免费| 亚洲国产高清不卡| 成人免费观看视频|