ObjectARX中的坐标系以及坐标转换

news2024/11/14 19:04:36

1 AutoCAD中的坐标系种类

  1. WCS
    World Coordinate System. The “reference” coordinate system. All other coordinate systems are defined relative to the WCS, which never changes. Values measured relative to the WCS are stable across changes to other coordinate systems.
    世界坐标系(WCS),即“参考”坐标系。其它所有的坐标系都是相对WCS定义的,WCS是永远不改变的。无论坐标系统如何变化,相对于WCS测量的值均是不变的。

  2. UCS
    User Coordinate System. The “working” coordinate system. All points passed to AutoCAD commands, including those returned from AutoLISP routines and external functions, are points in the current UCS (unless the user precedes them with a * at the Command prompt). If you want your application to send coordinates in the WCS, ECS, or DCS to AutoCAD commands, you must first convert them to the UCS by calling acedTrans().
    用户坐标系统(UCS),即“工作”坐标系。所有传到AutoCAD命令的点坐标——包括那些从ObjectArx程序和外部功能返回的——都是当前UCS坐标系统下的值(除了在命令提示符后用户在前面加了个*的点)。因此,当你想给AutoCAD命令发送坐标值时,请将WCS, ECS 或者 DCS 下的坐标值转换为UCS下坐标值。

  3. ECS
    Entity Coordinate System. Point values returned by acdbEntGet() are expressed in this coordinate system relative to the entity itself. Such points are useless until they are converted into the WCS, current UCS, or current DCS, according to the intended use of the entity. Conversely, points must be translated into an ECS before they are written to the database by means of acdbEntMod() or acdbEntMake().
    实体坐标系。acdbEntGet()返回的点值在相对于实体本身的坐标系中表示。这些点坐标需要根据预期用途转换为WCS、UCS或DCS系统下的值。相反,在通过acdbEntMod()或acdbEntMake()将点写入数据库之前,必须将点坐标转换到ECS中。

  4. DCS
    Display Coordinate System. The coordinate system into which objects are transformed before they are displayed. The origin of the DCS is the point stored in the AutoCAD TARGET system variable, and its Z axis is the viewing direction. In other words, a viewport is always a plan view of its DCS. These coordinates can be used to determine where something appears to the AutoCAD user.
    When the from and to integer codes are 2 and 3, in either order, 2 indicates the DCS for the current model space viewport, and 3 indicates the DCS for paper space (PSDCS). When the 2 code is used with an integer code other than 3 (or another means of specifying the coordinate system), it is assumed to indicate the DCS of the current space (paper space or model space), and the other argument is assumed to indicate a coordinate system in the current space.
    显示坐标系统即对象在显示前被转换的坐标系统。DCS的原点是被存在AutoCAD系统变量TARGET中的点,它的Z轴就是视图方向。换句话说,一个视口始终是它的DCS平面图。这些坐标可用于决定物体是从哪里显示给AutoCAD用户的。
    当acedTrans()中的from和to参数是2和3时,无论两者顺序如何,2表示当前模型空间的DCS坐标,3表示图纸空间的DCS。当参数为2和非3的参数被使用时,2被认为时当前空间的DCS坐标,另一个参数为该值在当前空间对应的坐标系。

  5. PSDCS
    Paper Space DCS. This coordinate system can be transformed only to or from the DCS of the currently active model space viewport. This is essentially a 2D transformation, where the X and Y coordinates are always scaled and are offset if the disp argument is 0. The Z coordinate is scaled but is never translated; it can be used to find the scale factor between the two coordinate systems. The PSDCS (integer code 2) can be transformed only into the current model space viewport: if the from argument equals 3, the to argument must equal 2, and vice versa.
    图纸空间PDCS。此坐标系只能从当前活动模型空间视口的DCS转入或转出。这本质上是一个2D变换,如果disp参数为0,则X和Y坐标总是缩放偏移。Z坐标是缩放的,但从不平移;它可以用来找到两个坐标系之间的比例因子。PSDCS(整数代码2)只能转换到当前模型空间视口中:如果from参数等于3,则to参数必须等于2,反之亦然。

2 坐标转换

acedTrans()函数的作用是将一个点或位移从一个坐标系转换到另一个坐标系统。它采用一个点自变量pt,它可以被解释为三维点或三维位移向量。这是由一个称为disp的参数控制的,如果pt被视为位移向量,则disp必须为非零;否则,pt将被视为一个点。转换后的点或向量在通过引用调用的结果参数中返回,该参数与pt一样,类型为ads_point。

