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; |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:11
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.