明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1804|回复: 1

把上回龙仔贴的3DPOLY 的offset改了一下,

[复制链接]
发表于 2003-12-20 11:05:00 | 显示全部楼层 |阅读模式
这是原来的:
  1. ;;Tip1877:       3D_OFFSET.LSP    3D PLINE OFFSET   (c) 2003 Silvia Soonets
  2. (vl-load-com)
  3. (setq ESTEDIBUJO (vla-get-activedocument (vlax-get-acad-object)))
  4. (setq *MODELSPACE* (vla-get-modelspace ESTEDIBUJO))
  5. (defun C:3D_OFFSET (/     ENAME   OBJECT  LISTA   LISTA1  X
  6.       N     DISTA   OBJECT1 ENAME1  LAY     COL
  7.       LTYPE   LTS     LW     LISTAZ  NVER
  8.      )
  9.   (setq DISTA (getdist (strcat "\nSpecify offset distance <"
  10.           (rtos (getvar "OFFSETDIST") 2 2)
  11.           "> :"
  12.          )
  13.        )
  14.   )
  15.   (if (not DISTA)
  16.     (setq DISTA (getvar "OFFSETDIST"))
  17.   )
  18.   (setq ENAME (entsel "\nSelect 3dpoly to offset or <exit>: "))
  19.   (while ENAME
  20.     (setq ENAME  (car ENAME)
  21.    OBJECT (vlax-ename->vla-object ENAME)
  22.     )
  23.     (if (= (vlax-get-property OBJECT "ObjectName") "AcDb3dPolyline")
  24.       (progn
  25. (setq LAY (vlax-get-property OBJECT "Layer")
  26.        LTYPE (vlax-get-property OBJECT "Linetype")
  27.        COL (vlax-get-property OBJECT "Color")
  28.        LTS (vlax-get-property OBJECT "LinetypeScale")
  29.        LW (vlax-get-property OBJECT "Lineweight")
  30.        IS_CLOSED (vlax-get-property OBJECT "Closed")
  31.        LISTA (vlax-get-property OBJECT "Coordinates")
  32.        LISTA (vlax-safearray->list (vlax-variant-value LISTA))
  33.        N  0
  34.        LISTA1 NIL
  35. )
  36. (while (setq X (nth N LISTA))
  37.    (setq NVER   (/ (length LISTA) 3.00)
  38.   LISTA1 (append LISTA1 (list X))
  39.   X      (nth (1+ N) LISTA)
  40.   LISTA1 (append LISTA1 (list X))
  41.   LISTAZ (append LISTAZ (list (nth (+ 2 N) LISTA)))
  42.   N      (+ 3 N)
  43.    )
  44. )
  45. (setq PT (getpoint "\nSpecify point on side to offset?: "))
  46. (setq N      (1- (length LISTA1))
  47.        LISTA1 (vlax-safearray-fill
  48.          (vlax-make-safearray vlax-vbdouble (cons 0 N))
  49.          LISTA1
  50.        )
  51.        OBJECT (vla-addlightweightpolyline *MODELSPACE* LISTA1)
  52.        ENAME  (vlax-vla-object->ename OBJECT)
  53. )
  54. (command "offset" DISTA ENAME PT "")
  55. (setq OBJECT1 (vlax-ename->vla-object (entlast)))
  56. (vlax-put-property OBJECT1 "Closed" IS_CLOSED)
  57. (setq LISTA1 (vlax-safearray->list
  58.          (vlax-variant-value
  59.     (vlax-get-property OBJECT1 "Coordinates")
  60.          )
  61.        )
  62.        N      0
  63.        LISTA  NIL
  64. )
  65. (entdel ENAME)
  66. (if (= (/ (length LISTA1) 2) NVER)
  67.    (progn
  68.      (while (setq X (nth N LISTA1))
  69.        (setq LISTA (append LISTA (list X))
  70.       LISTA (append LISTA (list (nth (1+ N) LISTA1)))
  71.       LISTA (append LISTA (list (nth (/ N 2) LISTAZ)))
  72.       N   (+ 2 N)
  73.        )
  74.      )
  75.      (setq N  (1- (length LISTA))
  76.     LISTA  (vlax-safearray-fill
  77.       (vlax-make-safearray vlax-vbdouble (cons 0 N))
  78.       LISTA
  79.     )
  80.     OBJECT (vla-add3dpoly *MODELSPACE* LISTA)
  81.     ENAME  (vlax-vla-object->ename OBJECT1)
  82.      )
  83.      (entdel ENAME)
  84.      (vlax-put-property OBJECT "Closed" IS_CLOSED)
  85.      (vlax-put-property OBJECT "Layer" LAY)
  86.      (vlax-put-property OBJECT "Linetype" LTYPE)
  87.      (vlax-put-property OBJECT "Color" COL)
  88.      (vlax-put-property OBJECT "LinetypeScale" LTS)
  89.      (vlax-put-property OBJECT "Lineweight" LW)
  90.    )
  91.    (prompt
  92.      "\nThe number of vertices have to change. Cannot 3d_offset that object"
  93.    )
  94. )
  95.       )
  96.       (prompt "\nCannot 3d_offset that object")
  97.     )
  98.     (setq ENAME (entsel "\nSelect 3dpoly to offset or <exit>: "))
  99.   )
  100.   (princ)
  101. )

