python下的橡皮线_ObjectARX常用类和函数

本文详细介绍了ObjectARX中与Python结合使用的一些关键函数,包括AcAxMove、AcAxRotate、AcAxScaleEntity等,用于移动、旋转和缩放实体。同时,讲解了acedGetString、acedGetInt等用户输入处理函数,以及acedEntSel函数用于等待用户选择实体。此外,还探讨了AcDbObject类及其派生类如AcDbEntity、AcDbBlockReference等的操作,如AcDbEntity的layer、transformBy函数,AcDbBlockReference的rotation属性等。文章深入浅出,是理解ObjectARX在Python下操作AutoCAD的重要参考资料。
摘要由CSDN通过智能技术生成

2019独角兽企业重金招聘Python工程师标准>>>

6936d1565ae689371725cdb5fc51c415.png

(1)AcAx 开头的全局函数:这些函数通过 COM 的方式来让AutoCAD 完成一些操作。

(a) acutPrintf函数:在 AutoCAD 命令行显示指定的字符串

acutPrintf函数的具体用法如例:

acutPrintf("\n输入不合法,请重新输入");

(b) AcAxMove 函数:移动实体。需要链接 axauto15.lib 库

AcAxMove 函数的定义形式为:

HRESULT AXAUTOEXP AcAxMove(AcDbObjectId& objId,VARIANT fromPoint,VARIANT toPoint);

VARIANT 是在 COM 中使用的一种特殊数据类型,因为COM是微软用于解决组件之间数据交换的一种技术,COM 对象建立在二进制可执行代码级的基础上,并由此来实现多种语言开发的组件对象可以进行交互。

因此开发 COM 所使用的数据类型是独立于特定语言的,我们开发 COM 客户程序(调用 COM 对象的程序)也必须使用一些 COM 所规定的数据类型。

AcAxMove 函数的具体用法如例:

AcDbObjectId entId;//移动实体id

AcGePoint3d ptFrom;//起点

AcGePoint3d ptTo;//终点

// 将AcGePoint3d类型的点坐标进行类型转换

VARIANT *pvaFrom = Point3dToVARIANT(ptFrom);

VARIANT *pvaTo = Point3dToVARIANT(ptTo);

BOOL bRet = SUCCEEDED(AcAxMove(entId, *pvaFrom, *pvaTo));

delete pvaFrom;

delete pvaTo;

static VARIANT* Point3dToVARIANT(const AcGePoint3d &point)

{

COleSafeArray *psa = new COleSafeArray();

DOUBLE dblValues[] = {point[X], point[Y], point[Z]};

psa->CreateOneDim(VT_R8, 3, dblValues);

return (LPVARIANT)(*psa);

}

(c)AcAxRotate函数:旋转实体的操作

(d)AcAxScaleEntity 函数:缩放实体的操作

(e)全局函数 acdbOpenAcDbEntity用于从实体的 ID 号获得指向图形数据库中实体的指针。具体定义形式和用法参考另外一篇博客。https://my.oschina.net/u/2930533/blog/759568

(f)acedGetString 函数:获得用户输入的字符串(acedGetPoint(点)、acedGetInt、acedGetKword(关键字) 、acedGetDist(距离) acedGetCorner(矩形框对角点)acedGetAngle (角度)和 acedGetReal(实数))

acedGetString函数的定义形式为:

int acedGetString(int cronly,const char * prompt,char * result);

第一个参数:cronly 指定用户输入的字符串中是否可以包含空格,可以输入 Adesk::kTrue 或着Adesk::kFalse;

第二个参数:prompt 指定了在命令行提示用户输入的文本;

第三个参数:result 则保存了用户输入的结果(最大缓冲区为133个字符)。

返回值:RTNORM:成功,RTERROR:失败,RTCAN:用户按下“ESC”键取消操作,RTREJ:拒绝执行操作(操作不合法),RTFAIL:与AutoLISP通信失败,RTKWORD:用户输入了关键字;

具体用法如例:

acedGetString(Adesk::kFalse, "\n输入图块的名称:", &blkName)

注意:第三个参数用了&,是址传递.

acedGetInt 函数的定义形式为:

int acedGetInt(const char * prompt, int * result);

