明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2877|回复: 4

[LISP&ARX]写一个给LISP取点表用的ARX

[复制链接]
发表于 2008-10-17 11:11:00 | 显示全部楼层 |阅读模式
  1. 编程:BDYCAD     2008-10-17
  2. 加载BDYStretchPoints.ARX,程序,内置getGripPointlist涵数
  3. 支持版本 Auto CAD 2004 ~2006
  4. 用法示例:
  5. (if(setq Ename(car(entsel)))
  6.   (progn
  7.      (setq Pts(getGripPointlist Ename)radius 0.1)
  8.      (foreach pt pts
  9.        (entmake (append '((0 . "CIRCLE") (100 . "AcDbEntity")(100 . "AcDbCircle") (8 . "0"))
  10.      (list (cons 40  radius)(cons 10 pt))))
  11.        (setq radius(+ radius 0.1))
  12.      )
  13.     )
  14.   )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2008-10-17 11:13:00 | 显示全部楼层
ARX 部份的代码如下:
  1. // ----- ads_getgrippointlist command
  2. static int ads_getgrippointlist(void)
  3. {
  4.   //----- Remove the following line if you do not expect any argument for this ADS function
  5.   struct resbuf *pArgs =acedGetArgs ();
  6.   struct resbuf *rbStart=acutBuildList(RTLB,RTNONE),*rb=rbStart;
  7.   ads_point pt1;
  8.   AcGePoint3d Spt;
  9.   // TODO: add your code here
  10.   long sslen;
  11.   ads_real len,Allen;
  12.   ads_name ss,Ename;
  13.   AcDbObjectId ObjID;
  14.   AcDbEntity *pEnt;
  15.   AcGePoint3dArray Ptlist;
  16.   AcDbIntArray osnapModes,geomIds;
  17.   Allen=0;
  18.   if (pArgs->restype==RTENAME){//pArgs->restype!=RTENAME||
  19.    ads_name_set(pArgs->resval.rlname,Ename);
  20.    acdbGetObjectId(ObjID,Ename);
  21.    if(acdbOpenObject(pEnt, ObjID, AcDb::kForRead)!=Acad::eOk)return FALSE;
  22.    if(pEnt->isKindOf(AcDbCurve::desc())){
  23.     AcDbCurve *cur=(AcDbCurve*)pEnt;//类型转换
  24.     //cur->getStretchPoints(Ptlist);
  25.     cur->getGripPoints(Ptlist,osnapModes,geomIds);
  26.    }
  27.    pEnt->close();
  28.    int len=Ptlist.length();
  29.    for (int i=0;len>i; i++) {
  30.     Spt=Ptlist.at(i);
  31.     ads_point_set(asDblArray(Spt),pt1);
  32.     rb->rbnext=acutBuildList(RT3DPOINT,pt1/*asDblArray(pts[i])*/,RTNONE);
  33.     rb = rb->rbnext;
  34.    }
  35.    rb->rbnext = acutBuildList(RTLE,RTNONE);
  36.    acedRetList(rbStart);
  37.   }
  38.   // TODO: Replace the following line by your returned value if any
  39.   return (RSRSLT) ;
  40. }
复制代码
发表于 2008-10-17 12:22:00 | 显示全部楼层
支持楼主,要是能写个可以接受关键字的SSGET或写个支持动态拖拉选集的GETPOINT就更好了.
发表于 2008-11-22 14:06:00 | 显示全部楼层

下了 但加载不了该程序!

发表于 2011-12-7 16:52:52 | 显示全部楼层
samshs 发表于 2008-11-22 14:06
下了 但加载不了该程序!

应该是版本不对吧,不知楼主arx的版本是....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-23 12:04 , Processed in 0.160817 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表