找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2032|回复: 8

[LISP程序]:老外寫的修改圓半徑程序

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-11-30 08:41:15 | 显示全部楼层 |阅读模式

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

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

×
[php]; =============================================================================
; Filename    :   ChgRad.lsp
; Datum       :   07.11.01
; Author      :   jme
; Copyright   :   MENZI ENGINEERING GmbH
; Revision  1 :   18.01.05 jme - Selection mode added
; Revision  2 :   __.__.__ ___ -
; -----------------------------------------------------------------------------
; Description:
; Function to change the radius of circles.
; -----------------------------------------------------------------------------
; Known bugs:
; - None
; -----------------------------------------------------------------------------
; Global variables:
; Me:Err  Me:Nra  Me:Ora  Me:Smd  Me:Svr
; -----------------------------------------------------------------------------
; Internal LISP-functions:
; MeEndFunction  MeGetAssoc  MeGetRadius  MeStartFunction  MeUserError
; -----------------------------------------------------------------------------
; External LISP-functions:
;
; -----------------------------------------------------------------------------
; Version notes:
; AutoCAD:        Version:        Language:        AddIns:
; 14+                1.01                English                ...
; -----------------------------------------------------------------------------
;
; -- Message on loading -------------------------------------------------------
;
(princ "\nChgRad v1.01")
;
; == Main =====================================================================
;
(defun c:chgrad( / CurEnt CurSet EntLst FltLst TmpStr)
(MeStartFunction '("APERTURE" "AUTOSNAP" "CURSORSIZE" "OSMODE"))
(initget "Match Select")
(setq Me:Ora (cond
               (Me:Ora)
               ((> (getvar "CIRCLERAD") 0) (getvar "CIRCLERAD"))
               (1.0)
              )
       Me:Nra (cond
               (Me:Nra)
               ((> (getvar "CIRCLERAD") 0) (getvar "CIRCLERAD"))
               (1.0)
              )
       Me:Smd (cond (Me:Smd) ("Select"))
       TmpStr (strcat "\nSelection mode [Match/Select] <" Me:Smd ">: ")
       Me:Smd (cond ((getkword TmpStr)) (Me:Smd))
)
(if (eq Me:Smd "Select")
  (progn
   (princ "\nSelect circle(s)...")
   (setq CurSet (ssget '((0 . "CIRCLE"))))
  )
  (setq Me:Ora (MeGetRadius "\nSelect Circle or enter radius to match" Me:Ora)
        FltLst (list
               '(0 . "CIRCLE")
               '(-4 . ">=") (cons 40 (- Me:Ora 1E-6))
               '(-4 . "<=") (cons 40 (+ Me:Ora 1E-6))
               )
        CurSet (ssget "X" FltLst)
  )
)
(if CurSet
  (progn
   (setq Me:Nra (MeGetRadius "\nSelect Circle or enter new radius" Me:Nra))
   (while (setq CurEnt (ssname CurSet 0))
    (setq EntLst (entget CurEnt)
          EntLst (subst (cons 40 Me:Nra) (assoc 40 EntLst) EntLst)
    )
    (entmod EntLst)
    (ssdel CurEnt CurSet)
   )
  )
  (if (eq Me:Smd "Match") (alert "No matching circle(s) found..."))
)
(MeEndFunction)
)
;
; == Subs =====================================================================
;
; -- Function MeGetRadius
; Get the default radius by object or number.
; Arguments [Typ]:
;   Pmt = Prompt [STR]
;   Rad = Default radius [REAL]
; Return [Typ]:
;   > New radius [REAL]
; Notes:
;   None
;
(defun MeGetRadius (Pmt Rad / EntLst GoLoop RetVal TmpStr TmpVal)
(setq GoLoop T)
(while GoLoop
  (setvar "OSMODE" 512)
  (setvar "APERTURE" (getvar "PICKBOX"))
  (setvar "AUTOSNAP" 0)
  (setvar "CURSORSIZE" 1)
  (initget 128)
  (setq RetVal (getpoint (strcat Pmt " <" (rtos Rad) ">: ")))
  (setvar "OSMODE" 0)
  (setvar "APERTURE" (MeGetAssoc "APERTURE" Me:Svr))
  (setvar "AUTOSNAP" (MeGetAssoc "AUTOSNAP" Me:Svr))
  (setvar "CURSORSIZE" (MeGetAssoc "CURSORSIZE" Me:Svr))
  (cond
   ((= (type RetVal) 'LIST)
    (if (= (type (setq TmpVal (car (nentselp RetVal)))) 'ENAME)
     (progn
      (setq EntLst (entget TmpVal))
      (if (= (MeGetAssoc 0 EntLst) "CIRCLE")
       (setq RetVal (MeGetAssoc 40 EntLst)
             GoLoop nil
       )
       (prompt "selected object is not a Circle. ")
      )
     )
     (prompt "1 selected, 0 found. ")
    )
   )
   ((= (type RetVal) 'STR)
    (cond
     ((wcmatch RetVal "*[~0-9.-]*")
      (prompt "requires a decimal number. ")
     )
     ((minusp (atof RetVal))
      (prompt "number must be positive. ")
     )
     ((zerop (atof RetVal))
      (prompt "requires a number >0. ")
     )
     (T
      (setq RetVal (atof RetVal)
            GoLoop nil
      )
     )
    )
   )
   (T
    (setq GoLoop nil
          RetVal Rad
    )
   )
  )
)
RetVal
)
;
; -- Function MeGetAssoc
; Returns the assoc value of a DottedPair list.
; Arguments [Typ]:
;   Key = Key name [ALL]
; Return [Typ]:
;   > Associated value from list [ALL]
; Notes:
;   None
;
(defun MeGetAssoc (Key Lst) (cdr (assoc Key Lst)))
;
; -- User Error
;
(defun MeUserError (Msg)
(command) (command)
(if (not
      (member Msg
      '("Function cancelled" "console break" "quit / exit abort")
      )
     )
  (princ (strcat "\nError: " Msg))
)
(MeEndFunction)
(princ)
)
;
; -- Start function
;
(defun MeStartFunction (Lst)
(setvar "CMDECHO" 0)
(if (= (logand (getvar "UNDOCTL") 4) 4) (command "_.UNDO" "_GROUP"))
(setq Me:Err  *error*
       *error* MeUserError
       Me:Svr  (mapcar '(lambda (l) (cons l (getvar l))) Lst)
)
(princ)
)
;
; -- End function
;
(defun MeEndFunction ()
(if Me:Svr (mapcar '(lambda (l) (setvar (car l) (cdr l))) Me:Svr))
(setq Me:Svr  nil
       *error* Me:Err
)
(if (= (logand (getvar "UNDOCTL") 4) 4) (command "_.UNDO" "_END"))
(princ)
)
;
; == Copyright - Note (May be never deleted) ==================================
;
(princ "\n------------------------------------------------")
(princ "\n ?001-2005 MENZI ENGINEERING GmbH, Switzerland ")
(princ "\n------------------------------------------------")
(princ "\nType ChgRad in the command line to start the programm...")
(princ)
;
; == End ChgCircRad ===========================================================[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-1 02:07:22 | 显示全部楼层
改多个用ctrl+1特性管理工具就挺好用
改单个也可用夹点直接改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-12-7 17:42:28 | 显示全部楼层
16个隐藏在Windows XP系统背后的小窍门

--------------------------------------------------------------------------------

http://www.sina.com.cn 2006年12月07日 09:44 eNet硅谷动力

  这些Windows XP的窍门你也许不知道,但有可能很有用:  

  安装音乐:

  开始 > 运行 > “C:\Windows\system32\oobe\images\title.wma” > 确定

  让机器休眠(Hibernate):

  开始 > 关闭电脑… > 按Shift键”待机”就会变成”休眠”。

  隐藏的设备

  控制面板> 系统 > 硬件 > 设备管理器 > 选择菜单”查看”中”的显示隐藏的设备”。

  字符映射表

  开始 > 运行 > “charmap.exe” > 确定

  剪贴板查看器

  开始 > 运行 > “clipbrd.exe” &


   



gt; 确定

  Dr Watson

  开始 > 运行 > “drwtsn32.exe” > 确定

  IExpress Wizard(一个自解压包制作工具)

  开始 > 运行 > “iexpress.exe” > 确定

  老的Windows 媒体播放器 5.1

  开始 > 运行 > “mplay32.exe” > 确定

  ODBC 数据源管理器

  开始 > 运行 > “odbcad32.exe” > 确定

  对象包装程序

  开始 > 运行 > “packager.exe” > 确定

  系统性能监视器

  开始 > 运行 > “perfmon.exe” > 确定

  创建共享文件夹向导

  开始 > 运行 > “shrpubw.exe” > 确定

  文件签名验证工具

  开始 > 运行 > “sigverif.exe” > 确定

  系统配制编辑器

  开始 > 运行 > “sysedit.exe” > 确定

  驱动程序验证管理器

  开始 > 运行 > “verifier.exe” > 确定

  工作组聊天软件

  开始 > 运行 > “winchat.exe” > 确定
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-19 02:21 , Processed in 0.450801 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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