亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩一区二区影院| 亚洲成人在线免费| 日韩免费高清电影| 欧美三电影在线| 91在线无精精品入口| 国内外精品视频| 欧美aaaaaa午夜精品| 亚洲午夜av在线| 亚洲女同ⅹxx女同tv| 中文字幕在线不卡| 日本一区二区电影| 久久你懂得1024| 26uuu久久综合| 一本在线高清不卡dvd| 91亚洲资源网| 91麻豆免费看| 欧美综合一区二区三区| 在线观看亚洲一区| 欧美日本乱大交xxxxx| 欧美精品丝袜久久久中文字幕| 99麻豆久久久国产精品免费| 色综合天天综合| 欧美三级在线播放| 91精品国产麻豆国产自产在线| 26uuu国产在线精品一区二区| 国产精品美女久久久久久久| 亚洲综合色丁香婷婷六月图片| 秋霞av亚洲一区二区三| 成人精品视频一区二区三区| 欧美肥大bbwbbw高潮| 欧美精品一区二区三区很污很色的| 国产精品全国免费观看高清| 亚洲精品视频在线| 国产精品一区专区| 91精品国产色综合久久不卡蜜臀| 欧美日本不卡视频| 久久婷婷成人综合色| 亚洲国产成人tv| 色综合久久88色综合天天| 在线影院国内精品| 中文字幕一区二区三区av| 国产人成一区二区三区影院| 青青草伊人久久| av午夜精品一区二区三区| 精品国产a毛片| 日本一区二区免费在线观看视频| 亚洲一区二区美女| aaa欧美色吧激情视频| 国产香蕉久久精品综合网| 午夜视频一区在线观看| 一本高清dvd不卡在线观看 | 日日夜夜免费精品| 成人美女在线观看| 久久久久久久久岛国免费| 国产成人在线免费观看| 欧美韩日一区二区三区| www..com久久爱| 亚洲综合视频在线观看| 欧美婷婷六月丁香综合色| 亚洲国产你懂的| 色香蕉成人二区免费| 一区二区三区在线观看网站| 成人18精品视频| 亚洲精品国产一区二区精华液| 欧美日韩一级片在线观看| 日本三级亚洲精品| 中文字幕中文字幕在线一区| 91黄色免费网站| 成人一区在线看| 亚洲3atv精品一区二区三区| 精品人在线二区三区| 成人的网站免费观看| 免费亚洲电影在线| 午夜欧美在线一二页| 国产黄人亚洲片| 日本视频在线一区| 一区二区日韩电影| 亚洲欧洲在线观看av| 2017欧美狠狠色| 欧美日韩高清一区二区三区| 成人精品免费网站| 成人福利视频在线看| 国产91在线观看丝袜| 日韩电影在线看| 日韩精品视频网| 精品成人私密视频| 日韩精品一区二区三区中文不卡| 欧美色网站导航| 欧美日韩国产免费| 91麻豆自制传媒国产之光| 日韩福利电影在线观看| 韩国v欧美v日本v亚洲v| 国产成人啪免费观看软件| 国产福利精品一区| 91欧美一区二区| 欧美日韩一区在线观看| 欧美丝袜丝交足nylons图片| 欧美日韩高清在线| 精品国产乱码久久久久久免费| 国产亚洲一区二区三区四区| 亚洲欧美日韩中文字幕一区二区三区| 亚洲色图欧美激情| 午夜欧美在线一二页| 亚洲免费三区一区二区| 日韩电影在线观看一区| 美女脱光内衣内裤视频久久网站| 久久超级碰视频| 99精品黄色片免费大全| 亚洲综合一二三区| 国产成人午夜精品影院观看视频 | 国产在线精品国自产拍免费| av激情亚洲男人天堂| 欧美va日韩va| 怡红院av一区二区三区| 成人免费电影视频| 欧美精三区欧美精三区| 亚洲人成影院在线观看| 成人免费av网站| 久久影院视频免费| 久久不见久久见免费视频7 | 国产在线视频一区二区三区| 99久久精品免费精品国产| 亚洲精品在线免费观看视频| 日韩国产一区二| 日韩欧美高清dvd碟片| 美女视频黄频大全不卡视频在线播放| 欧美在线影院一区二区| 中文字幕va一区二区三区| 91福利在线导航| 国产成人免费9x9x人网站视频| 亚洲资源中文字幕| 国产欧美精品一区二区色综合 | 三级一区在线视频先锋 | 欧美日韩国产综合草草| 成人精品在线视频观看| 国产综合久久久久影院| 亚洲一区二区影院| 国产日韩欧美a| 国产日韩欧美精品电影三级在线 | 国产精品一区二区久激情瑜伽| 日韩不卡手机在线v区| 亚洲成人午夜影院| 亚洲欧美二区三区| 国产精品久久久久一区| 久久青草国产手机看片福利盒子| 欧美一区二区三区在线视频| 欧美午夜精品一区| 欧美色视频在线| 在线影院国内精品| 欧美日韩在线三级| 欧美疯狂做受xxxx富婆| 日韩亚洲国产中文字幕欧美| 91精品国产综合久久精品麻豆| 91精品婷婷国产综合久久竹菊| 欧美精品亚洲二区| 久久蜜桃av一区二区天堂| 久久嫩草精品久久久久| 国产欧美日韩久久| 亚洲老妇xxxxxx| 日本成人在线视频网站| 国产精品99久久久久久久女警 | 26uuu久久天堂性欧美| 国产精品久久久久一区二区三区| 国产精品伦理一区二区| 婷婷久久综合九色综合伊人色| 国产在线精品视频| 色综合视频在线观看| 2022国产精品视频| 亚洲曰韩产成在线| 激情深爱一区二区| 欧美视频完全免费看| 国产蜜臀97一区二区三区| 亚洲国产欧美在线| 99精品国产热久久91蜜凸| 日韩你懂的在线观看| 亚洲激情图片qvod| av在线不卡免费看| 久久久99精品久久| 亚洲第一综合色| 在线中文字幕不卡| 中文字幕一区二区不卡| 亚洲猫色日本管| 色94色欧美sute亚洲13| www国产成人免费观看视频 深夜成人网| 亚洲你懂的在线视频| 精品中文字幕一区二区| 欧美性videosxxxxx| 国产精品女同一区二区三区| 国产精品69毛片高清亚洲| 久久久久久毛片| 久久精品国产99国产| 精品人在线二区三区| 精品中文字幕一区二区| 欧美sm美女调教| 久草这里只有精品视频| 国产成人在线看| 欧美国产成人在线| 亚洲日本一区二区| 久久国产生活片100| 日韩精品三区四区|