第一个参数:prompt: 用于指定显示在命令窗口中的字符串,如果不需要使用可以指定 NULL 作为该参数的值。

第二个参数:result :用户输入的整数。

返回值:RTNORM:成功,RTERROR:失败,RTCAN:用户按下“ESC”键取消操作,RTREJ:拒绝执行操作(操作不合法),RTFAIL:与AutoLISP通信失败,RTKWORD:用户输入了关键字;

(g)acedEntSel 函数:等待用户选择一个实体

acedEntSel函数的定义形式为:

int acedEntSel (const ACHAR *str, ads_name entres,ads_point ptres);

第一个参数:str:提示信息;

第二个参数:entres:实体名称;

第三个参数:ptres:选择实体对象时候的拾取点。

返回值:RTNORM:成功,RTERROR:失败,RTCAN:用户按下“ESC”键取消操作,RTREJ:拒绝执行操作(操作不合法),RTFAIL:与AutoLISP通信失败,RTKWORD:用户输入了关键字;

具体用法如例:

ads_name entres;

ads_point ptres;

if(RTNORM == acedEntSel(_T("\n请选择一个实体:"),entres,ptres))

{

AcDbObjectId objId;

if(acdbGetObjectId(objId,entres) != Acad::eOk )

return;

}

(h)acedInitGet函数:限定输入的条件,该函数只能控制紧随其后的一个acedGetXXX,调用后立即失效.

acedInitGet函数的定义形式为:

int acedInitGet(int val, const ACHAR *kwl);

第一个参数:val:输入数据的范围和方式(1:RSG_NONULL:不允许空输入;2:RSG_NOZERO:不允许输入0;4:RSG_NONEG:不允许输入负数;8:RSG_NOLIM:不检查图形边界;32:RSG_DASH:用虚线表示矩形框或橡皮线;64:RSG_2D:不考虑3D的Z坐标;128:RSG_OTHER:允许用户任意输入);

第二个参数:kwl:关键字列表;

具体用法如例:

int nCount = 1;

acedInitGet(RSG_NONULL+RSG_NONEG+RSG_NOZERO,NULL);

acedGetInt(_T("\n请输入多边形顶点数:"),&nCount);//不允许输入负数和0

(i)acedSetColorDialog 函数:函数能够弹出选择颜色对话框,并且返回用户选择的结果。

acedSetColorDialog 函数定义形式为:

Adesk::Boolean acedSetColorDialog(int& nColor,Adesk::Boolean bAllowMetaColor,int nCurLayerColor);

第一个参数:nColor 参数指定了显示【选择颜色】对话框时的默认颜色,并且在函数返回值后保存用户选择的新颜色;

第二个参数:bAllowMetaColor 参数限定在【选择颜色】对话框中是否可以选择“随层”或“随块”;

第三个参数:nCurLayerColor 参数指定当前图层的颜色。

(j)acedCommand 函数:

acedCommand 函数的定义形式为:

int acedCommand(int rtype, ... unnamed);

该函数的参数个数是可变的,并且参数成对出现。参数对中第一个参数表示参数的类型,第二个表示其实际的数据。参数表的最后一个参数必须是0或者RTNONE(使用RTNONE更好一些)。

acedCommand 函数具体用法如例:

acedCommand(RTSTR, "Circle",RTSTR, “0,0,0”, RTSTR, “10”, RTNONE);

创建一个圆心为(0,0)、半径为10的圆。

(k)acedCmd 函数:

acedCmd 函数的定义形式为:

int acedCmd(const struct resbuf * rbp);

参数是一个 resbuf 类型的指针,这里需要的结果缓冲区可以由 acutBuildList 函数生成。

(l)acutNewRb 函数:创建一个新的结果缓冲区,并为其分配存储空间。使用该函数分配的存储空间必须在不用的时候手工释放空间。

(m)acutRelRb 函数:释放结果缓冲区链表的存储空间。

(n)acedGetFileD 函数:文件对话框提示用户输入一个文件名。

acedGetFileD 函数的定义形式为:

int acedGetFileD(const char * title,const char * default,const char * ext,int flags,struct resbuf * result);

第一个参数&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值