明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18246|回复: 45

[公告] 发帖专用LISP函数简写&常用函数

    [复制链接]
发表于 2011-1-28 02:44 | 显示全部楼层 |阅读模式
本帖最后由 caoyin 于 2011-9-8 12:18 编辑






-------------------------------------------------------------------------------------------------------------------------------------------------
有时候回帖对于字符较多的函数拼写起来实在麻烦,为了方便大家发帖回帖,故把一些常用而字符较长函数和代码加以简化和整理,大家可以在帖子中直接引用,这样可以节省大家的时间。

以下为本人临时整理,可能有谬误。根据使用频率以下内容将会有所增删或修正,欢迎大家提出增删和修改意见!


代码见2楼,刚发现一个问题:测试不方便,还要加载函数??!!
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

 楼主| 发表于 2011-1-28 04:15 | 显示全部楼层
本帖最后由 caoyin 于 2011-9-8 12:11 编辑
;;明经通道发帖专用LISP函数简写&常用函数(2011.1)
;;;红色部分即为直接使用的常量和函数
;;;http://bbs.mjtd.com/forum.php?mod=post&action=edit&fid=3&tid=85250&pid=450859&page=1

(setq En2Obj   vlax-ename->vla-object
      Obj2En   vlax-vla-object->ename
      2PI      (* PI 2)
      0.5PI    (/ PI 2)
      0.25PI   (/ PI 4)
;;常用VLA对象、集合
      *ACAD*  (vlax-get-acad-object)
      *DOC*   (vla-get-ActiveDocument *ACAD*)
      *DOCS*  (vla-get-Documents *ACAD*)
      *MS*    (vla-get-modelSpace *DOC*)
      *PS*    (vla-get-paperSpace *DOC*)
      *BLKS*  (vla-get-Blocks *DOC*)
      *LAYS*  (vla-get-Layers *DOC*)
      *LTS*   (vla-get-Linetypes *DOC*)
      *STS*   (vla-get-TextStyles *DOC*)
      *GRPS*  (vla-get-groups *DOC*)
      *DIMS*  (vla-get-DimStyles *DOC*)
      *LOUTS* (vla-get-Layouts *DOC*)
      *VPS*   (vla-get-Viewports *DOC*)
      *VS*    (vla-get-Views *DOC*)
      *DICS*  (vla-get-Dictionaries *DOC*)
;;常用的几个外部接口对象
      *FSO*   (vlax-get-or-create-object "Scripting.FileSystemObject")
      *WSH*   (vlax-get-or-create-object "wscript.shell")
      *SHELL*  (vlax-get-or-create-object "Shell.Application")
      *SCR*   (vlax-get-or-create-object "ScriptControl")
      *WBEM*  (vlax-get-or-create-object "WbemScripting.SWbemLocator")
)

;; [功能] 将弧度转换为十进制角度
;; [参数] ang---弧度
;; [返回] 十进制角度
(defun MJ:R2D (ANG) (* (/ ANG 180.0) PI))

;; [功能] 将十进制角度转换为弧度
;; [参数] ang---十进制角度
;; [返回] 弧度
(defun MJ:D2R (ANG) (/ (* ANG 180.0) PI))

