找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1803|回复: 5

请教各位:如何 对一条AcDb2dPolyline的节点进行删除?

[复制链接]
发表于 2002-1-22 15:49:30 | 显示全部楼层 |阅读模式

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

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

×
一条AcDb2dPolyline线,想将其中的一个节点删除,我该如何实现?我想用removeVertexAt,但它只能用于AcDbPolyline类。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-1-23 18:19:27 | 显示全部楼层
给写一段例子程序吧:

  1. LPCTSTR lpszPrompt[]={_T("选择Ployline:"),_T("")};
  2.         CEntPicks picks;
  3.         if(picks.EntPicksGet(_T(":$:S"),lpszPrompt,NULL,CResbuf(acutBuildList(RTDXF0,_T("POLYLINE"),RTNONE))))
  4.         {
  5.                 CAcDb2dPolyline pline;
  6.                 if(pline.OpenEntity(picks[0L]))
  7.                 {
  8.                         int nIndex;
  9.                         acedInitGet(5,NULL);
  10.                         if(acedGetInt(_T("\n删除节点的索引:"),&nIndex)!=RTNORM)
  11.                                 return;
  12.                         int nPos=0;
  13.                         CAcDbObjectIterator  iterator(pline->vertexIterator());
  14.                         for(;!iterator->done();iterator->step())
  15.                         {
  16.                                 if(nPos++==nIndex)
  17.                                 {
  18.                                         CAcDb2dVertex vertex;
  19.                                         if(pline->openVertex(vertex,iterator->objectId(),AcDb::kForWrite)==Acad::eOk)
  20.                                                 vertex->erase();
  21.                                         break;
  22.                                 }
  23.                         }
  24.                 }
  25.         }

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

使用道具 举报

发表于 2002-1-23 23:01:39 | 显示全部楼层
以前做的,也不知道是不是最后版本。:-)


  1. (princ
  2.   "\nplve====lwpolyline vert edit,增加/删除pl线顶点 vb1.0--------lxx.2001.7"
  3. )
  4. ;;;;;;;;;;;;;;;;;;;;;;;;;;;
  5. ;;vb1.0
  6. (defun c:plve ( / os en entl pt ptend)
  7.   (princ "\n plve====lwpolyline vert edit,增加/删除pl线顶点--vb1.0--------lxx.2001.7")
  8.   (setvar "modemacro" "plve.多义线顶点增删程序--梁雄啸.2001")
  9.   (setvar "cmdecho" 0)
  10.   (setvar "osmode" 551)
  11.   (princ "\n当取点为 pl 线的顶点时---删除/否---增加顶点")
  12.   (setq        os   (getvar "osmode")
  13.         en   (entsel "\n选择要增/删顶点的多义线:")
  14.         ent  (car en)
  15.   )
  16.   (initget 128)
  17.   (princ "\n!!!取点为 pl 线的顶点时==>删除 / 否==>增加顶点!!!")
  18.   (while
  19.     (setq pt (getpoint "\n自动识别增&删--取点/enter-退出:")) ;enter--重新选择pl线
  20.     (setq entl (entget ent))
  21.     (setvar "modemacro" "")
  22.     (if
  23.        (and (setq ptend (osnap pt "_end"))
  24.             (member (cons 10 (list (car ptend)(cadr ptend))) entl)
  25.        )
  26.         (if (equal pt ptend)
  27.           (eplv);删除顶点
  28.           (aplv);增加顶点
  29.         )
  30.     );endif
  31.   ); end while
  32.   (setvar "osmode" os)
  33.   (princ)
  34. )
  35. ;;;;删除顶点
  36. (defun eplv ( / ptl entl2)
  37.   (princ "\nok")
  38.   (setq        ptl (cons 10 (list (car pt) (cadr pt) ));点对
  39.         entl2 '()
  40.   )
  41.   (foreach n entl
  42.     (if        (not(equal n ptl))
  43.         (setq entl2 (cons n entl2))
  44.     )
  45.   );!!技巧!!
  46.   (setq entl (reverse entl2))
  47.   (entmod entl)
  48. )
  49. ;;;;增加顶点
  50. (defun aplv ()
  51.   (initget 129)
  52.   (setq npt (getpoint pt "\n 新的定位点/X-不做变动/<enter--原选择点>:"))
  53.   (if
  54.     (= (type pt) 'LIST)
  55.     (progn
  56.       (print "\nok")
  57.       (command "_.break" ent pt "@" ^c
  58.              "_.pedit" ent "j" (entlast) "" ^c
  59.       );  打断
  60.       (print "\n brk")
  61.       (while (= (type npt) 'LIST)            ;新的定位点
  62.           (print "enter")
  63.           (setq entl (entget ent) ; 更新
  64.                 ptl (cons 10 (list (car pt)(cadr pt)))
  65.                 nptl (cons 10 (list (car npt)(cadr npt)))
  66.                 entl2 '())
  67.           (foreach n entl
  68.             (if (equal n ptl)
  69.                 (setq entl2 (cons nptl entl2))
  70.                 (setq entl2 (cons n entl2))
  71.             )
  72.           )  ;  表项替换
  73.           (setq entl (reverse entl2)
  74.                 npt nil)
  75.           (entmod entl)
  76.       );  end while
  77.     );  end progn
  78.   );  end cond
  79. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-16 11:21:42 | 显示全部楼层
lisp程序!!!
我不懂啊,那位高手帮帮忙,将上面的程序翻译成arx,有急用,谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-16 11:44:58 | 显示全部楼层
刚刚知道该网站,可钱币太少了,好多软件又不能下载的,痛苦呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-18 23:50:18 | 显示全部楼层
[PHP]
  AcDbObjectIterator *pVertIter;
  AcDbObjectId vertexId;
.............
  else if (Obj->isKindOf(AcDb2dPolyline::desc()))
  { pVertIter=((AcDb2dPolyline *)Obj)->vertexIterator();

    for(;!pVertIter->done();pVertIter->step())
    { vertexId=pVertIter->objectId();
      ((AcDb2dPolyline *)Obj)->openVertex(pVertex2d,vertexId,AcDb::kForRead);
      PtArr->append(pVertex2d->position());
      BulArr->append(pVertex2d->bulge());
    }
    delete pVertIter;
  }[/PHP]
这个是取顶点的例子,应该可以通过这种方法删除顶点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 01:40 , Processed in 0.177068 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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