明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 7

[提问] 关于偏移的lisp,高手请指导

[复制链接]
发表于 2014-4-24 07:59 | 显示全部楼层 |阅读模式
可以批量偏移,如图是由1偏移出来的其他的线段2-7.是否可以实现线形和颜色预设定也可以是其他颜色线性,谢谢大师

本帖子中包含更多资源

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

x
发表于 2014-4-24 08:05 | 显示全部楼层
可以偏移后再改偏移后的物体性质。
发表于 2014-4-24 17:53 | 显示全部楼层
不支持自交的多段线,自交的样条曲线,以及无法偏移的各类线。
图层、线型必须加载好了的。
  1. (defun c:o1()
  2.   ;;(sk_offset 图层 颜色 线型 线宽)
  3.   ;(sk_offset nil nil nil nil)
  4.   (sk_offset "Text" 8 "ACAD_ISO03W100" 211)
  5.   (princ)
  6.   )
  7. ;;;;简单版偏移后改属性函数2014-4-24
  8. ;;;;(sk_offset 图层 颜色 线型 线宽)
  9. ;;;;;(sk_offset nil nil nil nil)
  10. (defun sk_offset(sk_lay sk_color sk_lt sk_lw / sk_dist1  ss p0 p1 p2 obj obj-offset obj-offset1 obj-offset2)
  11.   (vl-load-com)
  12.   (if sk_dist
  13.     (and(setq sk_dist1(getdist (strcat "\n请输入偏移距离["(rtos sk_dist) "]:")))(setq sk_dist sk_dist1))
  14.     (setq sk_dist(getdist "\n请输入偏移距离:"))
  15.     )   
  16.   (if sk_dist         
  17.     (while (and (setq ss(ssget ":E:S" '((0 . "*LINE,ELLIPSE,CIRCLE,ARC"))))
  18.                 )
  19.       (setq obj (vlax-ename->vla-object (ssname ss 0)))      
  20.       (vla-Highlight obj :vlax-true)      
  21.       (if (setq p0(getpoint "\n请指定偏移方向:"))             
  22.         (progn
  23.           (setq obj-offset1(vlax-invoke-method obj 'offset  sk_dist))
  24.           (setq obj-offset2(vlax-invoke-method obj 'offset  (* sk_dist -1)))          
  25.           (setq obj-offset1(vlax-safearray-get-element(vlax-variant-value obj-offset1) 0))
  26.           (setq obj-offset2(vlax-safearray-get-element(vlax-variant-value obj-offset2) 0))
  27.           (setq p1(vlax-curve-getClosestPointTo obj-offset1 p0)
  28.                 p2(vlax-curve-getClosestPointTo obj-offset2 p0))
  29.           (if (> (distance p0 p1) (distance p0 p2))
  30.             (progn(setq obj-offset obj-offset2)(vla-delete obj-offset1))
  31.             (progn(setq obj-offset obj-offset1)(vla-delete obj-offset2))
  32.             )
  33.       ;(and sk_lay (vlax-put-property 'layer obj-offset sk_lay))
  34.           (and sk_lay (vla-put-layer obj-offset sk_lay))
  35.           (and sk_color (vla-put-color obj-offset sk_color))
  36.           (and sk_lt (vla-put-linetype obj-offset sk_lt))
  37.           (and sk_lw (vla-put-lineweight obj-offset sk_lw))
  38.           )
  39.         )
  40.       (vla-Highlight obj :vlax-false)      
  41.       )
  42.     )  
  43.   (princ)
  44.   )
  45. (princ)

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 赞一个! E大又重出江湖啦

查看全部评分

发表于 2014-4-24 18:28 | 显示全部楼层
总之就是只能先偏移出去再进行相应的修改
发表于 2014-4-24 19:04 | 显示全部楼层
不具有通用性:

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-4-26 13:06 | 显示全部楼层
xyp1964 发表于 2014-4-24 19:04
不具有通用性:

最好是可以自己选择填写每条线的,线性,颜色,和图层
 楼主| 发表于 2014-4-26 13:09 | 显示全部楼层
edata 发表于 2014-4-24 17:53
不支持自交的多段线,自交的样条曲线,以及无法偏移的各类线。
图层、线型必须加载好了的。

没有5#“xyp1964”的效果啊,就是普通的偏移啊,麻烦给看一下
发表于 2014-4-26 14:38 | 显示全部楼层
非你可1 发表于 2014-4-26 13:09
没有5#“xyp1964”的效果啊,就是普通的偏移啊,麻烦给看一下

  1. (defun c:o2()
  2.   ;;(sk_myoffset 距离 图元名 偏移方向点 图层 颜色 线型 线宽)
  3.   ;(sk_myoffset 距离 图元名 偏移方向点 nil nil nil nil)
  4.   (if(and (setq ss(ssget ":E:S" '((0 . "line"))))
  5.           (setq p0 (getpoint "\n指定偏移方向:")))
  6.     (progn
  7.       (setq en(ssname ss 0))
  8.       (sk_myoffset 100 en p0 "Text" 1 "ACAD_ISO03W100" 211)
  9.       (sk_myoffset 150 en p0 "Text" 2 "door" nil)
  10.       (sk_myoffset 200 en p0 "Text" 3 "bylayer" nil)
  11.       (sk_myoffset 300 en p0 "Text" 4 "ACAD_ISO03W100" 211)
  12.       (sk_myoffset 800 en p0 "Text" 5 "ACAD_ISO03W100" 211)
  13.       )
  14.     )
  15.   (princ)
  16.   )
  17. ;;;;简单版偏移后改属性函数22  2014-4-26
  18. ;;;(sk_myoffset 距离 图元名 偏移方向点 图层 颜色 线型 线宽)
  19. (defun sk_myoffset(sk_dist en p0 sk_lay sk_color sk_lt sk_lw / OBJ OBJ-OFFSET OBJ-OFFSET1 OBJ-OFFSET2 P1 P2)            
  20.       (if (and sk_dist en p0)
  21.         (progn          
  22.           (setq obj (vlax-ename->vla-object en))
  23.           (vla-Highlight obj :vlax-true)
  24.           (setq obj-offset1(vlax-invoke-method obj 'offset  sk_dist))
  25.           (setq obj-offset2(vlax-invoke-method obj 'offset  (* sk_dist -1)))         
  26.           (setq obj-offset1(vlax-safearray-get-element(vlax-variant-value obj-offset1) 0))
  27.           (setq obj-offset2(vlax-safearray-get-element(vlax-variant-value obj-offset2) 0))
  28.           (setq p1(vlax-curve-getClosestPointTo obj-offset1 p0)
  29.                 p2(vlax-curve-getClosestPointTo obj-offset2 p0))
  30.           (if (> (distance p0 p1) (distance p0 p2))
  31.             (progn(setq obj-offset obj-offset2)(vla-delete obj-offset1))
  32.             (progn(setq obj-offset obj-offset1)(vla-delete obj-offset2))
  33.             )      
  34.           (and sk_lay (vla-put-layer obj-offset sk_lay))
  35.           (and sk_color (vla-put-color obj-offset sk_color))
  36.           (and sk_lt (vla-put-linetype obj-offset sk_lt))
  37.           (and sk_lw (vla-put-lineweight obj-offset sk_lw))
  38.           )
  39.         )
  40.       (vla-Highlight obj :vlax-false)
  41.   )
  42. (princ)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 06:55 , Processed in 0.260086 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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