为什么圆心坐标(键10)不相对于DXF数据中的原点?

问题描述 投票:2回答:2

我需要这些信息来创建过滤器。

因此,假设我将网格设置为1,然后将其捕捉为1,然后将原点放置在UCS中。

然后我以中心5, 0画一个圆。

这是我得到的:

(
    (-1 . <Entity name: 1f3dbb9d580>)
    (0 . "CIRCLE")
    (330 . <Entity name: 1f3dbba51f0>)
    (5 . "270")
    (100 . "AcDbEntity")
    (67 . 0)
    (410 . "Model")
    (8 . "0")
    (100 . "AcDbCircle")
    (10 2495.0 1180.0 0.0)
    (40 . 3.16228)
    (210 0.0 0.0 1.0)
)

为什么10号我有这些数字?

应该不是(10 5.0 0.0 0.0)吗?

autocad dxf autolisp
2个回答
2
投票

定义大多数平面实体(例如弧,圆,2D折线等)的几何形状的坐标是相对于称为对象坐标系(OCS)的坐标系定义的。

OCS与世界坐标系(WCS)共享其原点,其Z轴对应于与实体(由DXF组210表示)的法向矢量(aka挤压矢量),以及其X和Y Arbitary Axis Algorithm定义的轴应用于法向矢量。

[任意轴算法是在标准的AutoLISP trans功能中实现的,该功能可以方便地将点从一个坐标系转换为另一个坐标系。

在您的特定示例中,法向矢量为trans,它等于WCS平面的法向矢量,因此对于此特定示例,OCS等于WCS。

但是,通常,要将点从任意OCS转换为WCS或活动用户坐标系(UCS),您需要为(0.0 0.0 1.0)函数提供OCS法向矢量或实体中的实体名称。问题。

例如,使用OCS法向向量从OCS转换为活动UCS:

trans

或者,使用实体名称从OCS转换为活动UCS:

trans

在示例程序中实现,可能是:

(trans (cdr (assoc 10 <dxf-data>)) (cdr (assoc 210 <dxf-data>)) 1)

1
投票

在此列表中,坐标在WCS中。因此,如果您使用命令绘制圆并且活动的UCS与WCS是不同的,则一切正常,结果与预期相同。在坐标系之间转换坐标您可以使用

(trans (cdr (assoc 10 <dxf-data>)) (cdr (assoc -1 <dxf-data>)) 1)

© www.soinside.com 2019 - 2024. All rights reserved.