找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 959|回复: 8

[求助] [求助]:[0206]如何处理绘製及復原的一次性

[复制链接]
发表于 2006-2-6 12:43:24 | 显示全部楼层 |阅读模式

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

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

×
[求助]:[0206]如何处理绘製及復原的一次性
请教各位高手们
小弟做了一个等分距离偏移的程序
但在执行程序时,绘製都是一段段的偏移
无法再画面内一次完成
且復原 undo 也是一段段还原
不知道该怎样处理解决此问题呢

烦请各位高手帮忙一下

谢谢~



(defun c:LOK ( )
(setvar "cmdecho" 0)
(setq p1 (getpoint "\n 起始点:"))
(setq p2 (getpoint "\n 长度点:"))
(setq p3 (getpoint "\n 宽度点:"))
(setq 2ar4 (getreal "\n D.等分距离.<75>:"))
(if (= 2ar4 nil)(setq 2ar4 75))
(setq en3:ang (angle p1 p2))
(setq en4:ang (angle p1 p3))
(setq dd (distance p1 p2))
(setq 2ar2 (fix (/ dd 2ar4)))
(setq ww (distance p1 p3))
(setq p4 (polar p1 en4:ang (/ ww 2)))
(setq p5 (polar p4 en3:ang dd))
(setq oss (getvar "osmode"))(setvar "osmode" 0)
(command "_.line" p1 p3 "")
(setq ob1 (entlast))
(setq 2ar5 0 )
(repeat 2ar2
   (setq 2ar5 (+ 2ar5 2ar4))
   (command "_.offset" 2ar5 ob1 p5 "")
)
(setvar "osmode" oss)
(prin1))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2006-2-6 14:00:10 | 显示全部楼层
  1. [FONT=courier new](defun c:LOK ()
  2.   (cmdla0)
  3.   (setq        p1   (getpoint "\n 起始点: ")
  4.         p2   (getpoint p1 "\n 长度点: ")
  5.         p3   (getpoint p1 "\n 宽度点: ")
  6.         2ar4 (getreal "\n D.等分距离.<75>:")
  7.   )
  8.   (if (= 2ar4 nil)
  9.     (setq 2ar4 75)
  10.   )
  11.   (setq        en3:ang        (angle p1 p2)
  12.         en4:ang        (angle p1 p3)
  13.         dd        (distance p1 p2)
  14.         2ar2        (fix (/ dd 2ar4))
  15.         ww        (distance p1 p3)
  16.         p4        (polar p1 en4:ang (/ ww 2))
  17.         p5        (polar p4 en3:ang dd)
  18.         oss        (getvar "osmode")
  19.   )
  20.   (setvar "osmode" 0)
  21.   (command "_.line" p1 p3 "")
  22.   (setq        ob1  (entlast)
  23.         2ar5 0
  24.   )
  25.   (repeat 2ar2
  26.     (setq 2ar5 (+ 2ar5 2ar4))
  27.     (command "_.offset" 2ar5 ob1 p5 "")
  28.   )
  29.   (setvar "osmode" oss)
  30.   (cmdla1)
  31. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-7 17:27:37 | 显示全部楼层
原来要如此设定,
另外这程序,如果使用 "entmake" 来绘制
不知道该怎样编写呢?
希望有高手可以解答一下
谢谢~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-2-8 06:51:31 | 显示全部楼层
以下是别的地方看到的写法
但想请问是否有在绘制产生时
速度更快的方法呢

[PHP]

(defun c:LOK (/ p1 p2 p3 p4 p5 2ar4 en3:ang en4:ang ww oss objLine dd
2ar2 obj1)
   (setvar "cmdecho" 0)

   ;changed here
   (setq p1 (getpoint "\n START POINT:"))
   (initget 32)
   (setq p2 (getpoint p1 "\n length POINT:"))
   (initget 32)
   (setq p3 (getpoint p1 "\n width POINT:"))
   ;;

   (setq 2ar4 (getreal "\n D.divide distance.<75>:"))
   (if (= 2ar4 nil)
     (setq 2ar4 75)
   )
   (setq en3:ang (angle p1 p2))
   (setq en4:ang (angle p1 p3))
   (setq dd (distance p1 p2))
   (setq 2ar2 (fix (/ dd 2ar4)))
   (setq ww (distance p1 p3))
   (setq p4 (polar p1 en4:ang (/ ww 2)))
   (setq p5 (polar p4 en3:ang dd))
   (setq oss (getvar "osmode"))

   ;changed here
   (setq objLine (vla-addline
     (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
     (vlax-3d-point p1)
     (vlax-3d-point p3)
     ))
   (setq obj1 (vlax-vla-object->ename objLine))
   ;;

   ;changed here
   (setvar "osmode" 0)
   (repeat 2ar2
     (command "_.offset" 2ar4 obj1 p5 "")
     (setq obj1 (entlast))
   )
   ;;

   (setvar "osmode" oss)
   (prin1)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2006-2-9 22:42:40 | 显示全部楼层

Re: [求助]:[0206]如何处理绘製及復原的一次性

最初由 tctabc 发布
[B][求助]:[0206]如何处理绘製及復原的一次性
请教各位高手们
小弟做了一个等分距离偏移的程序
但在执行程序时,绘製都是一段段的偏移
无法再画面内一次完成
且復原 undo 也是一段段还原
不知道该怎样处理解决此?.. [/B]



看了一下xyp1964  的可能有问题

:

  1. (defun c:LOK ( / 2ar2 2ar4 2ar5 ob1 p1 p2 p3)
  2.   (setvar "cmdecho" 0)
  3.   (if(and
  4.        (setq p1 (getpoint "\n 起始点:"))
  5.        (setq p2 (getpoint p1 "\n 长度点:"))
  6.        (setq p3 (getpoint p1 "\n 宽度点:"))
  7.      )
  8.      (progn
  9.         (or(setq 2ar4 (getreal "\n D.等分距离.<75>:"))
  10.            (setq 2ar4 75)
  11.         )
  12.        (setq 2ar2 (fix (/ (distance p1 p2) 2ar4)))
  13.            ;;如果p1p2  p1p3不垂直是不对的
  14.        (command "undo""group")
  15.        (command "_.line""none" p1 "none"p3 "")
  16.        (setq ob1 (entlast))
  17.        (setq 2ar5 0)
  18.        (repeat 2ar2
  19.          (setq 2ar5 (+ 2ar5 2ar4))
  20.          (command "_.offset" 2ar5 ob1 p3 "")
  21.        )
  22.        (command "undo""end")
  23.   ))
  24.   (prin1)
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-2-10 13:02:41 | 显示全部楼层

Re: Re: [求助]:[0206]如何处理绘製及復原的一次性

最初由 aeo 发布
[B]看了一下xyp1964 的可能有问题[/B]

仅仅探讨undo的设置问题,程序本身是否可靠没有考虑。

如果考虑实际功能可以参考以下“dfx(等分线)程序”:
[php](load "xyp_lib.vlx")  ;版本 V.20060122 (2003)
;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
★1·在acad.lsp中增加(load"xyp_lib.vlx")
■2·在每个程序内增加(load"xyp_lib.vlx")
■3·在command下,输入(load"xyp_lib.vlx")
■4·在菜单.mnl中增加(load"xyp_lib.vlx")
■5·将xyp_lib.vlx文件直接拽到cad屏幕
★通用函数下载地址:[/COLOR]
http://www.xdcad.net/forum/attachment.php?s=&postid=1606661
|;

;;;dfx(等分线)
(defun c:dfx (/ ss i s1 leng df n ll pt )
  (cmdla0)
  (setvar "plinewid" 0)
  (setvar "osmode" 0)
  (mkla "等分线" 3)
  (setq        NO1 (ureal 7 "" "\n等分数" NO1)
        NO2 (ureal 1 "" "\n线长" NO2)
        ss  (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
        i   -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq leng (vlax-curve-getDistAtParam s1 (vlax-curve-getEndParam s1))
          df   (/ leng NO1)
          n    0
    )
    (while (<= n no1)
      (setq ll        (* n df)
            pt        (vlax-curve-getPointAtDist
                  (vlax-ename->vla-object s1)
                  ll
                )
            n        (+ 1 n)
      )
      (xyp-Faxian s1 pt no2)
    )
  )
  (cmdla1)
)
(pxyp"dfx  (等分线)")[/php]
编译程序及效果:
http://www.xdcad.net/forum/showt ... y=&pagenumber=1
之14楼。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 03:59 , Processed in 0.189676 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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