int acedTrans(
    const ads_point pt, 
    const struct resbuf * from, 
    const struct resbuf * to, 
    int disp, 
    ads_point result
);

指定两个坐标系(from和to)的参数都是结果缓冲区。from参数指定表示pt的坐标系,to参数指定结果的坐标系。from和to参数都可以通过以下任何方式指定坐标系:

  • 整数值(restype == RTSHORT),指定了WCS,UCS或者DCS。 整数值包含几下几种:

    • 0——World (WCS)
    • 1——User (current UCS)
    • 2——Display:DCS of current viewport when used with code 0 or 1.DCS of current model space viewport when used with code 3
    • 3——Paper space DCS (PSDCS; used only with code 2)
  • 实体名 (restype == RTENAME),该方式指定了实体的ECS。对平面实体来说,ECS可能和WCS不同。如果相同,在ECS与WCS的转换是相同的。

  • 三维拉伸向量(restype==RT3DPOINT),这是指定实体ECS的另一种方法。拉伸矢量始终以世界坐标表示;(0,0,1)的拉伸向量指定WCS本身。

下面的例子将一个点坐标从WCS下转到UCS下。

ads_point pt, result; 
struct resbuf fromrb, torb; 

pt[X] = 1.0; 
pt[Y] = 2.0; 
pt[Z] = 3.0; 

fromrb.restype = RTSHORT; 
fromrb.resval.rint = 0; // WCS  

torb.restype = RTSHORT; 
torb.resval.rint = 1; // UCS  

// disp == 0 indicates that pt is a point:  
acedTrans(pt, &fromrb, &torb, FALSE, result);

3 关于DCS的特殊说明

3.1 DCS的详细说明

ObjectARX关于DCS的说明有以下几点。

  1. Eye Coordinate System
    Every viewport has a vantage point, tilt, aim, and a field of view on the WCS. This is summed up in one transform, the viewport’s view transform. This transform converts world coordinate geometry into view coordinate geometry where the viewport’s view is down its Z-axis looking toward more negative values of Z. Eye coordinates do not contain the perspective transform.
  2. Display Coordinate System
    The Display Coordinate System (DCS) is the coordinate system into which objects are transformed before they are displayed. If not in perspective mode, the DCS is equivalent to the eye coordinate system. If perspective mode is active, the perspective transform must be performed on the eye coordinates to get display coordinates. The perspective transform gives the effect of geometry getting smaller the farther away it is from the camera.

根据以上叙述,DCS坐标系在非透视模式下和视觉坐标系是相同的,因此DCS可以理解为:原点为视图的目标点,Z轴为垂直当前平面的方向,X轴应为肉眼看向视图的右侧方向(请注意,不是UCS的X轴方向)

3.2 视图的摆动角度是什么

视图有很多参数,可以通过CAD帮助文档的DView命令进行查看。
在这里插入图片描述
通过输入view命令,可以查看当前模型空间的视图参数。例如下图。
在这里插入图片描述
这里面只重点说明一个参数,摆动角度。这是其帮助文档的说明。
在这里插入图片描述
从说明可以看出,扭转角度是0°时就是视线水平向右的方向,而这个方向就是DCS的X轴方向。扭转角度旋转的原点是DCS的原点(而不是当前视图的中心点),另外,旋转的并不是DCS坐标系,而是视图的观察角度。举个例子:假如把观察者看作是照相机,照相机在给桌面上的底片拍照,扭转角度为30°时就是把底片逆时针转动30°。扭转角度实际上是视图绕着观察视线旋转的角度,而且,旋转的不是观察者,而是被观察对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx之正则表达式、location匹配简介以及rewrite重写

引言 在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器&#xff…

力扣---LeetCode203. 移除链表元素

文章目录 前言203. 移除链表元素链接方法一:直接删除1.1 注意:1.2 各种情况的流程图:方法二:遍历将非val的节点尾插2.1 流程图:2.2 注意: 总结 前言 你坚持的东西 总有一天会反过来拥抱你 本章的内容是力扣…

智安网络|数据安全问题频发,首推云墙·网站综合防御系统

