点
AutoCAD 点定义为以下阵列类型: typedef ads_real ads_point[3]; 一个点始终包含三个值。如果点是二维的,则可以忽略数组的第三个元素;将其初始化为 0 是最安全的。 ObjectARX 定义以下点值: #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 总是通过引用传递数组参数,并带有指向数组第一个元素的指针。& 库函数将一个点作为参数,并返回一个点作为结果。声明如下: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; 父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 12:41
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.