找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1191|回复: 2

[转贴]:Reverse Pline

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-6 19:17:04 | 显示全部楼层 |阅读模式

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

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

×

  1. ; =============================================================================
  2. ; Filename    :   RevPlines.lsp
  3. ; Datum       :   28.09.05
  4. ; Author      :   jme
  5. ; Copyright   :   MENZI ENGINEERING GmbH, Switzerland
  6. ; Revision  1 :   __.__.__ ___ -
  7. ; -----------------------------------------------------------------------------
  8. ; Description:
  9. ; Program to reverse the vertex order of Polylines.
  10. ; -----------------------------------------------------------------------------
  11. ; Global variables:
  12. ;
  13. ; -----------------------------------------------------------------------------
  14. ; Internal LISP-functions:
  15. ; MeDoubleUp MeRevPline MeSelPline MeTripleUp
  16. ; -----------------------------------------------------------------------------
  17. ; External LISP-functions:
  18. ; None
  19. ; -----------------------------------------------------------------------------
  20. ; Version notes:
  21. ; AutoCAD:        Version:        Language:        AddIns:
  22. ; 15 up                1.00                English                ...
  23. ; -----------------------------------------------------------------------------
  24. ;
  25. ; == Message on loading =======================================================
  26. ;
  27. (princ "\nRevPlines v1.00")
  28. ;
  29. ; == Main =====================================================================
  30. ;
  31. (defun C:RevPlines ( / AcaDoc CurObj)
  32. (if (< (atof (getvar "ACADVER")) 15.0)
  33.   (alert " RevPlines requires AutoCAD 2000 or higher. ")
  34.   (progn
  35.    (vl-load-com)
  36.    (setq AcaDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  37.    (if (setq CurObj (MeSelPline "\nSelect Polyline <exit>: "))
  38.     (progn
  39.      (vla-StartUndoMark AcaDoc)
  40.      (MeRevPline CurObj)
  41.      (vla-EndUndoMark AcaDoc)
  42.     )
  43.    )
  44.   )
  45. )
  46. (princ)
  47. )
  48. ;
  49. ; == Sub function library =====================================================
  50. ;
  51. ; == Function MeDoubleUp
  52. ; Converts a list to an double point list.
  53. ; Arguments [Type]:
  54. ;   Lst = List to convert, eg. '(1 2 3 4 5 6) [LIST]
  55. ; Return [Type]:
  56. ;   > Coverted list '((1 2)(3 4)(5 6)) [LIST]
  57. ; Notes:
  58. ;   Credits to Ken Alexander
  59. ;
  60. (defun MeDoubleUp (Lst / RetLst TmpLst)
  61. (if (setq TmpLst Lst)
  62.   (while
  63.    (setq RetLst (cons (list (car TmpLst) (cadr TmpLst)) RetLst)
  64.          TmpLst (cddr TmpLst)
  65.    )
  66.   )
  67. )
  68. (reverse RetLst)
  69. )
  70. ;
  71. ; == Function MeRevPline
  72. ; Reverses the vertices of a polyline.
  73. ; Arguments [Typ]:
  74. ;   Obj = Pline-Object [VLA-OBJECT]
  75. ; Return [Typ]:
  76. ;   > Pline-object reversed [VLA-OBJECT]
  77. ; Notes:
  78. ;   None
  79. ;
  80. (defun MeRevPline (Obj / BlgLst NewCor ObjNme OldCor SegCnt Ubound)
  81. (setq ObjNme (vla-get-ObjectName Obj)
  82.        OldCor (if (eq ObjNme "AcDbPolyline")
  83.                (MeDoubleUp (vlax-get Obj 'Coordinates))
  84.                (MeTripleUp (vlax-get Obj 'Coordinates))
  85.               )
  86.        NewCor (apply 'append (reverse OldCor))
  87. )
  88. (vlax-put Obj 'Coordinates NewCor)
  89. (if (not (eq ObjNme "AcDb3dPolyline"))
  90.   (progn
  91.    (setq Ubound (1- (length OldCor))
  92.          BlgLst (list (* (vla-GetBulge Obj Ubound) -1))
  93.          SegCnt 0
  94.    )
  95.    (repeat Ubound
  96.     (setq BlgLst (cons (* (vla-GetBulge Obj SegCnt) -1) BlgLst)
  97.           SegCnt (1+ SegCnt)
  98.     )
  99.    )
  100.    (setq SegCnt 0)
  101.    (foreach memb BlgLst
  102.     (vla-SetBulge Obj SegCnt memb)
  103.     (setq SegCnt (1+ SegCnt))
  104.    )
  105.   )
  106. )
  107. (vla-Update Obj)
  108. Obj
  109. )
  110. ;
  111. ; -- Function MeSelPline
  112. ; Extended entsel for Plines.
  113. ; Arguments [Type]:
  114. ;   Pmt = Prompt [STR]
  115. ; Return [Type]:
  116. ;   > Selected Pline object [VLA-OBJECT]
  117. ;   > False if user press 'Enter'
  118. ; Notes:
  119. ;   None
  120. ;
  121. (defun MeSelPline (Pmt / CurEnt CurObj ExLoop NmeLst)
  122. (setq NmeLst '("AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline"))
  123. (while (not ExLoop)
  124.   (initget " ")
  125.   (setq CurEnt (entsel Pmt))
  126.   (cond
  127.    ((= CurEnt "") (setq ExLoop T CurObj nil))
  128.    (CurEnt
  129.     (setq CurObj (vlax-ename->vla-object (car CurEnt)))
  130.     (if (not (vl-position (vla-get-ObjectName CurObj) NmeLst))
  131.      (princ "selected entity is not a *Polyline. ")
  132.      (setq ExLoop T)
  133.     )
  134.    )
  135.    ((princ "1 selected, 0 found"))
  136.   )
  137. )
  138. CurObj
  139. )
  140. ;
  141. ; == Function MeTripleUp
  142. ; Converts a list to an double point list.
  143. ; Arguments [Type]:
  144. ;   Lst = List to convert, eg. '(1 2 3 4 5 6) [LIST]
  145. ; Return [Type]:
  146. ;   > Coverted list '((1 2 3) (4 5 6)) [LIST]
  147. ; Notes:
  148. ;   Credits to Ken Alexander
  149. ;
  150. (defun MeTripleUp (Lst / RetLst TmpLst)
  151. (if (setq TmpLst Lst)
  152.   (while
  153.    (setq RetLst (cons (list (car TmpLst) (cadr TmpLst) (caddr TmpLst)) RetLst)
  154.          TmpLst (cdddr TmpLst)
  155.    )
  156.   )
  157. )
  158. (reverse RetLst)
  159. )
  160. ;
  161. ; == Copyright - Note (May be never deleted) ==================================
  162. ;
  163. (princ "\n-------------------------------------------")
  164. (princ "\n ?005 MENZI ENGINEERING GmbH, Switzerland ")
  165. (princ "\n-------------------------------------------")
  166. (princ "\nType RevPlines in the command line to start the programm...")
  167. (princ)
  168. ;
  169. ; == End RevPlines ============================================================
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-11-14 09:34:16 | 显示全部楼层
该程序不能处理光滑过的多义线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 23:12 , Processed in 0.399700 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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