;; [功能] 在当前视图状况下将图形单位转换为像素
(defun MJ:U2P (UN)
  (* UN (/ (cadr (getvar 'SCREENSIZE)) (getvar 'VIEWSIZE)))
)
;; [功能] 获取 0~1 之间的随机数 (by zml84)
(defun MJ:RAD ()
  (/ (rem (getvar "CPUTICKS") 1984) 1983)
)
;; [功能] 判断 X 是否是图元名
(defun MJ:enP (X) (= (type X) 'ENAME))

;; [功能] 判断 X 是否是选择集且长度不为 0
(defun MJ:ssP (x) (and (= (type X) 'PICKSET) (> (sslength X) 0)))

;; [功能] 判断 X 是否是字符串
(defun MJ:strP (X) (= (type X) 'STR))

;; [功能] 判断 X 是否是实数
(defun MJ:realP (x) (= (type X) 'REAL))

;; [功能] 判断 X 是否是整数
(defun MJ:intP (X) (= (type X) 'INT))

;; [功能] 判断 FileName 是否为文件且存在(替代针对文件的findfile)
;; [参数] FileName---字符串
;; [返回] 包含路径的文件名或 nil
(defun MJ:FileP (FileName)
  (if (and (MJ:STRP FileName)
           (setq FileName (findfile FileName))
           (not (vl-file-directory-p FileName))
      )
    FileName
  )
)

;; [功能] 将 ACI 索引颜色转换成 RGB 配色系统
(defun MJ:ACI->RGB (ACI / COL)
  (setq COL (vla-get-truecolor (vla-get-ActiveLayer *DOC*))))
  (if (not (vl-catch-all-apply 'vla-put-ColorIndex (list COL ACI)))
    (list (vla-get-red COL)
          (vla-get-green COL)
          (vla-get-blue COL)
    )
  )
)

;; [功能] 将 RGB 配色系统转换成 ACI 索引颜色
(defun MJ:RGB->ACI (R G B / COL ACI)
  (setq COL (vla-get-truecolor (vla-get-ActiveLayer *DOC*)))
  (vl-catch-all-apply
    '(lambda ()
       (vla-SetRGB COL R G B)
       (setq ACI (vla-get-ColorIndex COL))
     )
  )
  ACI
)
;; [功能] 将选择集转换为图元列表
;; [参数] SS---选择集
;; [返回] 表(图元列表长度 图元列表)
(defun MJ:SS->LIST (SS)
  (vl-remove-if-not 'MJ:enP (mapcar 'cadr (ssnamex SS)))
)
;; [功能] 根据当前文档的图形单位精度将实数转换为字符串
;; [参数] REL----实数
(defun MJ:RTOS (REL / DZIN)
  (setq DZIN (getvar 'DIMZIN))
  (setvar 'DIMZIN 0)
  (setq REL (rtos REL 2 (getvar 'LUPREC)))
  (setvar 'DIMZIN DZIN)
  REL
)
;; [功能] 遍历选择集对所包含的图元进行指定函数操作
;; [参数] SS----选择集
;;        FUN---函数名
;; [返回] 包含每个图元的操作结果的表
(defun MJ:SS-MAP (SS FUN / N LST)
  (repeat (setq N (sslength SS))
    (setq LST (cons (apply FUN (list (ssname SS (setq N (1- N))))) LST))
  )
  LST
)
;; [功能] 遍历选择集对所包含的图元进行指定函数操作
;; [参数] SS----选择集
;;        FUN---函数名
;; [返回] 最后一个图元的操作结果
(defun MJ:SS-FOR (SS FUN / N)
  (repeat (setq N (sslength SS))
    (apply FUN (list (ssname SS (setq N (1- N)))))
  )
)
;; [功能] 获取当前 AutoCAD 的版本
(defun MJ:ACAD-VAR () (atof (getvar "ACADVER")))
;; [功能] 获取两点的中点坐标
;; [参数] p1,p2---二维点或三维点,但两个表的长度要一致
;; [返回] 点
(defun MJ:MIDPOINT (P1 P2)
  (mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) P1 P2)
)
;; [功能] 获取 DXF 组码值
(defun MJ:DXF (IT LST)
  (cdr (assoc IT LST))
)
;; [功能] 获取在图元 en 之后产生的图元列表
;; [参数] en----图元名
;; [返回] 图元列表
;; [测试]1.(setq en (entlast))
;;         执行创建图元的命令,如 LINE,BOUNDARY
;;         (MJ:EntNextAll en)
;;       2.(MJ:EntNextAll (car(entsel)))
(defun MJ:EntNextAll (EN / LST)
  (if EN
    (while (setq EN (entnext EN))
      (if (not (member (cdr (assoc 0 (entget EN)))
                       '("ATTRIB" "VERTEX" "SEQEND")
               )
          )
        (setq LST (cons EN LST))
      )
    )
  )
  (reverse LST)
)

;; [功能] 打印列表中的数据
(defun MJ:Print-List (LST) (mapcar 'princ LST))

回复 支持 1 反对 0

使用道具 举报

发表于 2011-2-20 08:20 | 显示全部楼层
下了几十个lisp函数,,就贴在这儿了


本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-9 23:17 来自手机 | 显示全部楼层
谢谢C版分享的函数,对我们很有用。
发表于 2011-1-28 16:01 | 显示全部楼层
支持
发表于 2011-1-30 08:30 | 显示全部楼层
发表于 2011-1-30 12:17 | 显示全部楼层
支持,好!
发表于 2011-1-30 20:28 | 显示全部楼层
辛苦~~~ 顶下
发表于 2011-2-2 08:08 | 显示全部楼层
谢谢!兔年吉祥!
发表于 2011-2-16 06:54 | 显示全部楼层
感谢您的提供分享
快收藏起来
发表于 2011-2-16 21:10 | 显示全部楼层
发表于 2011-2-18 12:18 | 显示全部楼层
嗯,很好,希望能继续
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 20:24 , Processed in 0.400584 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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