找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2597|回复: 5

[分享]:双边偏移直线(修改yunzhong80 的贴子)

[复制链接]
发表于 2006-9-16 19:37:10 | 显示全部楼层 |阅读模式

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

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

×
yunzhong80  编的双边偏移直线,只能选一条直线,并且每次都要输入偏移量,在此基础上我做了一点改进,此功能我在工作中确实好用,我也一直想写一个,水平有限一直没写成,刚好看到本论坛的yunzhong80  写的这个,再次感谢yunzhong80  
(defun c:lpy( )
(progn
(vl-load-com)
(setq k 0)
(setq cls (getvar "clayer"))
(setq clp (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq a  (getreal "\n输入单边偏移距离:") );如直接回车取上次值
(if (null a) (setq a (getvar "offsetdist")));
(setq aa (ssget ))
(setq f (sslength aa))
  (while (< k f)
  (setq ent1 (ssname aa k))  
(setq VL1  (vlax-ename->vla-object  ent1))
(setq ptst (vlax-get VL1 'startpoint)) ;求端点
(setq pten (vlax-get VL1 'endpoint)) ;求端点
(setq ptst (list (car ptst) (nth 1 ptst)))
(command "OFFSET" a ent1 ptst "" )
(setq bb (entlast))
(command "MIRROR" bb "" ptst pten "n" )
(command"erase" ent1 "" ) ;删除原直线,如想保留删去此行
  (setq k (1+ k))
  )   
(setvar "osmode" clp)
(setvar "cmdecho" 1 )
)
(princ)
)
(prompt "<<两侧偏移>>启动命令:lpy")
(princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 196个

财富等级: 日进斗金

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

使用道具 举报

发表于 2006-12-18 22:57:23 | 显示全部楼层
建议将以下程序合并进去,偏移后到当前图层
(defun c:OL( / ent ents)
(setvar "cmdecho" 1)
(setq ent (entlast))
(command "_.offset" pause)
(while (= (getvar "cmdactive") 1)
(command pause)
(if (not (equal ent (entlast)))
(progn
(setq ents (entget (entlast)))
(setq ents (subst (cons 8 (getvar "clayer")) (assoc 8 ents) ents))
(entmod ents)
)
)
)
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-31 16:34:44 | 显示全部楼层
;;;**************************************
;;; AyungerStudio 双边偏移曲线对象 函数  
;;;**************************************
(defun C:O2(/ ss1 entName1 OffDist n i sPt Pt1 Pt2 tAngle IsDelete IsCurLayer oldOSnap)
        ;(CMDINIT0);保存用户系统变量.
        (vl-load-com)
        (setq oldOSnap (getvar "OSmode"))
        (if (= #AY_OFF2ISDELETE nil) (setq #AY_OFF2ISDELETE "N"))
        (if (= #AY_OFF2ISCURLAYER nil) (setq #AY_OFF2ISCURLAYER "N"))
        (initget "S" 0)
        (setq OffDist (getdist (strcat "\n设置(S)/指定单向偏移距离<" (rtos (getvar "offsetdist")) ">:")))
        (if (= (Type OffDist) 'STR)
                (progn
                        (initget "Y N")
                        (setq IsDelete (getkword (strcat "\n是(Y)/否(N)删除原曲线对象?<" #AY_OFF2ISDELETE ">:")))
                        (if (Null IsDelete) (setq IsDelete #AY_OFF2ISDELETE) (setq #AY_OFF2ISDELETE IsDelete))
                        (initget "Y N")
                        (setq IsCurLayer (getkword (strcat "\n是(Y)/否(N)将偏移后的对象置到当前层?<" #AY_OFF2ISCURLAYER ">:")))
                        (if (Null IsCurLayer) (setq IsCurLayer #AY_OFF2ISCURLAYER) (setq #AY_OFF2ISDELETE IsCurLayer))
                        (setq OffDist (getdist (strcat "\n指定单向偏移距离<" (rtos (getvar "offsetdist")) ">:")))
                );end_progn
        );end_if
        (if (null OffDist) (setq OffDist (getvar "offsetdist")));
        (setq ss1 (ssget ))
        (setq n (sslength ss1))
        (setq i 0)
        (setvar "osmode" 0)
        (while (< i n)
                (setq entName1 (ssname ss1 i))
                (setq sPt (vlax-curve-getStartPoint entName1))
                (setq tAngle (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv entName1
                                                                                                                                                                 (vlax-curve-getparamatpoint entName1
                                                                                                                                                                         (vlax-curve-getclosestpointto entName1 sPt)))))
                (setq Pt1 (polar sPt (+ tAngle (/ pi 2.0)) OffDist))
                (setq Pt2 (polar sPt (- tAngle (/ pi 2.0)) OffDist))
                (command "_.OFFSET" OffDist entName1 Pt1 "")
                (if (= IsCurLayer "Y")
                        (progn
                                (setq ent1 (entget (entlast)))
                                (setq ent1 (subst (cons 8 (getvar "clayer")) (assoc 8 ent1) ent1))
                                (entmod ent1)
                        );end_progn
                );end_if
                (command "_.OFFSET" OffDist entName1 Pt2 "")
                (if (= IsCurLayer "Y")
                        (progn
                                (setq ent1 (entget (entlast)))
                                (setq ent1 (subst (cons 8 (getvar "clayer")) (assoc 8 ent1) ent1))
                                (entmod ent1)
                        );end_progn
                );end_if
                (if (= IsDelete "Y") (command"_.Erase" entName1 ""))
                (setq i (1+ i))
        );end_while
        (setvar "osmode" oldOSnap)
        (princ)
        ;(CMDINIT1);恢复用户系统变量.
);end_defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-4-2 22:29:37 | 显示全部楼层
能否改写一个能按可变距离、次数、方向的多次偏移命令?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 21:46 , Processed in 0.226297 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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