明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: cj52000

[求助]求从多段线偏移某个线条的lisp程序?

  [复制链接]
发表于 2009-9-12 06:58:00 | 显示全部楼层
IS-ENAME在三楼
发表于 2009-9-12 11:23:00 | 显示全部楼层

双向偏移,好东东呀,

发表于 2009-9-13 09:04:00 | 显示全部楼层
  1. ;; 多段线逐段双向偏移
  2. (defun c:test823 ()
  3.   (CMDLA0)
  4.   (xyp-MkLaCo "TEST" 1)
  5.   (SETQ DIST (UDIST 1 "" "距离<输入或鼠标直接量取>" DIST nil))
  6.   (while (setq e (entsel "\n多段线: "))   
  7.     (if (member (xyp-get-dxf 0 (car e)) '("POLYLINE" "LWPOLYLINE"))
  8.       (progn
  9. (setq a  (xyp-get-Pts&Pte e)
  10.        p1 (car a)
  11.        p2 (cadr a)
  12.        S2 (XYP-ADD-LINE P1 P2)
  13. )
  14. (xyp-Offset (entlast) dist t t t)
  15.       )
  16.     )
  17.   )
  18.   (CMDLA1)
  19. )
回复 支持 1 反对 0

使用道具 举报

发表于 2009-9-13 11:56:00 | 显示全部楼层
cj52000发表于2009-9-11 22:12:00刚才我在2004下又试了一遍,还是提示上面的错误啊,请楼上的兄弟再看看啊

我试过不行

发表于 2009-9-13 12:01:00 | 显示全部楼层
错误: no function definition: VLAX-ENAME-&gt;VLA-OBJECT
发表于 2009-9-13 14:28:00 | 显示全部楼层


大家别笑,04年那时候还没空玩vl,vba
程序中command可以用相应另外写的函数替换
  1. ;| (plnff eplst) = 偏移多义线单段线段------------ok!!!------------------lxx.2004.7.29
  2. 说明: 1.支持polyline及lwpolyline. 2.仅可偏移单段.
  3. 参数: eplst = (entsel)返回的表.必须选中多义线!
  4. 返回: (list eplst p2 (distance p p2) el)
  5. 测试: (plnff (entsel))
  6. |;
  7. (defun plnff (eplst / e p1 p ent el el0  k seq plx plx2 p2 pt d)
  8.   (setq e  (car eplst)
  9. p1 (cadr eplst)
  10. p  (vlax-curve-getclosestpointto e p1);;确保取点.
  11.         ent(entget e))
  12.   (if (= "LWPOLYLINE" (cdr(assoc 0 ent))) ;;转为旧式pl格式.
  13.     (progn
  14.       (vl-cmdf "_.convertpoly" "h" e "")
  15.       (setq eL (entlast) el0 el ent (entget el) k T)
  16.     )
  17.     (setq el e el0 e)
  18.   )
  19.   (while (/= "SEQEND" (cdr(assoc 0 (setq seq (entget(setq el (entnext el))))))));;取seqend段.
  20.   (setq ent (subst (cons 70 0) (assoc 70 ent) ent) ;;改为不封闭.
  21.         plx (entget (car(nentselp p1)));;取点中段的实体表.
  22.        plx2 (entget(entnext (cdr(assoc -1 plx)))));;下一个.
  23.   (if (equal seq plx2)(setq plx2 (entget (entnext el0))));;如果是闭合段,下一个取pl线第一段.
  24.   (mapcar 'entmakex(mapcar '(lambda (y) (vl-remove-if '(lambda(x)(member (car x) '(-1 5 -2))) y))(list ent plx plx2 seq)));;生成新的pl段.
  25.   ;(if k (entdel el0));;删除多余实体.
  26.   (setq pt (getpoint p "\n偏移方向及距离<输入数字or点取>:")
  27. d  (distance p pt)
  28. el (entlast))
  29.   (vl-cmdf "_.offset" d (list el p) pt "")
  30.   ;(while (/= 0 (getvar "cmdactive")) (vl-cmdf pause))
  31.   (entdel el)
  32.   (if (equal el (entlast)) nil (list eplst d (entlast)))
  33. )

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2009-9-14 08:41:00 | 显示全部楼层
  1. ;;; 偏移多义线的某一段
  2. (defun c:t115 (/ bul dis dt-pt ent laste pt)
  3.   (p-s '("CMDECHO"
  4.   0
  5.   "OSMODE"
  6.   0
  7. )
  8.        t
  9.   )
  10.   (setq ent (usel4 0 "*polyline" "点取将要偏移的多义线的某一段"))
  11.   (setq dis (vlax-ldata-get "mydict" "dis"))
  12.   (setq dis (udist 3 "" "请输入偏移距离" dis nil))
  13.   (vlax-ldata-put "mydict" "dis" dis)
  14.   (setq dt-pt (upoint 7 "" "請拾點以决定偏移方向" dt-pt nil))
  15.   (setq pt  (cadr ent)
  16. ent (car ent)
  17.   )
  18.   (setq bul (th-pl-getsegat (th2o ent) (osnap pt "_nea")))
  19.   (cond
  20.     ((= (car bul) "kLine")
  21.      (setq laste (txt-mkline (txt-3rd bul) (txt-4th bul)))
  22.      (vl-cmdf "_.OFFSET" dis laste dt-pt "")
  23.      (entdel laste)
  24.     )
  25.     ((= (car bul) "kArc")
  26.      (vl-cmdf "_.ARC"
  27.        "C"
  28.        (txt-3rd bul)
  29.        (txt-4th bul)
  30.        (txt-5th bul)
  31.      )
  32.      (setq laste (entlast))
  33.      (vl-cmdf "_.OFFSET" dis laste dt-pt "")
  34.      (entdel laste)
  35.     )
  36.   )
  37.   (p-e)
  38. )
  39. (defun c:t116 (/ dis dt-pt ent pt seg)
  40.   (p-s '("cmdecho"
  41.   0
  42.   "osmode"
  43.   0
  44. )
  45.        t
  46.   )
  47.   (setq ent (usel4 0 "*polyline" "点取将要偏移的多义线的某一段"))
  48.   (setq dis (vlax-ldata-get "mydict" "dis"))
  49.   (setq dis (udist 3 "" "请输入偏移距离" dis nil))
  50.   (vlax-ldata-put "mydict" "dis" dis)
  51.   (setq dt-pt (upoint 3 "" "請拾取點以决定偏移方向" dt-pt nil))
  52.   (setq pt  (cadr ent)
  53. ent (car ent)
  54.   )
  55.   (setq seg (th-copy-polyseg ent pt))
  56.   (vl-cmdf "_.offset" dis (th2e seg) dt-pt "")
  57.   (vla-delete seg)
  58.   (p-e)
  59. );自定义函数加载网盘里的T2.VLX
发表于 2009-9-14 13:04:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-9-14 15:05:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-9-14 23:18:00 | 显示全部楼层

TANER兄的程序还是提示错误

t115 ; 错误: no function definition: P-S

烦请看看

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

本版积分规则

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

GMT+8, 2025-2-24 17:21 , Processed in 0.165793 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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