用四分之一个圆的图片绘制整个圆(镜像效果)

目的:为了节省一部分的运行内存

效果:用四分之一个圆的图片  绘制出一整个圆

代码如下:

using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(CanvasRenderer))]
//继承Graphic
public class Test : Graphic
{
    [SerializeField]
    Texture2D texture2D;//图片

    protected override void OnPopulateMesh(VertexHelper vh)
    {
        var r = GetPixelAdjustedRect();//动态获取图片的大小
        var vLeftDown = new Vector4(r.x, r.y, r.x + r.width / 2, r.y + r.height / 2);//左下角图片的位置
        var vRightDown = new Vector4(r.x + r.width / 2, r.y, r.x + r.width, r.y + r.height / 2);//右下角图片的位置
        var vLeftUp = new Vector4(r.x, r.y + r.height / 2, r.x + r.width / 2, r.y + r.height);//左上角图片的位置
        var vRightUp = new Vector4(r.x + r.width / 2, r.y + r.height / 2, r.x + r.width, r.y + r.height);//右上角图片的位置

        Color32 color32 = color;


        vh.Clear();

        //添加点以及根据UV值赋图片
        vh.AddVert(new Vector3(vLeftDown.x, vLeftDown.y), color32, new Vector2(0f, 1f));
        vh.AddVert(new Vector3(vLeftDown.x, vLeftDown.w), color32, new Vector2(0f, 0f));
        vh.AddVert(new Vector3(vLeftDown.z, vLeftDown.w), color32, new Vector2(1f, 0f));
        vh.AddVert(new Vector3(vLeftDown.z, vLeftDown.y), color32, new Vector2(1f, 1f));


        vh.AddVert(new Vector3(vRightDown.x, vRightDown.y), color32, new Vector2(1f, 1f));
        vh.AddVert(new Vector3(vRightDown.x, vRightDown.w), color32, new Vector2(1f, 0f));
        vh.AddVert(new Vector3(vRightDown.z, vRightDown.w), color32, new Vector2(0f, 0f));
        vh.AddVert(new Vector3(vRightDown.z, vRightDown.y), color32, new Vector2(0f, 1f));


        vh.AddVert(new Vector3(vLeftUp.x, vLeftUp.y), color32, new Vector2(0f, 0f));
        vh.AddVert(new Vector3(vLeftUp.x, vLeftUp.w), color32, new Vector2(0f, 1f));
        vh.AddVert(new Vector3(vLeftUp.z, vLeftUp.w), color32, new Vector2(1f, 1f));
        vh.AddVert(new Vector3(vLeftUp.z, vLeftUp.y), color32, new Vector2(1f, 0f));


        vh.AddVert(new Vector3(vRightUp.x, vRightUp.y), color32, new Vector2(1f, 0f));
        vh.AddVert(new Vector3(vRightUp.x, vRightUp.w), color32, new Vector2(1f, 1f));
        vh.AddVert(new Vector3(vRightUp.z, vRightUp.w), color32, new Vector2(0f, 1f));
        vh.AddVert(new Vector3(vRightUp.z, vRightUp.y), color32, new Vector2(0f, 0f));

        //根据下标绘制图片
        vh.AddTriangle(0, 1, 2);
        vh.AddTriangle(2, 3, 0);

        vh.AddTriangle(4, 5, 6);
        vh.AddTriangle(6, 7, 4);

        vh.AddTriangle(8,9,10);
        vh.AddTriangle(10,11,8);

        vh.AddTriangle(12,13,14);
        vh.AddTriangle(14,15,12);
    }

    /// <summary>
    /// 重写Graphic中的mainTexture
    /// </summary>
    public override Texture mainTexture
    {
        get { return texture2D; }
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
ObjectArx是Autodesk AutoCAD中的一种增强应用框架(Application Programmer Interface, API),它为开发者提供了扩展AutoCAD功能的强大工具。使用ObjectArx,你可以创建自定义命令或对象,比如用多段线(Polyline)绘制特定形状,如四分之一。 要在ObjectArx中用多段线绘制四分之一,你需要执行以下步骤: 1. **初始化环境**:首先,确保已经包含了ObjectArx库,并且在AutoCAD环境中创建了一个适当的应用上下文(如`AcDbAppServices`)。 2. **创建多段线数据点**:确定你要绘制四分之一的中心点和半径。四分之一的两个端点将是直径两端点的一半,然后根据这些点构造一组线性的多段线数据点。 3. **设置起点和终点**:将起点设置在多段线的第一个点,终点设置在第二点,形成一个直角边。例如,对于半径为r的,第一个点可以是(0, 0),第二个点是(r, r)。 4. **添加弧形部分**:使用`AcDbLine`对象或`AcDbArc`对象的一部分,从当前直线的终点开始,绘制弧形到周上指定的角度。通常,对于四分之一,角度将是90度(对应π/2弧度)。 5. **连接回起点**:完成弧形后,返回到起始点,结束多段线。这样就形成了一个封闭的四分之一。 6. **插入到图纸**:最后,将这条多段线作为新的图形对象插入到AutoCAD的工作空间。 以下是一个简化的伪代码示例: ```cpp AcDbLine* lineStart = new AcDbLine(AcGePoint3d(0, 0, 0), AcGePoint3d(radius, radius, 0)); AcGePoint3d arcEndPoint; AcGeDouble angleInRadians = M_PI_2; // 四分之一角度 // 创建并添加弧形 AcDbArc* arc = new AcDbArc(lineStart->getStart(), lineStart->getEnd(), AcGeVector3d::DownDir(), angleInRadians); arc->close(); // 使弧线封闭 arc->extendToStart(); // 连接回起点 // 创建多段线并包含直线和弧线 AcDbPolyline poly; poly.append(*lineStart); poly.append(*arc); // 插入到图纸 AcDbObjectId id = acad.Database()->Insert(poly); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值