明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 呆呆

[LISP]求救 谢谢呵呵!

  [复制链接]
 楼主| 发表于 2003-12-3 15:57:00 | 显示全部楼层
飞哥我想的情况和您的有点小小的差别  我以为就想CAD系统命令那样 只要输入一次偏移距离后就可以 连续选择要偏移的对象目标  
而您改的是 偏移一个目标后还要询问输入偏移距离 按下一个空格或者ENTER才能偏移下一个
 楼主| 发表于 2003-12-3 16:11:00 | 显示全部楼层
飞哥 您看我改的对否 我自己仔细的看了一下 吸取了您的教训 做了以下改动:
(defun c:op (/ oce ofe ode e1 dist)
  (setq ode (getvar "osmode"))
  (setq oce (getvar "cmdecho"))
  (setq ofe (getvar "clayer"))
  (setvar "osmode" 0)
  (initget "q")
  (setq dist (getreal (strcat "输入偏移距离[(Q)退出]<"
         (rtos (getvar "offsetdist"))
         ">:"
        )
      )
  )
  (if (not dist)
    (setq dist (getvar "offsetdist"))
  )

  (while  
      (setvar "cmdecho" 1)
      (command "offset" dist pause pause "")
      (setq e1 (entlast))
      (setvar "cmdecho" 0)
      (command "change" e1 "" "p" "la" ofe "")
  )
   (setvar "osmode" ode)
   (setvar "cmdecho" oce)
   (princ)
  )
 楼主| 发表于 2003-12-3 16:13:00 | 显示全部楼层
不好意思 刚才那个没有看到Q 现在我把Q去掉了 飞哥您看对吗?
(defun c:op (/ oce ofe ode e1 dist)
  (setq ode (getvar "osmode"))
  (setq oce (getvar "cmdecho"))
  (setq ofe (getvar "clayer"))
  (setvar "osmode" 0)
  (setq dist (getreal (strcat "输入偏移距离<"
         (rtos (getvar "offsetdist"))
         ">:"
        )
      )
  )
  (if (not dist)
    (setq dist (getvar "offsetdist"))
  )

  (while  
      (setvar "cmdecho" 1)
      (command "offset" dist pause pause "")
      (setq e1 (entlast))
      (setvar "cmdecho" 0)
      (command "change" e1 "" "p" "la" ofe "")
  )
   (setvar "osmode" ode)
   (setvar "cmdecho" oce)
   (princ)
  )
发表于 2003-12-3 16:16:00 | 显示全部楼层
你的程序是无法正确退出的,这在我回答你的时候已经说过这个问题了。。。
你看看这个。。。右键退出。。。


  1. (defun Sel (_types msg / gr ent m ty)
  2.   (defun com(ty tylst / i rVal)
  3.     (setq i 0)
  4.     (while (< i (length tylst))
  5.       (if (= ty (nth i tylst))
  6.         (progn (setq rVal t) (setq i (length tylst)))
  7.       )
  8.       (setq i (1+ i))
  9.     )
  10.     rVal
  11.   )
  12.   (prompt msg)
  13.   (setq m nil)
  14.   (while (not m)
  15.     (setq gr (grread 2 4 2))
  16.     (cond
  17.       ((= (car gr) 3)
  18.        (setq ent (ssget (cadr gr)))
  19.        (if (not (and ent (com (cdr (assoc 0 (entget (setq ent (ssname  ent 0))))) _types)))
  20.          
  21.          (setq ent nil)
  22.        )
  23.        (setq m t)
  24.       )
  25.       ((= (car gr) 25) (setq m t))
  26.     )
  27.   )
  28.   (princ "\n")
  29.   (if ent (list ent (cadr gr))
  30.     (if (= 25 (car gr)) 0 1))
  31. )

  32. (defun o_set ()  
  33.   (setq enta (sel '("LINE" "LWPOLYLINE" "POLYLINE" "SPLINE") "\n选择偏移对象..."))
  34.   (cond
  35.     ((= (type enta) 'LIST)
  36.      (setvar "cmdecho" 1)
  37.       (command "offset" dist enta pause "")
  38.       (setq e1 (entlast))
  39.       (setvar "cmdecho" 0)
  40.       (command "change" e1 "" "p" "la" ofe "")
  41.     )
  42.     ((= enta 0) (setq m nil))
  43.   )
  44. )
  45. (defun c:op (/ oce ofe ode e1)
  46.   (setq ode (getvar "osmode"))
  47.   (setq oce (getvar "cmdecho"))
  48.   (setq ofe (getvar "clayer"))
  49.   (setvar "osmode" 0)
  50.   (setq m t)
  51.   (setq        dist (getreal (strcat "输入偏移距离<"
  52.                               (rtos (getvar "offsetdist"))
  53.                               ">:"
  54.                       )
  55.              )
  56.   )
  57.   (if (not dist)
  58.     (setq dist (getvar "offsetdist"))
  59.   )
  60.   (while m
  61.     (o_set)
  62.   )
  63.   (setvar "cmdecho" oce)
  64.   (setvar "osmode" ode)
  65.   (prin1)
  66. )

 楼主| 发表于 2003-12-3 16:20:00 | 显示全部楼层
飞哥 不过也是不容易退出 只有按下ESC 才行
发表于 2003-12-3 16:27:00 | 显示全部楼层
难道你没看见我写在程序前面的提示???????????
右键(鼠标右键,这个总应该能够明白吧)退出。。。。。。。。。。。
 楼主| 发表于 2003-12-4 08:15:00 | 显示全部楼层
对不起飞哥 我当时发的时候没有看见你的程序  

请问飞哥 幻灯片.sld文件是怎么编译的
 楼主| 发表于 2003-12-4 08:21:00 | 显示全部楼层
还有飞哥您的程序还是不能正确的退出  而且您的程序不能选择偏移圆或者圆弧
发表于 2003-12-4 08:26:00 | 显示全部楼层
这个函数你应该能明白,在SEL函数的类型列表中加入圆或圆弧就可以选择圆或圆弧了。。。

在提示选择对象的时候如果点击鼠标的右键就退出程序了,非要我说的这么明白?
如果你是这样做的,说说点击后发生什么事
发表于 2003-12-4 17:07:00 | 显示全部楼层
;;前几天LYY网友不是有提供方法了吗?
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=13440

;;BY 龙龙仔(LUCAS)
;;我只加了你要的转换图层(假设有HIDDEN图层)
(defun C:POFFSET (/ HOLDECHO ENT)
  (command "_.offset"
           (progn
             (initget 7)
             (getdist "\n指定偏移距离: ")
           )
           (entsel "\n选取要偏移的对象: ")
  )
  (setq HOLDECHO (getvar "CMDECHO"))
  (setvar "cmdecho" 1)
  (while (/= 0 (getvar "cmdactive"))
    (command PAUSE)
    (setq ENT (entget (entlast)))
    (setq ENT (subst (cons 8 "hidden") (assoc 8 ENT) ENT))
    (entmod ENT)
  )
  (setvar "cmdecho" HOLDECHO)
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 08:47 , Processed in 0.177502 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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