CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

2023-1-1 00:22| 发布者: admin| 查看: 277| 评论: 0|来自: AutoCAD

AutoCAD 点定义为以下阵列类型:

typedef ads_real ads_point[3]; 

一个点始终包含三个值。如果点是二维的,则可以忽略数组的第三个元素;最安全的做法是将其初始化为 0。

对象ARX 定义以下点值:

#define X 0 
#define Y 1 
#define Z 2 

与简单数据类型(或 AutoLISP 中的点列表)不同,不能使用单个语句为点赋值。若要分配指针,必须复制数组的各个元素,如以下示例所示:

newpt[X] = oldpt[X]; 
newpt[Y] = oldpt[Y]; 
newpt[Z] = oldpt[Z]; 

您还可以使用宏复制点值。结果是宏的第二个参数。ads_point_set()

以下示例代码将点设置为等于点:tofrom

ads_point to, from; 
 
from[X] = from[Y] = 5.0; from[Z] = 0.0; 
ads_point_set(from, to); 
注意:此宏与宏一样,根据是否定义了符号(对于标准 C)而定义不同。标准 C 版本要求程序包含。ads_name_set()__STDC__ads_point_set()string.h
#include <string.h> 

由于 C 语言的参数传递约定,点是通过引用传递的,没有地址(间接寻址)运算符。(C 总是通过引用传递数组参数,并带有指向数组第一个元素的指针。&

TheLibrary 函数将一个点作为参数,并返回一个点作为结果。声明如下:acedOsnap()

int acedOsnap(pt, mode, result) 
ads_point pt; 
char *mode; 
ads_point result; 

该函数的行为类似于 AutoLISP函数。它采用点 () 和一些对象捕捉模式(在字符串模式中指定),并返回最近的点 (in)。返回的值是指示成功 () 或失败的状态代码。acedOsnap()osnapptresultintacedOsnap()RTNORM

以下代码片段调用:acedOsnap()

int findendpoint(ads_point oldpt, ads_point newpt) 
{ 
    ads_point ptres; 
    int foundpt; 
    foundpt = acedOsnap(oldpt, "end", ptres); 
    if (foundpt == RTNORM) { 
        ads_point_set(ptres, newpt); 
    } 
    return foundpt; 
} 

因为点是数组,并且会自动传递到引用(即,作为指向每个数组的第一个元素的指针)而不是按值传递。该函数通过设置参数的值来返回其结果(与其状态相反)。oldptptresacedOsnap()acedOsnap()newpt

当需要指针而不是数组类型时,ObjectARX 定义指向点的指针。

typedef ads_real *ads_pointp; 

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 13:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部