找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2183|回复: 6

[分享] 【源码】提取对象的DXF组码值到LISP

[复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-12-11 10:34:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. //提取DXF值 By Gu_xl
  2. //调用方式
  3. //(GetDxf ename code [AllFlag])
  4. //   ename 图元名
  5. //   code 组码
  6. //   AllFlag 可选参数,提供且不为nil时返回所有相同组码值
  7. static int ads_GetDxf (void)
  8. {
  9.   struct resbuf *rb = acedGetArgs();
  10.   struct resbuf *rbdxf=NULL,*rbtmp;
  11.   if (rb == NULL)
  12.   {
  13.     acdbFail(_T("参数太少!"));
  14.     return RTERROR;
  15.   }
  16.   if (rb->restype == RTENAME)
  17.   {
  18.     ads_name ent;
  19.     ads_name_set(rb->resval.rlname,ent);
  20.     if (rb->rbnext == NULL)
  21.     {
  22.       acdbFail(_T("参数太少!"));
  23.       return RTERROR;
  24.     }
  25.     rb = rb->rbnext;
  26.     if (rb->restype != RTSHORT)
  27.     {
  28.       acdbFail(_T("参数错误!"));
  29.       return RTERROR;
  30.     }
  31.     int i = rb->resval.rint;
  32.     bool bAllDxf = false;
  33.     if (rb->rbnext != NULL)
  34.     {
  35.       rb = rb->rbnext;
  36.       if (rb->restype != RTNIL)
  37.       {
  38.         bAllDxf = true;
  39.       }
  40.       if (rb->rbnext != NULL)
  41.       {
  42.       acdbFail(_T("参数太多!"));
  43.       return RTERROR;
  44.       }
  45.     }
  46.     struct resbuf *rbRetList = NULL,*rbRetTmp = rbRetList;
  47.     struct resbuf *rbStr;
  48.     rbStr = acutNewRb(RTSTR);
  49.     rbStr->resval.rstring = _T("*");
  50.     rbdxf = acdbEntGetX(ent,rbStr);
  51.     acutRelRb(rbStr);
  52.     rbtmp = rbdxf;
  53.     while (rbtmp != NULL)
  54.     {
  55.       if (rbtmp->restype == i)
  56.       {
  57.         if (i == -3)
  58.         {
  59.           AcDbEntity *pEnt;
  60.           AcDbObjectId Id;
  61.           acdbGetObjectId(Id,ent);
  62.           acdbOpenObject(pEnt,Id,AcDb::kForRead);
  63.           struct resbuf *rbList = pEnt->xData((ACHAR *)0);
  64.           pEnt->close();
  65.           acedRetList(rbList);
  66.           acutRelRb(rbList);
  67.           acutRelRb(rbdxf);
  68.           return (RSRSLT);
  69.         }
  70.         else if (((-2 <= i) && (i <= -1)) ||
  71.           ((330 <= i) && (i <= 369))
  72.           )
  73.         {
  74.           if (bAllDxf)
  75.           {
  76.             if (rbRetList != NULL)
  77.             {
  78.               rbRetTmp->rbnext = acutBuildList(RTENAME,rbtmp->resval.rlname,RTNONE);
  79.               rbRetTmp = rbRetTmp->rbnext;
  80.             }
  81.             else
  82.             {
  83.               rbRetList = acutBuildList(RTENAME,rbtmp->resval.rlname,RTNONE);
  84.               rbRetTmp = rbRetList;
  85.             }
  86.           }
  87.           else
  88.           {
  89.             acedRetName(rbtmp->resval.rlname,RTENAME);
  90.             acutRelRb(rbdxf);
  91.             return (RSRSLT);
  92.           }
  93.         
  94.         }
  95.         else if (((0 <= i) && (i <= 9)) ||
  96.              ((100 <= i) && (i <= 105)) ||
  97.              ((300 <= i) && (i <= 329)) ||
  98.              ((390 <= i) && (i <= 399)) ||
  99.              ((410 <= i) && (i <= 419)) ||
  100.              ((430 <= i) && (i <= 437)) ||
  101.              ((470 <= i) && (i <= 479)) ||
  102.              (i == 999)
  103.             )
  104.         {
  105.           if (bAllDxf)
  106.           {
  107.             if (rbRetList != NULL)
  108.             {
  109.               rbRetTmp->rbnext = acutBuildList(RTSTR,rbtmp->resval.rstring,RTNONE);
  110.               rbRetTmp = rbRetTmp->rbnext;
  111.             }
  112.             else
  113.             {
  114.               rbRetList = acutBuildList(RTSTR,rbtmp->resval.rstring,RTNONE);
  115.               rbRetTmp = rbRetList;
  116.             }

  117.           }
  118.           else
  119.           {
  120.             acedRetStr(rbtmp->resval.rstring);
  121.             acutRelRb(rbdxf);
  122.             return (RSRSLT);
  123.           }
  124.         
  125.         }
  126.         else if (((10 <= i) && (i <= 37)) ||
  127.              ((110 <= i) && (i <= 230))
  128.             )
  129.         {
  130.           if (bAllDxf)
  131.           {
  132.             if (rbRetList != NULL)
  133.             {
  134.               rbRetTmp->rbnext = acutBuildList(RT3DPOINT,rbtmp->resval.rpoint,RTNONE);
  135.               rbRetTmp = rbRetTmp->rbnext;
  136.             }
  137.             else
  138.             {
  139.               rbRetList = acutBuildList(RT3DPOINT,rbtmp->resval.rpoint,RTNONE);
  140.               rbRetTmp = rbRetList;
  141.             }

  142.           }
  143.           else
  144.           {
  145.             acedRetPoint(rbtmp->resval.rpoint);
  146.             acutRelRb(rbdxf);
  147.             return (RSRSLT);
  148.           }
  149.         
  150.         }
  151.         else if (((38 <= i) && (i <= 58)) ||
  152.              ((460 <= i) && (i <= 469))
  153.             )
  154.         {
  155.           if (bAllDxf)
  156.           {
  157.             if (rbRetList != NULL)
  158.             {
  159.               rbRetTmp->rbnext = acutBuildList(RTREAL,rbtmp->resval.rreal,RTNONE);
  160.               rbRetTmp = rbRetTmp->rbnext;
  161.             }
  162.             else
  163.             {
  164.               rbRetList = acutBuildList(RTREAL,rbtmp->resval.rreal,RTNONE);
  165.               rbRetTmp = rbRetList;
  166.             }

  167.           }
  168.           else
  169.           {
  170.             acedRetReal(rbtmp->resval.rreal);
  171.             acutRelRb(rbdxf);
  172.             return (RSRSLT);
  173.           }
  174.         
  175.         }
  176.         else if (((60 <= i) && (i <= 99)) ||
  177.           ((270 <= i) && (i <= 299)) ||
  178.           ((370 <= i) && (i <= 389)) ||
  179.           ((400 <= i) && (i <= 409))
  180.           )
  181.         {
  182.           if (bAllDxf)
  183.           {
  184.             if (rbRetList != NULL)
  185.             {
  186.               rbRetTmp->rbnext = acutBuildList(RTSHORT,rbtmp->resval.rint,RTNONE);
  187.               rbRetTmp = rbRetTmp->rbnext;
  188.             }
  189.             else
  190.             {
  191.               rbRetList = acutBuildList(RTSHORT,rbtmp->resval.rint,RTNONE);
  192.               rbRetTmp = rbRetList;
  193.             }

  194.           }
  195.           else
  196.           {
  197.             acedRetInt(rbtmp->resval.rint);
  198.             acutRelRb(rbdxf);
  199.             return (RSRSLT);
  200.           }
  201.         
  202.         }
  203.         else if (((420 <= i) && (i <= 427)) ||
  204.           ((440 <= i) && (i <= 459))
  205.           )
  206.         {
  207.           if (bAllDxf)
  208.           {
  209.             if (rbRetList != NULL)
  210.             {
  211.               rbRetTmp->rbnext = acutBuildList(RTLONG,rbtmp->resval.rlong,RTNONE);
  212.               rbRetTmp = rbRetTmp->rbnext;
  213.             }
  214.             else
  215.             {
  216.               rbRetList = acutBuildList(RTLONG,rbtmp->resval.rlong,RTNONE);
  217.               rbRetTmp = rbRetList;
  218.             }

  219.           }
  220.           else
  221.           {
  222.             struct resbuf *rbVar = acutBuildList(RTLONG,rbtmp->resval.rlong,RTNONE);
  223.             acedRetVal(rbVar);
  224.             acutRelRb(rbVar);
  225.             //长整型数无法直接返回
  226.             //acedRetInt(rbtmp->resval.rlong);
  227.             acutRelRb(rbdxf);
  228.             return (RSRSLT);
  229.           }

  230.         }
  231.         if (!bAllDxf)
  232.         {
  233.           break;
  234.         }
  235.       }
  236.       
  237.       
  238.       rbtmp = rbtmp->rbnext;
  239.     }
  240.     if (bAllDxf)
  241.     {
  242.       acedRetList(rbRetList);
  243.       acutRelRb(rbRetList);
  244.       acutRelRb(rbdxf);
  245.       return (RSRSLT);
  246.     }
  247.       acutRelRb(rbdxf);
  248.    
  249.   }
  250.   else if (rb->restype == RSRSLT)
  251.   {
  252.    
  253.   }
  254.   else
  255.   {
  256.     acdbFail(_T("参数错误!"));
  257.     return RTERROR;
  258.   }
  259.   acedRetNil();
  260.   
  261.   return (RSRSLT);
  262. }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-11 11:09:19 | 显示全部楼层
G版 ARX 水平提高神速啊!:lol

点评

过奖了,我仅仅是刚入了个门,差老远了!  详情 回复 发表于 2013-12-11 11:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-12-11 11:11:08 | 显示全部楼层
st788796 发表于 2013-12-11 11:09
G版 ARX 水平提高神速啊!

过奖了,我仅仅是刚入了个门,差老远了!

点评

我只在门外面看  详情 回复 发表于 2013-12-11 11:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-11 11:13:59 | 显示全部楼层
牢固 发表于 2013-12-11 11:11
过奖了,我仅仅是刚入了个门,差老远了!

我只在门外面看{:soso_e112:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2015-6-11 23:34:11 | 显示全部楼层
牛B的版主,应该怎么调用这个函数呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2015-6-11 23:35:15 | 显示全部楼层
牛B的版主,应该怎么调用这个函数呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2015-6-11 23:56:33 | 显示全部楼层
需要用什么编译吗  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 09:10 , Processed in 0.200413 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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