明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10634|回复: 76

[源码] 渐进式 多重偏移,见图片效果

    [复制链接]
发表于 2013-10-30 19:31 | 显示全部楼层 |阅读模式
本帖最后由 荒野孤行 于 2015-6-23 19:28 编辑

渐进式多重偏移,图片效果如下:

附上源码:
;;; *****多重偏移 程序开始*****
(defun c:dcpy ()
  (setvar "pickadd" 1)
  (setvar "osmode" 15359)
  (setvar "cmdecho" 0)
  (princ "\n制作者QQ:583915572")
  (princ "\n★功能:多重偏移曲线.")
  (command "undo" "be")
  (princ "\n选取曲线对象:")
  (setq ss (ssget '((0 . "LINE,ARC,CIRCLE,ELLIPSE,LWPOLYLINE,SPLINE"))))
  (if (not ss)
    (progn (princ "\n提示:未选取曲线对象.\n") (exit))
  )
  (setq pydi (getdist "\n偏移距离<0.2>:"))
  (if (null pydi)
    (setq pydi 0.2)
  )
  (setq pydi_add (getdist "偏移距离增量<0>:"))
  (if (null pydi_add)
    (setq pydi_add 0)
  )
  (setq npy (getint "\n偏移次数<9>:"))
  (if (null npy)
    (setq npy 9)
  )
  (initget 1)
  (setq pt1 (getpoint "\n指定偏移方向:"))
  (setq i 0)
  (setvar "osmode" 0)
  (vl-load-com)
(repeat (sslength ss)
    (setq entnam (ssname ss i))
    (setq obj (vlax-ename->vla-object entnam))
    (setq len (vlax-curve-getdistatparam
                obj
                (vlax-curve-getendparam obj)
              )
    )
    (setq pt_center (vlax-curve-getpointatdist obj (/ len 2)))
    (setq entt (cons entnam (list pt_center)))
    (setq j 1)
    (setq pydis 0)
    (repeat npy
      (setq pydis (+ pydis pydi))
      (command "_.offset" pydis entt pt1 "")
      (repeat j (setq pydis (+ pydis pydi_add)))
      (setq j (1+ j))
    )
    (setq i (1+ i))
    (princ)
  )
  (setvar "osmode" 15359)
  (command "undo" "e")
  (princ)
)
;;;*****多重偏移 程序结束*****

本帖子中包含更多资源

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

x
"觉得好,就打赏"
    共1人打赏
发表于 2018-12-23 16:19 | 显示全部楼层
偏移后能否把偏移出来的东西变另外一层或者换另外一种颜色以做区分?
发表于 2024-1-20 10:58 | 显示全部楼层
能不能指定一段距离直接输入段数就出来渐进的偏移
发表于 2024-1-17 18:17 | 显示全部楼层

能不能写个   弧形投影的插件
发表于 2013-10-30 19:40 | 显示全部楼层
有点意思,顶一个。
发表于 2013-10-30 23:53 | 显示全部楼层
还不错。就是代码可以更完善一些,加入出错处理更好,另外对系统变量的修改要保存,完成程序后调用回来原来的系统变量,如setvar "pickadd" 1)
  (setvar "osmode" 15359)
  (setvar "cmdecho" 0) 前面关闭,后面要恢复。
对于(setq ss (ssget '((0 . "LINE,ARC,CIRCLE,ELLIPSE,LWPOLYLINE,SPLINE"))))
  (if (not ss)
    (progn (princ "\n提示:未选取曲线对象.\n") (exit))
  )
这段判断后直接(exit)退出,函数会有出错提示,一般是判断是否选择,选择为空,则不执行后面的程序,直接提示未选择就行。
(setq a 3 b 2)
(if (>a b)
(progn
(princ a)
(princ b)
)
(princ "a是小于B的")
)

对于选择偏移方向点的时候,不确定点不会终止程序,如果对我们前面输入的数据,如偏移距离,增量,或者次数有误,那么还得错误的执行一次才能返回,不太合理。如果没有指定偏移点,则不执行,或者提示一次,再选择一次。
个人意见,仅供参考。

评分

参与人数 1明经币 +1 收起 理由
wayne_myles + 1 很给力!

查看全部评分

 楼主| 发表于 2013-10-31 01:30 来自手机 | 显示全部楼层
edata 发表于 2013-10-30 23:53
还不错。就是代码可以更完善一些,加入出错处理更好,另外对系统变量的修改要保存,完成程序后调用回来原来 ...

可以根据自己的要求进行改进,用while就可以判定是否选择偏移点了。
发表于 2013-12-4 20:13 | 显示全部楼层
牛人漫天飞啊
发表于 2013-12-11 21:30 | 显示全部楼层
谢谢楼主的源码,学习一下。
发表于 2014-11-16 10:14 | 显示全部楼层
感谢楼主分享
发表于 2015-7-6 01:32 | 显示全部楼层
                  放开想象力
发表于 2015-7-6 09:02 | 显示全部楼层
感谢大师的分享
发表于 2015-7-6 09:06 | 显示全部楼层

渐进式 多重偏移



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

本版积分规则

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

GMT+8, 2024-5-7 21:19 , Processed in 0.257828 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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