这是我改过的:改过之后不会应该OFFSET的点变少了而不出错

  1. Tip1877:       3D_OFFSET.LSP    3D PLINE OFFSET   (c) 2003 Silvia Soonets;luoyaya重新修改
  2. (vl-load-com)
  3. (setq *VLA-ACDOC* (vla-get-activedocument (vlax-get-acad-object)))
  4. (setq *MODELSPACE* (vla-get-modelspace *VLA-ACDOC*))

  5.     (defun pointtolinedist (plin1 plin2 point / xdist ang)
  6.       (setq xdist (distance plin1 point))
  7.       (setq ang (abs (- (angle plin1 point) (angle plin1 plin2))))
  8.       (* (sin ang) xdist)
  9.     )
  10. (defun C:3o (/     ENAME   OBJECT  LISTA   LISTA1  X
  11.       N     DISTA   OBJECT1 ENAME1  LAY     COL
  12.       LTYPE   LTS     LW     LISTAZ  NVER
  13.              LISTB1 NB
  14.      )
  15.   (setq DISTA (getdist (strcat "\n输入offset距离<"
  16.           (rtos (getvar "OFFSETDIST") 2 2)
  17.           ">:"
  18.          )
  19.        )
  20.   )
  21.   (if (not DISTA)
  22.     (setq DISTA (getvar "OFFSETDIST"))
  23.   )
  24.   (setq ENAME (entsel "\n点取一条3dpoly或<退出>: "))
  25.   (while ENAME
  26.     (setq ENAME  (car ENAME)
  27.    OBJECT (vlax-ename->vla-object ENAME)
  28.           n nil
  29.           lista nil
  30.           lista1 nil
  31.           listb1 nil
  32.           listaz nil
  33.           nver nil
  34.           
  35.     )
  36.     (if (= (vlax-get-property OBJECT "ObjectName") "AcDb3dPolyline")
  37.       (progn
  38. (setq LAY (vlax-get-property OBJECT "Layer")
  39.        LTYPE (vlax-get-property OBJECT "Linetype")
  40.        COL (vlax-get-property OBJECT "Color")
  41.        LTS (vlax-get-property OBJECT "LinetypeScale")
  42.        LW (vlax-get-property OBJECT "Lineweight")
  43.        IS_CLOSED (vlax-get-property OBJECT "Closed")
  44.        LISTA (vlax-get-property OBJECT "Coordinates")
  45.        LISTA (vlax-safearray->list (vlax-variant-value LISTA))
  46.        N  0
  47.        LISTA1 NIL
  48. )
  49. (while (setq X (nth N LISTA))
  50.    (setq NVER   (/ (length LISTA) 3.00)
  51.   LISTA1 (append LISTA1 (list X))
  52.   X      (nth (1+ N) LISTA)
  53.   LISTA1 (append LISTA1 (list X))
  54.   LISTAZ (append LISTAZ (list (nth (+ 2 N) LISTA)))
  55.   N      (+ 3 N)
  56.    )
  57. )
  58.   ;修改原变量
  59. (setq LISTB1 LISTA1)

  60. (setq PT (getpoint "\noffset到哪边: "))

  61. (setq N      (1- (length LISTA1))
  62.        LISTA1 (vlax-safearray-fill
  63.          (vlax-make-safearray vlax-vbdouble (cons 0 N))
  64.          LISTA1
  65.        )
  66.        OBJECT (vla-addlightweightpolyline *MODELSPACE* LISTA1)
  67.        ENAME  (vlax-vla-object->ename OBJECT)
  68. )

  69. (command "offset" DISTA ENAME PT "")
  70. (setq OBJECT1 (vlax-ename->vla-object (entlast)))
  71. (vlax-put-property OBJECT1 "Closed" IS_CLOSED)
  72. (setq LISTA1 (vlax-safearray->list
  73.          (vlax-variant-value
  74.     (vlax-get-property OBJECT1 "Coordinates")
  75.          )
  76.        )
  77.        N      0
  78.        LISTA  NIL
  79. )
  80. (entdel ENAME)
  81. (if (= (/ (length LISTA1) 2) NVER);比较点个数
  82.    (progn
  83.      (while (setq X (nth N LISTA1))
  84.        (setq LISTA (append LISTA (list X))
  85.       LISTA (append LISTA (list (nth (1+ N) LISTA1)))
  86.       LISTA (append LISTA (list (nth (/ N 2) LISTAZ)))
  87.       N   (+ 2 N)
  88.        )
  89.      )
  90.      (setq N  (1- (length LISTA))
  91.     LISTA  (vlax-safearray-fill
  92.       (vlax-make-safearray vlax-vbdouble (cons 0 N))
  93.       LISTA
  94.     )
  95.     OBJECT (vla-add3dpoly *MODELSPACE* LISTA)
  96.     ENAME  (vlax-vla-object->ename OBJECT1)
  97.      )
  98.      (entdel ENAME)
  99.      (vlax-put-property OBJECT "Closed" IS_CLOSED)
  100.      (vlax-put-property OBJECT "Layer" LAY)
  101.      (vlax-put-property OBJECT "Linetype" LTYPE)
  102.      (vlax-put-property OBJECT "Color" COL)
  103.      (vlax-put-property OBJECT "LinetypeScale" LTS)
  104.      (vlax-put-property OBJECT "Lineweight" LW)
  105.    )


  106.    ;LISTB1为原线点坐标表
  107.    ;LISTA1为新线点坐标表
  108.    ;新变量: LISTB1 NB
  109.    (progn
  110.      (setq LISTA (list (car LISTA1) (cadr LISTA1) (car LISTAZ))
  111.            n 2
  112.            NB 2
  113.            lenb (length LISTB1))
  114.      (while (setq X (nth N LISTA1))
  115.        (while (and (not (equal  (pointtolinedist
  116.                      (list (nth (- NB 2) LISTB1) (nth (1- NB) LISTB1))
  117.                      (list (nth NB LISTB1) (nth (1+ NB) LISTB1))
  118.                      (list x (nth (1+ N) LISTA1))
  119.                      )
  120.                     DISTA 1)) (< NB lenb))
  121.          (setq NB (+ 2 NB))
  122.          )
  123.        (if (< NB lenb)
  124.          (setq LISTA (append LISTA (list X))
  125.                LISTA (append LISTA (list (nth (1+ N) LISTA1)))
  126.                LISTA (append LISTA (list (nth (/ NB 2) LISTAZ)))
  127.          )
  128.          (setq LISTA (append LISTA (list X))
  129.                LISTA (append LISTA (list (nth (1+ N) LISTA1)))
  130.                LISTA (append LISTA (list (nth (/ N 2) LISTAZ)))
  131.          )
  132.        )
  133.        (setq  N (+ 2 N)
  134.               NB n)
  135.      )
  136.      (setq N  (1- (length LISTA))
  137.     LISTA  (vlax-safearray-fill
  138.       (vlax-make-safearray vlax-vbdouble (cons 0 N))
  139.       LISTA
  140.     )
  141.     OBJECT (vla-add3dpoly *MODELSPACE* LISTA)
  142.     ENAME  (vlax-vla-object->ename OBJECT1)
  143.      )
  144.      (entdel ENAME)
  145.      (vlax-put-property OBJECT "Closed" IS_CLOSED)
  146.      (vlax-put-property OBJECT "Layer" LAY)
  147.      (vlax-put-property OBJECT "Linetype" LTYPE)
  148.      (vlax-put-property OBJECT "Color" COL)
  149.      (vlax-put-property OBJECT "LinetypeScale" LTS)
  150.      (vlax-put-property OBJECT "Lineweight" LW)
  151.    )
  152.    ;(prompt     "\n该对象顶点数改变. 不能再offset该对象"   )
  153. )
  154.       )
  155.       (prompt "\n不能offset该对象!")
  156.     )
  157.     (setq ENAME (entsel "\n点取一条3dpoly或<退出>:"))
  158.   )
  159.   (princ)
  160. )

发表于 2014-5-10 17:38:35 | 显示全部楼层
运行出错啊,大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 20:04 , Processed in 0.190050 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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