近期,企业数据安全问题频发,数据安全依旧是企业目前面临的重大风险之一。作为网络安全公司,智安网络以专业的技术团队和丰富的行业经验,为企业和个人提供安全可靠的数据保护服务 案例一: 大学生学习软件超星学习通(下称…

JUC高级十二-ReentrantLock、ReentrantReadWriteLock、StampedLock

无锁→独占锁→读写锁→邮戳锁 1. 关于锁的大厂面试题 你知道Java里面有哪些锁?你说你用过读写锁,锁饥饿问题是什么?有没有比读写锁更快的锁?StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗&#xff1…

Spring的创建与Bean对象的存取

文章目录:一.Spring项目的创建1.先创建maven项目 2.添加国内源 3.添加spring依赖 4.创建spring配置文件 5.创建启动类 二.Bean对象的创建和读取1.Bean对象的创建与存储方式(1)类注解 (2)方法注解 (3&#x…

Java中的容器大杂烩-集合

Java中的容器大杂烩-集合 一、 集合引入二、集合框架体系三 、Collection 接口四 、List集合4.1 ArrayList类4.2 LinkedList类4.3 Vector类4.4 ArrayList 、 LinkedList 和 Vector区别 五 、Set集合5.1 HashSet类5.2 TreeSet5.3 LinkedHashSet类 六、List和Set区别七 、Map集合…

制造业巨头遭黑客勒索400万美元,企业如何防范勒索病毒攻击?

4月7日,台湾电脑制造商微星(简称MSI)发布公开声明,证实其部分网络信息系统遭受了勒索病毒攻击。一个名为“Money Message”的新网络黑客团伙称其从微星的网络系统中窃取了1.5TB的数据,其中包括微星数据库的屏幕截图、源…

YAML /Excel /CSV?自动化测试测试数据管理应用,测试老鸟总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试无论是…

webhub123 前端技术社区和技术交流学习网站导航

整理了学习前端技术可以参考学习和技术交流的一些网站集合,全部收录到 webhub123 前端技术社区和技术交流学习网站导航http://​www.webhub123.com/#/home/detail?projectHashid30929575&ownerUserid22053727 整理后的效果如下,我们已经按照不同类…

React Props

state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。 所以,有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。 props 使用 Demo.js : import React from reactfunct…

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络) 目录 智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络…

数据集合注入

集合注入 前面我们已经能完成引入数据类型和简单数据类型的注入,但是还有一种数据类型集合,集合中既可 以装简单数据类型也可以装引用数据类型,对于集合,在Spring中该如何注入呢? 先来回顾下,常见的集合类型有哪些…

Vue电商项目--应用开发详解

vue-cli脚手架初始化项目 首先,页面上新建一个文件夹。然后打开命令端口 vue create app 选择Default ([Vue 2] babel, eslint) 然后把项目拖拽到vscode中。项目目录看一下 脚手架项目的目录 node_modules:放置项目依赖的地方 public:一般放置一些共用的静态资源&a…

数据采集方式有哪些,都有什么特点?

随着中国社会的进一步发展,各行各业都得到了一定程度的进步。进入21世纪以来,大数据、人工智能等行业的飞速发展,极大的带动全社会进步。但是,在一些传统行业内部,还存在这落后的东西,例如数据采集还是沿用…

【机器学习】P24 随机森林算法(1) 实现 “鸢尾花” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现分类鸢尾花 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble Learning)方法,它由多个决策树组成,是一种分类、回…

OS实战笔记(8)-- 设置基本OS基本工作环境

本笔记会搭建OS实战所需的虚拟机环境,主要是创建好虚拟机,设置虚拟机启动硬盘,在启动盘上安装Grub。 由于本专题是个人在业余时间除了Unity学习之外做的,没有时间和精力去解答具体的问题。本笔记中的实验个人在做的过程中除了遇到…

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

整理现有的wiki私服项目

文章目录 核心功能现有项目wikijsBookStackmediawikiTiddlyWikigollumdokuwikixwiki 总结参考 核心功能 查找编辑 在线/离线内链【核心】代码高亮图表、表达式生成多媒体(图片、音频、视频)管理 协作(用户管理模式/github模式) 修…

JVM 关键点详解

一,JVM 的主要组成部分及其作用 JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎); 两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载): 根据给定的全限定名类…

【Linux网络】部署YUM仓库及NFS服务

部署YUM仓库及NSF服务 一、YUM仓库1.1、YUM仓库概述1.2准备安装来源1.3在软件仓库加载非官方RPM包组1.4yum与apt 二、配置yam源与制作索引表2.1配置FTP源2.2配置国内在线yum源2.3在线源与本地源同时使用2.4建立软件包索引关系表的三种方法 三、nfs共享存储服务3.1安装软件&…