模型批量旋转

今天介绍下超图三维模型批量旋转

先看一下绕某一点旋转180度的效果,右边旋转前,左边旋转后

该demo主要涉及两个知识点

1. 临时数据源的创建

2. 批量旋转的实现

界面如下:

可以选场景中的模型图层(仅支持地理坐标系),可以自定义旋转衷心,也可以以数据集中心点为旋转中心。
可以另存,也可以保存至源数据。

临时数据源的创建

创建临时数据源

临时数据源主要保存一些中间数据,在关闭工作空间时不会保存临时数据源的数据。

主要代码:

     private void CreateTempDatasource()
    {
        foreach (Datasource item in m_sceneControl.Scene.Workspace.Datasources)
        {
            //存在临时数据源时就不需要创建
            if (item.ConnectionInfo.Server.Contains(m_datasrouceName))
            {
                m_tempDatasource = item;
                break;
            }
        }
        if (m_tempDatasource == null)
        {
            DatasourceConnectionInfo info = new DatasourceConnectionInfo();
            //string m_datasrouceName = "临时数据源"
            info.Alias = m_datasrouceName;
            // string m_server=":memory:"
            info.Server = m_server;
            m_tempDatasource = m_sceneControl.Scene.Workspace.Datasources.Create(info);
        }
    }

创建的临时数据源如下(tempData_为创建的临时数据集):

值得注意的是,当临时数据源过大时会在本地(指定路径,具体路径记不清楚了)创建一个文本型数据原,但是关闭工作空间会自动删除该文件。故在判断数据源是不是临时数据源不能只判断server。

创建临时数据集

 //创建临时数据集
    private DatasetVector CreateDatasetVector(Datasource desDatasource, string datasetName, bool isTemp)
    {
        DatasetVector dataset = null;
        if (isTemp)
        {
            desDatasource.Datasets.Delete(datasetName);
        }
        DatasetVectorInfo info = new DatasetVectorInfo();
        info.Name = datasetName;
        info.Type = DatasetType.Model;
        dataset = m_tempDatasource.Datasets.Create(info);
        dataset.PrjCoordSys = new PrjCoordSys(PrjCoordSysType.EarthLongitudeLatitude);
        return dataset;
    }

new PrjCoordSys(PrjCoordSysType.EarthLongitudeLatitude)表示wgs84地理坐标系,单位为度。

批量旋转的实现

模型批量旋转的实现实际上分为三步:

  • 1.记录模型初始位置并将模型移动到旋转中心
  • 2.旋转模型(RotationZ)
  • 3.旋转模型原始点(绕旋转中心)并将模型移动到旋转后的点

主要代码:

  private void ModelRotate(DatasetVector selectedDataset, DatasetVector desDataset)
    {
        //旋转角度
        double rorationAngle = (double)m_numericUpDownAngle.Value;
        //目标数据集           
        Recordset srcRecordset = selectedDataset.GetRecordset(false, CursorType.Static);
        //desDataset临时数据集
        Recordset desRecordset = desDataset.GetRecordset(false, CursorType.Dynamic);
        desRecordset.Batch.Begin();
        m_progressBar.Maximum = srcRecordset.RecordCount;
        m_progressBar.Value = 0;
        while (!srcRecordset.IsEOF)
        {
            GeoModel3D model3D = srcRecordset.GetGeometry() as GeoModel3D;
            if (model3D == null)
            {
                srcRecordset.MoveNext();
                m_progressBar.Value++;
                continue;
            }
            // 1.记录模型初始位置并将模型移动到旋转中心
            Point3D originalPos = model3D.Position;
            model3D.Position = new Point3D(m_rotateCenter.X, m_rotateCenter.Y, 0);
            // 2.旋转模型(RotationX)
            model3D.RotationZ += rorationAngle;
            // 3.旋转模型原始点(绕旋转中心)并将模型移动到旋转后的点
            GeoPoint newPos = new GeoPoint(originalPos.X, originalPos.Y);
            newPos.Rotate(m_rotateCenter, rorationAngle);
            model3D.Position = new Point3D(newPos.X, newPos.Y, originalPos.Z);

            desRecordset.AddNew(model3D);
            m_progressBar.Value++;
            srcRecordset.MoveNext();
        }
        desRecordset.Batch.Update();
        desRecordset.Dispose();
        desRecordset = null;
        srcRecordset.Dispose();
        srcRecordset = null;
    }

由于三维没有绕某一点旋转,所以需要将点转成二维点(GeoPoint2D)再旋转。

好了,就介绍这么多了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
为了训练一个旋转验证码模型,我们可以使用Python语言和一些机器学习库。首先,我们需要收集一个旋转验证码的数据集。这可以通过爬取网站上的验证码或者手动创建验证码来实现。 然后,我们需要预处理数据集。首先,我们可以将验证码图片转换为灰度图像,以减少处理的复杂性。接下来,可以使用图像处理技术来去除噪声、增强对比度等操作,以提高模型的性能。 接着,我们可以使用Python中的机器学习库,如Tensorflow或PyTorch,来构建一个卷积神经网络(CNN)模型。CNN模型在图像识别任务中表现优异。 我们可以使用训练集和验证集来训练和调整模型。训练集用于训练模型的参数,而验证集用于评估模型的性能。训练过程中,我们可以使用反向传播算法和优化器来更新模型的参数,以最小化预测和实际标签之间的差异。 在训练过程中,我们可以采用批量训练的方式,即每次使用一批样本来更新参数。这可以提高训练效率和模型的泛化能力。 训练完成后,我们可以使用测试集来评估模型的综合性能。测试集是独立于训练和验证集的数据,可以更好地反映模型在实际环境中的表现。 最后,我们可以使用该模型对新的验证码图像进行预测。可以通过将图像输入到训练好的模型中,并使用模型的输出来判断验证码的内容。 总之,在Python中训练一个旋转验证码模型需要收集数据集、预处理数据、构建CNN模型、训练和调整模型参数、评估模型性能,并最终使用模型进行验证码识别预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值