1、获取系统桌面路径

  1. (strcat (vla-item (vlax-get (vlax-create-object "WScript.Shell" ) 'SpecialFolders) "Desktop") "\\")

2、lisp运行时间计算

  1. (setq time0 (getvar "date")) ;;计时1
  2. (setq leftDic(d-DelSame AA)) ;;字典法
  3. (setq time1 (getvar "date")) ;;计时2
  4. (setq leftRec(delsame AA)) ;;递归法
  5. (setq time2 (getvar "date")) ;;计时3
  6. (princ (strcat "\n字典方法耗时: " (rtos (* 86400 (- time1 time0)) 2 4) " 秒"))
  7. (princ (strcat "\n递归方法耗时: " (rtos (* 86400 (- time2 time1)) 2 4) " 秒"))

3、获取系统时间 (DIESEL方式获取)

  1. (menucmd "M=$(edtime,$(getvar,date), YYYY.M.D hh:mm:ss)")
  2. (menucmd "M=$(edtime,$(getvar,date),DDD\", \"D MON YYYY)") ->"周三, 8 八月 2007"
  3. (menucmd "M=$(edtime,$(getvar,date),YYYY.M.DD hh:mm:ss)") ->"2007.8.08 12:24:49"
  4. (menucmd "M=$(edtime,$(getvar,date),YYYY.MO.DD HH:MM DDDD)") ->"2021.07.17 10:01 星期六"
  5. (menucmd "M=$(edtime,$(getvar,date),YYYY\"年\"M\"月\"DD\"日\" hh\"时\"mm\"分\"ss\"秒\")") -> "2007年8月08日 12时26分06秒"
  6. (defun c:mydate(/ date dimzin str )
  7. (setq date(getvar 'cdate))
  8. (setq dimzin(getvar 'dimzin))
  9. (setvar 'dimzin 0)
  10. (setq str(rtos date 2 6))
  11. (setvar 'dimzin dimzin)
  12. (list (substr str 1 4) (substr str 5 2)(substr str 7 2)(substr str 10 2) (substr str 12 2) (substr str 14 2))
  13. )

DIESEL 函数参考

状态的检索、计算和显示均由 DIESEL 函数执行。
所有的函数最多只能包含 10 个参数,包括函数名本身。

函数 说明/样例
+(加) 返回数字 val1val2 、…、 val9 的和。
$(+, val1 [, val2, …, val9])
如果当前厚度被设定为 5,则以下 DIESEL 字符串返回 15。
$(+, $(getvar, thickness), 10)
-(减) 返回从数字 val1 中减去 val2val9 的结果。
$(-, val1 [, val2 , …, val9])
*(乘) 返回数字 val1val2 、…、 val9 的积。
$(*, val1 [, val2, …, val9])
/(除) 返回数字 val1 除以 val2 、…、 val9 的结果。
$(/, val1 [, val2, …, val9])
=(等于) 如果数字 val1val2 相等,则字符串返回 1;否则,返回 0。
$(=, val1, val2)
<(小于) 如果数字 val1 小于 val2 ,则字符串将返回 1;否则,返回 0。
$(<, val1, val2)
以下表达式用于获取 HPANG 的当前值;如果该值小于系统变量 USERR1 中存储的值,则将返回 1。如果 USERR1 中存储的值为 10.0 且 HPANG 的当前设置为 15.5,则以下字符串将返回 0。
$(<, $(getvar, hpang), $(getvar, userr1))
>(大于) 如果数字 val1 大于 val2 ,则字符串返回 1;否则,返回 0。
$(>, val1, val2)
!=(不等于) 如果数字 val1val2 不相等,则字符串返回 1;否则,返回 0。
$(!=, val1, val2)
<=(小于或等于) 如果数字 val1 小于或等于 val2 ,则字符串返回 1;否则,返回 0。
$(<=, val1, val2)
>=(大于或等于) 如果数字 val1 大于或等于 val2 ,则字符串返回 1;否则,返回 0。
$(>=, val1, val2)
并且 返回整数 val1val9 的按位逻辑与。
$(and, val1 [, val2,…, val9])
angtos 按指定的格式和精度返回角度值。
$(angtos, value [, mode, precision])
modeprecision 指定的格式将给定的 value 作为角度值进行编辑,与类似的 AutoLISP 函数的定义一样。如果 modeprecision 被省略,则使用由 UNITS 命令选择的当前值。
注: AutoLISP 在 AutoCAD LT 中不可用。
可应用以下 mode值:
- 0,表示度
- 1,表示度/分/秒
- 2,表示百分度
- 3,表示弧度
- 4,表示勘测单位
Edtime 返回基于指定图片的格式化的日期和时间。
$(edtime, time, picture)
编辑由 time 指定的 Julian 日期(例如,根据给定的 picture$(getvar,date) 获取)。 picture 由被具体日期和时间代替的格式短语组成。不能解释为格式短语的字符被完整地复制到 $(edtime) 的结果中。格式短语的定义如下表所示。
例如,假定日期为 1998 年 9 月 5 日星期六,时间为 4:53:17.506,则 edtime 的相应格式短语和输出样例如下所示:
- D - 5
- DD - 05
- DDD - Sat
- DDDD - Saturday
- M - 9
- MO - 09
- MON - Sep
- MONTH - September
- YY - 98
- YYYY - 1998
- H - 4
- HH - 04
- MM - 53
- SS - 17
- MSEC - 506
- AM/PM - AM
- am/pm - am
- A/P - A
- a/p - a

如上表所示,应该输入完整的 AM/PM 短语。如果仅使用 AM,则 A 将按字面复制而 M 将返回当前月份。
如果图片中出现任何 AM/PM 短语,则 H 和 HH 短语将按 12 小时国内时钟 (12:00-12:59 1:00-11:59) 编辑时间,而不是按 24 小时时钟 (00:00-23:59) 编辑时间。
下面的样例使用上表中的日期和时间。请注意,由于逗号被读为参数分隔符,因此必须将它括在引号中。
$(edtime, $(getvar,date), DDD”,” DD MON YYYY - H:MMam/pm)
该表达式返回以下结果:
Sat, 5 Sep 1998 - 4:53am
如果 time 为 0,则使用执行最外层宏时的时间和日期。这避免了对 $(getvar,date) 的冗长而费时的多次调用,并保证所有由多个 $(edtime) 宏组成的字符串都使用相同的时间。 | | eq | 如果字符串 val1val2 相同,则字符串返回 1;否则,返回 0。
$(eq, val1, val2)
以下表达式用于获取当前图层的名称;如果该名称与 USERS1 (USERS1-5) 系统变量中存储的字符串值相匹配,则将返回 1。假设字符串“PART12”存储在 USERS1 中,并且当前图层相同。
注: USERS1-5 系统变量在 AutoCAD LT 中不可用。
$(eq, $(getvar, users1), $(getvar, clayer))
该表达式返回以下结果:
1 | | Eval | 将字符串 str 传给 DIESEL 计算器,并返回计算结果。
$(eval, str) | | fix | 通过舍弃小数部分,将实数数字 截断为整数。
$(fix, value) | | Getenv | 返回环境变量 varname 的值。
$(getenv, varname)
如果未定义具有该名称的变量,则返回空字符串。 | | Getvar | 返回具有给定 varname 的系统变量的值。
$(getvar, varname) | | if | 根据条件计算表达式。
$(if, expr, dotrue [, dofalse])
如果 expr 为非零,则进行计算并返回 dotrue 。否则,进行计算并返回 dofalse 。请注意,不计算 expr 未选择的分支。 | | 索引颜色 | 返回以逗号分隔的字符串中的指定成员。
$(index, which, string)
假定 string 参数包含一个或多个由宏参数分隔符字符(逗号)分隔的值。 which 参数选择这些值中的一个值进行提取,第一项编号为 0。此函数通常用于从 $(getvar) 返回的点坐标中提取 XYZ 坐标值。
使用此函数,应用程序可从 USERS1-5 系统变量中检索存储为以逗号分隔的字符串的值。
注: USERS1-5 系统变量在 AutoCAD LT 中不可用。 | | nth | 计算并返回由 which 选定的参数。
$(nth, which, arg0 [, arg1,…, arg7])
如果 which 为 0,则 nth 返回 arg0 ,依此类推。请注意, $(nth)$(index) 之间的区别; $(nth) 将一系列参数中的一个返回给函数,而 $(index) 从作为单个参数传递的以逗号分隔的字符串中提取值。不计算 which 未选择的参数。 | | 或 | 返回整数 val1val9 的按位逻辑或。
$(or, val1 [, val2,…, val9]) | | Rtos | 按指定的格式和精度返回实数值。
$(rtos, value [, mode, precision])
将给定的 作为实数进行编辑,按照下面两个变量指定的格式: modeprecision。 如果省略 modeprecision ,则使用由 UNITS 命令选择的当前值。 | | strlen | 返回 string 的字符长度。
$(strlen, string) | | Substr | 返回 string 的子串,该子串从字符 start 开始,长度为 length
$(substr, string, start [, length])
字符串中的字符从 1 开始编号。如果省略 length ,则返回所有剩余字符串。 | | 上 | 返回 string 按当前地区的规则转换为大写的结果。
$(upper, string) | | xor | 返回整数 val1val9 的按位逻辑异或。
$(xor, val1 [, val2,…, val9]) |

4、限定整数输入,其他限定类似

  1. (setq initgetlst '(1 2 3 4 5))
  2. (while (not(member (setq getinputNum (getint "\n输入选项[1/2/3/4/5]: ")) initgetlst))
  3. (princ "\n请输入规定的整数值")
  4. )

5、Lisp创建文件夹

  1. (vl-mkdir "d:\\ab") ; D盘建立ab文件夹
  2. ;lisp创建文件夹
  3. ;方法一
  4. (defun CreateFolder (s / fso )
  5. (setq fso (vlax-create-object "Scripting.FileSystemObject"))
  6. (vlax-invoke-method fso 'CreateFolder s)
  7. (vlax-release-object fso)
  8. )
  9. (createfolder "C:\\Users\\Admin\\Desktop\\26456")
  10. ;方法二
  11. (and (not (findfile "c:\\mydirectory")) (vl-mkdir "C:\\Users\\Admin\\Desktop\\46946"))

6、简单读写文件

  1. (if (findfile (vl-filename-directory (setq path "D:\\我的插件-懒猪\\seting.ini")))
  2. (if (and (findfile path) (/= (setq str (vl-string-trim " " (read-line (setq file (open path "r"))))) ""))
  3. (progn
  4. (setq seting (read str))
  5. (close file)
  6. )
  7. )
  8. (vl-mkdir (vl-filename-directory path))
  9. )
  10. (defun putseting(lst / file)
  11. (setq file (open "D:\\我的插件-懒猪\\seting.ini" "w"))
  12. (write-line (vl-prin1-to-string lst) file)
  13. (close file)
  14. )

7、取得多段线顶点表的最短代码

  1. (defun getptlst (en)
  2. (mapcar 'cdr (vl-remove-if ''((x) (/= 10 (car x))) (entget en)))
  3. )

8、复制文件到另一个目录

  1. (setq fso (vlax-create-object "Scripting.FileSystemObject"))
  2. (vlax-invoke fso "CopyFile" flpath (getvar "dwgprefix"))

(参考 https://blog.csdn.net/yxp_xa/article/details/73158988

9、文件类型过滤方法

  1. ;;;----------------------------------------------------;
  2. ;;;功能: 获得选择的文件列表 ;
  3. ;;;输入: msg 提示 如:"请选择文件:" filetype "文件类型" fileextension 文件后缀名列表;
  4. ;;;输出: 文件路径列表 ;
  5. ;;;说明: 2017 10.09 ;
  6. ;;;示例(setq aa2 (getfiles "选择文件:" "jpg" '( ".jpg" ".png" ".bmp") ));
  7. (defun getfiles(msg filetype fileextension / path pf file)
  8. (setq lastfolder (getvar "Dwgprefix"))
  9. (setq pf (getfiled msg (strcat "" lastfolder "") filetype 0))
  10. (setq path (vl-filename-directory pf))
  11. (setq imglist (vl-directory-files path "*" ))
  12. (setq imglist(vl-remove "." imglist))
  13. (setq imglist(vl-remove ".." imglist))
  14. (setq imglist(vl-sort imglist '>) )
  15. (foreach x imglist
  16. (if (member (vl-filename-extension x) fileextension )
  17. (setq file (cons (strcat path "\\" x ) file))
  18. )
  19. )
  20. file
  21. )
  22. ;'文件过滤方法exp "mp4文件;avi文件;wmv文件|*.mp4;*.avi;*.wmv"
  23. ;(DCLGETFILES "*|*.jpg|*.png|*.bmp|" )
  24. ;(dclgetfiles "图片|*.jpg;*.png;*.bmp" )
  25. (defun dclgetfiles(filters / file_list getdocs)
  26. (if (not dcl_SelectFiles)
  27. (command "opendcl")
  28. )
  29. (setq file_list (dcl_SelectFiles filters ; Filters
  30. "选择文件" ; Title
  31. (if g:lastfolder
  32. g:lastfolder
  33. (getvar "DWGPREFIX")
  34. )
  35. )
  36. )
  37. (if file_list
  38. (progn
  39. (setq g:lastfolder (vl-filename-directory (car file_list)))
  40. )
  41. )
  42. file_list
  43. )

10、使用通配符搜索匿名块时,通配符要进行转义,使用脱字符`进行转义后方可通配!

11、获取CAD的安装路径

  1. (Vla-Get-Path (Vlax-Get-Acad-Object))

12、Odcl向CAD发送命令,下次空格或回车有效

  1. (dcl-SendString "abc ")

13、获取句柄,通过句柄获取图元名

  1. (setq handle (cdr (assoc 5 (entget (car (entsel))))))
  2. (handent handle)

14、获取系统时间并报时

  1. (defun c:times ()
  2. (setq time (substr (rtos (getvar "cdate") 2 12) 10 4))
  3. (setq hh (itoa(atoi (substr time 1 2))))
  4. (setq mm (itoa(atoi (substr time 3 2))))
  5. (setq time(strcat "现在时间" hh "点" mm "分"))
  6. (vlax-invoke-method (vlax-create-object "Sapi.SpVoice") "Speak" time 0)
  7. )

15、vlisp过滤选择;vlsp选择、亮显obj选择集和取消亮显

  1. (vla-highlight newSet 1)
  2. (vla-highlight newSet 0)

全选为object对象

  1. ;;说明:全选为object对象
  2. (defun c:al-select()
  3. (vl-load-com)
  4. (setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
  5. (setq ssets (vla-get-selectionsets thisdrawing))
  6. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list ssets "$Set")))
  7. (setq newSet (vla-add ssets "$Set"))
  8. (progn
  9. (vla-delete (vla-item ssets "$Set"))
  10. (setq newSet (vla-add ssets "$Set"))
  11. );progn
  12. );if
  13. (vla-Select newSet acSelectionSetAll)
  14. (vla-Highlight newSet 1)
  15. );defun

过滤选择

  1. ;;说明:过滤选择
  2. ;;参数:lst:过滤表
  3. ;;'((0 . "INSERT0") (1 . "INSERT1") (2 . "INSERT2") (3 . "INSERT3") (4 . "INSERT4"))
  4. (defun al-selectonscreen(lst / dxflst filter_code filter_value newset ssets thisdrawing)
  5. (vl-load-com)
  6. (setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
  7. (setq ssets (vla-get-selectionsets thisdrawing))
  8. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list ssets "SS1")))
  9. (setq newSet (vla-add ssets "SS1"))
  10. (progn
  11. (vla-delete (vla-item ssets "SS1"))
  12. (setq newSet (vla-add ssets "SS1"))
  13. )
  14. )
  15. (setq dxflst (list (mapcar 'car lst) (mapcar 'cdr lst)))
  16. (setq filter_code (vlax-make-safearray vlax-vbinteger (cons 0 (- (length (car dxflst)) 1))))
  17. (setq filter_value (vlax-make-safearray vlax-vbvariant (cons 0 (- (length (cadr dxflst)) 1))))
  18. (vlax-safearray-fill filter_code (car dxflst))
  19. (vlax-safearray-fill filter_value (cadr dxflst))
  20. (vla-selectOnScreen newSet filter_code filter_value)
  21. newSet
  22. )

点选图元为object对象

  1. ;;说明:点选图元为object对象
  2. ;;参数:opstr:提示
  3. ;;返回:选中则返回图元object对象,否则返回nil
  4. (defun al-selectatpoint (opstr / util)
  5. (vl-load-com)
  6. (setq util (vla-get-utility (vla-get-activedocument (vlax-get-acad-object))))
  7. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-getentity (list util 'obj 'ip opstr)))
  8. nil
  9. (progn
  10. ;(vla-Highlight obj 1)
  11. obj
  12. )
  13. )
  14. )

16、获取文字长度

  1. ;;说明:获取文字长度
  2. ;;参数:e:图元名
  3. ;;返回:文字长度 (BF-ent-textlen (car (entsel)))
  4. (defun BF-ent-textlen (e / bf-str->lst data lenlst lst)
  5. (defun BF-str->lst (str del / pos)
  6. (if (setq pos (vl-string-search del str))
  7. (cons (substr str 1 pos)
  8. (BF-str->lst (substr str (+ pos 1 (strlen del))) del)
  9. )
  10. (list str)
  11. )
  12. )
  13. (cond
  14. ((= (cdr (assoc 0 (setq data (entget e)))) "TEXT")
  15. (car (apply 'mapcar (cons '- (reverse (textbox (entget e))))))
  16. )
  17. ((= (cdr (assoc 0 data)) "MTEXT")
  18. (setq lst (BF-str->lst (cdr (assoc 1 data)) "\\P"))
  19. (foreach str lst
  20. (if (/= str "")
  21. (setq lenlst (cons (car (apply 'mapcar (cons '- (reverse (textbox (list (cons 0 "text") (assoc 40 data) (cons 1 str) (assoc 7 data))))))) lenlst))
  22. )
  23. )
  24. (apply 'max lenlst)
  25. )
  26. )
  27. )

17、图元的最小包围盒

  1. ;;;name:BF-ent-getbox
  2. ;;;desc:图元的最小包围盒
  3. ;;;arg:ent:图元名
  4. ;;;arg:offset:外框偏移距离
  5. ;;;等于0 / nil,不偏移
  6. ;;;大于0,向外偏移
  7. ;;;小于0,向内偏移
  8. ;;;return:外框(偏移后)的左下,右上角点
  9. ;;;example:(BF-ent-getbox (car(entsel)) 0.1)
  10. (defun BF-ent-getbox (ent offset / bf-list- bf-list+ lst obj p1 p2 p3 p4)
  11. (defun BF-list+ (lst1 lst2) (mapcar '+ lst1 lst2))
  12. (defun BF-list- (lst1 lst2) (mapcar '- lst1 lst2))
  13. (setq obj (vlax-ename->vla-object ent))
  14. (vla-GetBoundingBox obj 'p1 'p3)
  15. (setq p1 (vlax-safearray->list p1)
  16. p3 (vlax-safearray->list p3)
  17. )
  18. (if (= "SPLINE" (cdr (assoc 0 (entget ent))))
  19. (progn
  20. (setq lst
  21. (mapcar
  22. '(lambda (a b)
  23. (vlax-curve-getClosestPointToProjection ent a b t)
  24. )
  25. (list p1
  26. (list (car p1) (cadr p3) (caddr p1))
  27. p3
  28. (list (car p3) (cadr p1) (caddr p1))
  29. )
  30. '((1.0 0 0) (0 -1.0 0) (-1.0 0 0) (0 1.0 0))
  31. )
  32. )
  33. (setq
  34. p1 (apply 'mapcar (cons 'min lst))
  35. p3 (apply 'mapcar (cons 'max lst))
  36. )
  37. )
  38. )
  39. (if (or (not offset) (equal offset 0 0.0001))
  40. (list p1 p3)
  41. (list
  42. (BF-list- p1 (list offset offset 0))
  43. (BF-list+ p3 (list offset offset 0))
  44. )
  45. )
  46. )
  47. ;;与文字平行
  48. (defun getTextBox (en / b enx h j l n o r w)
  49. (cond
  50. ((= 'VLA-OBJECT (type en)) (setq enx (entget (vlax-vla-object->ename en))))
  51. ((= 'ename (type en)) (setq enx (entget en)))
  52. ((= 'list (type en)) (setq enx en))
  53. )
  54. (setq l
  55. (cond
  56. ((= "TEXT" (cdr (assoc 0 enx)))
  57. (setq
  58. b (cdr (assoc 10 enx))
  59. r (cdr (assoc 50 enx))
  60. l (textbox enx)
  61. n (cdr (assoc 210 enx))
  62. )
  63. (list
  64. (list (caar l) (cadar l))
  65. (list (caadr l) (cadar l))
  66. (list (caadr l) (cadadr l))
  67. (list (caar l) (cadadr l))
  68. )
  69. )
  70. ((= "MTEXT" (cdr (assoc 0 enx)))
  71. (setq
  72. n (cdr (assoc 210 enx))
  73. b (trans (cdr (assoc 10 enx)) 0 n)
  74. r (angle '(0.0 0.0 0.0) (trans (cdr (assoc 11 enx)) 0 n))
  75. w (cdr (assoc 42 enx))
  76. h (cdr (assoc 43 enx))
  77. j (cdr (assoc 71 enx))
  78. o (list
  79. (cond
  80. ((member j '(2 5 8)) (/ w -2.0))
  81. ((member j '(3 6 9)) (- w))
  82. (0.0)
  83. )
  84. (cond
  85. ((member j '(1 2 3)) (- h))
  86. ((member j '(4 5 6)) (/ h -2.0))
  87. (0.0)
  88. )
  89. )
  90. )
  91. (list
  92. (list (car o) (cadr o))
  93. (list (+ (car o) w) (cadr o))
  94. (list (+ (car o) w) (+ (cadr o) h))
  95. (list (car o) (+ (cadr o) h))
  96. )
  97. )
  98. )
  99. )
  100. (setq l
  101. (
  102. (lambda (m)
  103. (mapcar
  104. '(lambda (p)
  105. (mapcar '+(mapcar '(lambda (r) (apply '+ (mapcar '* r p))) m) b)
  106. )
  107. l
  108. )
  109. )
  110. (list
  111. (list (cos r) (sin (- r)) 0.0)
  112. (list (sin r) (cos r) 0.0)
  113. '(0.0 0.0 1.0)
  114. )
  115. )
  116. )
  117. (mapcar '(lambda (x) (trans x n 0)) l)
  118. )

18、lisp读取excel单元格

  1. Vlax-Get (vlax-variant-value (vlax-get-property cells "item" 2 8)) 'Formula)

19、获取图元扩展属性

  1. (ENTGET (CAR (ENTSEL)) '("*"))

20、获取网络时间(大海版)

  1. ;;用get方式读取网页信息
  2. ;;返回页面文本字符串
  3. ;;连接不上返回nil
  4. (defun try-get-url(url / ob html)
  5. (setq ob (vlax-create-object "Msxml2.XMLHTTP"))
  6. (vlax-invoke-method ob "open" "get" url "false")
  7. (vlax-invoke-method ob 'setRequestHeader "If-Modified-Since" "q");强制刷新
  8. (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list ob "send")))
  9. (setq html nil);无网络连接
  10. (setq html (vlax-get-property ob "responseText"))
  11. )
  12. (vlax-release-object ob)
  13. html
  14. )
  15. ;;由给定的日期返回儒略日期(公元前4713)
  16. ;;(try-Date2Value 2016 4 11)
  17. (defun try-Date2Value (Year Month Day / a_date b_date c_date e_date f_date juliandate)
  18. (if (< Month 3)(setq Year(1- Year)Month(+ 12 Month)))
  19. (setq
  20. a_date (fix(/ Year 100.))
  21. b_date (fix(/ a_date 4.));每41461
  22. c_date (- 2.0 (- a_date b_date))
  23. e_date (fix(/ (* 1461. (+ Year 4716.0)) 4));多少个4
  24. f_date (fix(/ (* 153. (1+ Month)) 5.))
  25. JulianDate (fix(+ c_date Day e_date f_date (- 1524)))
  26. )
  27. )
  28. ;;由儒略日期返回普通日期
  29. ;;(try-Value2Date 2457490);> '(25016 4 11)
  30. (defun try-Value2Date (Value / _af _bf _cf _df _ef _ff _wf _xf _zf day month return year)
  31. (if (> Value 0)
  32. (setq
  33. _zF (fix Value)
  34. _wF (fix(/ (- _zF 1867216.25) 36524.25))
  35. _xF (fix(/ _wF 4.))
  36. _aF (+ _zF 1 _wF (- _xF))
  37. _bF (+ _aF 1524.)
  38. _cF (fix(/ (- _bF 122.1) 365.25))
  39. _dF (fix(* 365.25 _cF))
  40. _eF (fix(/ (- _bF _dF) 30.6001))
  41. _fF (fix(* 30.6001 _eF))
  42. Day (- _bF _dF _fF)
  43. Month (if (< (1- _eF)13)(1- _eF)(- _eF 13))
  44. Year (if(< Month 3)(- _cF 4715)(- _cF 4716))
  45. Return (list (fix Year)(fix Month)(fix Day))
  46. )
  47. )
  48. )
  49. ;;将时间戳(毫秒|实数)转换为北京时间
  50. ;;返回(0年 1月 2日 3时 4分 5秒 6毫秒)
  51. (defun try-time-stamp2beijing (time / a b h hf hm mm mmf s sf y-m-d)
  52. (setq
  53. a(+ time 210866832000000.0);加上格林威治时间+8小时(毫秒)
  54. b(fix(/ a 86400000));返回儒略天数
  55. y-m-d(try-Value2Date b)
  56. h(/(- a (* b 86400000.0))3600000.0)
  57. hf(fix h)
  58. mm(*(- h hf)60)
  59. mmf(fix mm)
  60. s(*(- mm mmf)60)
  61. sf(fix s)
  62. hm(fix(*(- s sf)1000))
  63. )
  64. (append y-m-d (list hf mmf sf hm))
  65. )
  66. ;;获取网络时间,接口为京东时间接口
  67. ;;返回(0年 1月 2日 3时 4分 5秒 6毫秒)
  68. (defun try-time-getbeijing (/ time)
  69. (setq time(substr(try-get-url "https://api.m.jd.com/client.action?functionId=queryMaterialProducts&client=wh5")54 13)
  70. time(atof time)
  71. )
  72. (try-time-stamp2beijing time)
  73. )
  74. (try-time-getbeijing)

21、计算随机数

  1. ;;;name:SWH-Math-Rand
  2. ;;;desc:计算随机数,leemac
  3. ;;;arg:
  4. ;;;return:0-1之间的随机数
  5. ;;;example:(SWH-Math-Rand)
  6. (defun SWH-Math-Rand (/ a c m)
  7. (setq
  8. m 4294967296.0
  9. a 1664525.0
  10. c 1013904223.0
  11. $xn (rem (+ c
  12. (* a
  13. (cond ($xn)
  14. ((getvar 'date))
  15. )
  16. )
  17. )
  18. m
  19. )
  20. )
  21. (/ $xn m)
  22. )
  23. (repeat 50 (print (BF-math-Rand1 0 100 nil)))
  24. ;获取变量值,low=最小值,upper=最大值,idx=是否截去值的小数部分,T截去,非T不截去
  25. (defun BF-math-Rand1 (low upper idx / num)
  26. (setq num (+ low (* upper (/ (rem (getvar "CPUTICKS") 1984.0) 1983.0))))
  27. (if idx
  28. (setq num (fix num))
  29. )
  30. num
  31. )
  1. (defun random(site / date rdm);site作为随机数位数,定义为123分别对应0-90-990-999
  2. (if (<= 1 site 3)
  3. (progn
  4. (setq date (* 100000000 (getvar "cdate")));获取当前时间并去掉小数点赋值到date
  5. (setq remValue 1);赋值除数为1
  6. (repeat site
  7. (setq remValue(* 10 remValue))
  8. );循环次数等于保留位数,如果三次则remValue等于1000,两次100,一次10
  9. (setq rdm (rem date remValue));将date保留最后若干位,赋值到rdm
  10. )
  11. )
  12. );如果site大于3或小于3则函数停止
  13. (random 1)
  14. (rtos (getvar "cdate") 2 16)
  15. (defun lsp201510261 ( / n3 n4)
  16. (setq n3 (rtos (rem (getvar "Date") 1) 2 20))
  17. (setq n3 (substr n3 18 1) n3 (atoi n3))
  18. (setq n4 (rem (getvar "CPUTICKS") 10))
  19. (fix (rem (+ n3 n4) 10))
  20. )
  21. ;获取变量值,low=最小值,upper=最大值,idx=是否截去值的小数部分,T截去,非T不截去
  22. (defun BF-math-Rand1 (low upper idx / num)
  23. (setq num (+ low (* upper (/ (rem (getvar "CPUTICKS") 1984.0) 1983.0))))
  24. (if idx
  25. (setq num(fix num))
  26. )
  27. num
  28. )
  29. ;;;name:SWH-Math-Rand
  30. ;;;desc:计算随机数,leemac
  31. ;;;arg:
  32. ;;;return:0-1之间的随机数
  33. ;;;example:(SWH-Math-Rand)
  34. (defun SWH-Math-Rand (/ a c m)
  35. (setq
  36. m 4294967296.0
  37. a 1664525.0
  38. c 1013904223.0
  39. $xn (rem (+ c
  40. (* a
  41. (cond ($xn)
  42. ((getvar 'date))
  43. )
  44. )
  45. )
  46. m
  47. )
  48. )
  49. (/ $xn m)
  50. )

22、利用gbenor.shx gbcbig.shx消除当前活动文档字体乱码

  1. ;;;name:BF-Ent-Check-Error-Codes
  2. ;;;desc:消除字体乱码,利用gbenor.shx gbcbig.shx
  3. ;;;arg:doc:当前活动文档
  4. ;;;return:无
  5. ;;;example:(BF-Ent-Check-Error-Codes (BF-active-document))
  6. (defun BF-Ent-Check-Error-Codes(doc)
  7. (vlax-for txtstyle (vla-get-textstyles doc)
  8. (if (findfile (vla-get-fontfile txtstyle))
  9. nil
  10. (vla-put-fontfile txtstyle "gbenor.shx")
  11. )
  12. (if (findfile (vla-get-bigfontfile txtstyle))
  13. nil
  14. (vla-put-bigfontfile txtstyle "gbcbig.shx")
  15. )
  16. )
  17. (princ)
  18. )
  19. (BF-Ent-Check-Error-Codes (vla-get-activedocument (vlax-get-acad-object)))

23、Explorer.exe的命令行参数

  1. ;Explorer.exe的命令行参数http://www.cnblogs.com/ymind/archive/2012/03/30/explorer-command-args.html
  2. ;
  3. ;摘要
  4. ;本文讲述explorer.exe(资源管理器)的命令行。
  5. ;
  6. ;语法
  7. ;EXPLORER.EXE [/n][/e][,/root,<object>][[,/select],<sub object>]
  8. ;
  9. ;/n: 默认选项,用我的电脑视图为每个选中的item打开一个单独的窗口, 即使该窗口已经被打开。
  10. ;
  11. ;/e: 使用资源管理器视图。资源管理器视图和Windows 3.x的文件管理器非常相似。
  12. ;
  13. ;/root,<object>: 指定视图目录根,默认使用桌面作为根目录。
  14. ;
  15. ;/select,<sub object>: 选中指定对象。如果使用"/select" , 则父目录被打开,并选中指定对象。
  16. ;
  17. ;例子
  18. ;打开资源管理器视图并以C:\Windows为目录根浏览
  19. ;
  20. ;explorer /e,/root,C:\Windows
  21. ;
  22. ;打开资源管理器视图并选中Calc.exe
  23. ;
  24. ;explorer /e,/select,c:\windows\system32\calc.exe
  25. ;
  26. ;注意:/root和/select最好不要同时使用。

24、1+2+3

  1. (defun c:ii()
  2. (setq n 0 a n WZ "0")
  3. (while (<= n 10) (if (<= n 10) (setq WZ (strcat WZ "+" (rtos (setq n (+ n 1))))) (setq n (+ n 1))))
  4. (command "TEXT" (getpoint "请指定文字位置:") "" "" WZ)
  5. )

25、显示标准的 AutoCAD 颜色选择对话框

  1. (acad_colordlg colornum [flag])

参数
colornum
整数,其取值范围是 0-256 (包括 0 和 256),它用于指定颜色对话框的缺省的颜色代码。
flag
如可选参数 flag 设为 nil,禁用“随层”和“随块”按钮;省略 flag 参数或将其设为非 nil 值,则可启用“随层”和“随块”按钮。

colornum 为 0 时代表 BYBLOCK(随块),为 256 时代表 BYLAYER(随层)。
返回值
用户所选择的颜色代码,如果用户取消该对话框则返回 nil。
示例
下列代码提示用户选择一种颜色,如果不选则指定绿色为缺省颜色:
(acad_colordlg 3)

26、判断矩形是横向还是纵向

判断两点连线角度是靠近x轴还是y轴,不就知道横纵向了,或者分开求x坐标跟y坐标的差值,都可以得出

  1. (setq p1 (getpoint) p2 (getcorner p1))
  2. (if(> (apply '- (mapcar 'abs (mapcar '- p1 p2))) 0) "横向" "纵向")

27、捕捉设置

  1. (Defun OSmode (Value)
  2. (if Value
  3. (Setvar "osmode" (rem (Getvar "osmode") 16384))
  4. (Setvar "osmode" (+ (rem (Getvar "osmode") 16384) 16384))
  5. )
  6. )
  7. (OSmode t) ;开
  8. (OSmode nil);关

28、获取多段线点表

  1. (defun getptlst(e) (mapcar 'cdr (vl-remove-if-not (function (lambda(x) (= 10 (car x)))) (entget e))))

29、网页上跳转直接添加QQ好友、加入QQ群

  1. (VL-CMDF "BROWSER" "tencent://message/?uin=871425525&Site=&Menu=yes")

添加QQ好友

  1. <a href="tencent://message/?uin=757453794&Site=&Menu=yes" target="_blank" title="点击添加服主好友">服主QQ:757453794</a>

uin=后直接跟QQ号即可。

添加QQ群

  1. <a href="https://jq.qq.com/?_wv=1027&k=51ukmBo" target="_blank" title="点击加入玩家交流群">QQ群:618967676</a>

QQ群的参数来源:在群的主页有个群应用——>群分享——> 由此获得群链接。

30、ssget多项排除

  1. (setq ss (ssget '((0 . "line")(-4 . "<not") (8 . "0,1") (-4 . "not>"))))

31、正交切换

  1. (defun C:vv () (setvar "OrthoMode" (boole 6 (getvar "OrthoMode") 1)))

32、图元类型判断

  1. (setq entpy (strcase (cdr (assoc 0 (if (= (cdr (assoc 102 (setq edata (entget (car (entsel)))))) "{ACAD_REACTORS") (entget (cdr (assoc 330 edata))) edata)))))
  2. (cond
  3. ((equal entpy "LINE")
  4. (alert "直线")
  5. )
  6. ((equal entpy "INSERT")
  7. (alert "块")
  8. )
  9. ((equal entpy "GROUP")
  10. (alert "群组")
  11. )
  12. )

33、群组增加物体,群组减物体,炸特定组,全图删除组,点选显示组名

  1. ;;创建组
  2. (defun c:ga(/ ss)
  3. (setvar "PICKSTYLE" 1)
  4. (setvar "cmdecho" 0)
  5. (if (setq ss (ssget))
  6. (repeat (setq i (sslength s))
  7. (setq e (ssname s (setq i (1- i))))
  8. (if (= "GROUP" (cdr (assoc 0 (entget (setq g (cdr (assoc 330 (entget e))))))))(entdel g))
  9. )
  10. )
  11. (command "-group" "" "*" "" ss "")
  12. (setvar "cmdecho" 1)
  13. (princ "\n选定对象已经组合。")
  14. (princ)
  15. )
  16. ;;;组减物体
  17. (defun c:ge ()
  18. (if (setq EntName1 (car (entsel "\n选择组: ")))
  19. (progn
  20. (setq EntList (entget EntName1))
  21. (if (= (cdr (assoc 102 EntList)) "{ACAD_REACTORS")
  22. (progn
  23. (setq Group (cdr (assoc 330 EntList)))
  24. (setq EntList (entget Group))
  25. (setq Dictionary (cdr (assoc 330 EntList)))
  26. (setq EntList (entget Dictionary))
  27. (setq Previous "")
  28. (foreach Item EntList
  29. (setq Item (cdr Item))
  30. (if (equal Item Group)
  31. (setq GroupName1 Previous)
  32. );if
  33. (setq Previous Item)
  34. );foreach
  35. (command "-group" "r" groupname1 pause )
  36. );progn
  37. (princ "\n选择的物体不是组中的成员.")
  38. );if
  39. );progn
  40. (princ "\n没有选中物体.")
  41. )
  42. )
  43. ;;炸特定组
  44. (defun c:gx ()
  45. (if (setq s (ssget))
  46. (repeat (setq i (sslength s))
  47. (setq e (ssname s (setq i (1- i))))
  48. (if (= "GROUP" (cdr (assoc 0 (entget (setq g (cdr (assoc 330 (entget e))))))))(entdel g))
  49. )
  50. )
  51. )
  52. ;;全图删除组
  53. (defun c:gxx ()
  54. (C:DelEmptyGroup)
  55. (C:DelAllGroups)
  56. (setvar "PICKSTYLE" 0)
  57. (princ)
  58. )
  59. ;;删除所有组_函数
  60. (defun c:DelAllGroups ()
  61. (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  62. (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  63. (vlax-for obj (vla-get-groups *DOC*)
  64. (vla-delete obj)
  65. )
  66. )
  67. ;;删除空组_函数
  68. (defun c:DelEmptyGroup ()
  69. (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  70. (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  71. (vlax-for obj (vla-get-groups *DOC*)
  72. (if (< (vla-get-count obj) 2)
  73. (vla-delete obj)
  74. )
  75. )
  76. )
  77. ;;;显示组名
  78. (defun c:gn ()
  79. (if (setq EntName (car (entsel "\n选择组: ")))
  80. (progn
  81. (setq EntList (entget EntName))
  82. (if (= (cdr (assoc 102 EntList)) "{ACAD_REACTORS")
  83. (progn
  84. (setq Group (cdr (assoc 330 EntList)))
  85. (setq EntList (entget Group))
  86. (setq Dictionary (cdr (assoc 330 EntList)))
  87. (setq EntList (entget Dictionary))
  88. (setq Previous "")
  89. (foreach Item EntList
  90. (setq Item (cdr Item))
  91. (if (equal Item Group)
  92. (setq GroupName Previous)
  93. );if
  94. (setq Previous Item)
  95. );foreach
  96. (princ (strcat "\n组名为 " GroupName " ."))
  97. );progn
  98. (princ "\n选择的物体不是组中的成员.")
  99. );if
  100. );progn
  101. (princ "\n没有选中物体.")
  102. )
  103. )

34、AutoCAD.Net系统变量设置

  1. Application.SetSystemVariable("ORTHOMODE", 1); //正交开

35、使用CAD图标

  1. ZwSoft.ZwCAD.ApplicationServices.Application.ShowModelessDialog(Frm);

36、CAD设置图元颜色

  1. Variable: $CECOLOR
  2. Group Code: 62
  3. Description: Current entity color number:
  4. 0 = BYBLOCK;
  5. 256 = BYLAYER
  6. Type: String
  7. if your are using CECOLOR, try:
  8. (setvar "CECOLOR" "256")
  9. It will also take the color names for 1-7 as well as 'BYBLOCK" & "BYLAYER"
  10. (setvar "CECOLOR" "WHITE")
  11. more info:
  12. https://forums.autodesk.com/t5/autocad-forum/how-to-make-current-color-in-color-contro-the-same-as-the-color/m-p/5396871#M65777

37、返回【CAD所在路径】和【当前dll文件路径】

  1. //返回CAD所在路径
  2. string str = AppDomain.CurrentDomain.BaseDirectory;
  3. //返回当前dll文件路径
  4. string bbb = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

38、取得选择集内不重叠的外矩形框(还不是准确)

  1. ;|= 4.2.2 取得选择集内不重叠的外矩形框
  2. @== (wyb-get-mBox ss)
  3. #== return: [lst]'((p1 p2) (p3 p4) ... )
  4. ver:
  5. [1.0] 明经Gu_xl&邹锋
  6. [1.1] by woyb 20151007
  7. [1.1.1] 修复ss为单个对象时无法处理的bug by woyb 20151010
  8. ====================|;
  9. (defun wyb-get-mBox (@ss / _intersect n l a l1 flag b c lst)
  10. (defun _intersect (a b)
  11. (if
  12. (or
  13. (and ;;b左下角在a框内
  14. (<= (caar a) (caar b) (caadr a))
  15. (<= (cadar a) (cadar b) (cadadr a))
  16. )
  17. (and ;;b左上角在a框内
  18. (<= (caar a) (caar b) (caadr a))
  19. (<= (cadar a) (cadadr b) (cadadr a))
  20. )
  21. (and ;;b右上角在a框内
  22. (<= (caar a) (caadr b) (caadr a))
  23. (<= (cadar a) (cadadr b) (cadadr a))
  24. )
  25. (and ;;b右下角在a框内
  26. (<= (caar a) (caadr b) (caadr a))
  27. (<= (cadar a) (cadar b) (cadadr a))
  28. )
  29. (and ;;a框部分包含在b框内
  30. (<= (caar a) (caar b) (caadr a)) ;;xa1<=xb1<=xa2
  31. (>= (cadar a) (cadar b)) ;;ya1>=yb1
  32. (<= (cadadr a) (cadadr b)) ;;ya2<=yb2
  33. )
  34. )
  35. (list
  36. (apply 'mapcar (cons 'min (append a b)))
  37. (apply 'mapcar (cons 'max (append a b)))
  38. )
  39. )
  40. )
  41. ;|= 4.2. 取得图元外矩形框
  42. @== (wyb-get-box ename)
  43. #== return: [plst]'((x1 y1 z1)_min (x2 y2 z2)_max)
  44. ver:
  45. [1.0] 明经 Longxin, Gu_xl&邹锋
  46. [1.1] by woyb 20151010
  47. [1.1.1] ADD: 释放obj by woyb 20180730
  48. ====================|;
  49. (defun wyb-get-box (@e / p1 p2 p3 p4 obj lst tmp)
  50. (setq obj (vlax-ename->vla-object @e))
  51. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'p1 'p3))))
  52. (progn
  53. (setq p1 (vlax-safearray->list p1)
  54. p3 (vlax-safearray->list p3)
  55. p2 (list (car p1) (cadr p3) (caddr p1))
  56. p4 (list (car p3) (cadr p1) (caddr p1))
  57. )
  58. (if (= "SPLINE" (cdr (assoc 0 (entget @e))))
  59. (progn
  60. (setq lst
  61. (mapcar '(lambda (a b) (vlax-curve-getClosestPointToProjection @e a b t))
  62. (list p1 p2 p3 p4)
  63. '((1.0 0 0) (0 -1.0 0) (-1.0 0 0) (0 1.0 0))
  64. )
  65. )
  66. (setq tmp
  67. (list
  68. (apply 'mapcar (cons 'min lst))
  69. (apply 'mapcar (cons 'max lst))
  70. )
  71. )
  72. )
  73. (setq tmp (list p1 p3))
  74. )
  75. )
  76. (setq tmp nil)
  77. )
  78. (vlax-release-object obj)
  79. tmp
  80. )
  81. (setq lst '())
  82. (if @ss
  83. (progn
  84. (repeat (setq n (sslength @ss))
  85. (if (setq a (wyb-Get-Box (ssname @ss (setq n (1- n)))))
  86. (setq l (cons a l))
  87. )
  88. )
  89. (setq l
  90. (vl-sort
  91. l
  92. '(lambda (a b)
  93. (setq a '((1 11) (2 22))
  94. b '((3 33) (4 44)))
  95. x1 x3
  96. (if (equal (caar a) (caar b) 1e-3)
  97. (if (equal (cadar a) (cadar b) 1e-3)
  98. (if (equal (caadr a) (caadr b) 1e-3)
  99. (< (cadadr a) (cadadr b))
  100. (< (caadr a) (caadr b))
  101. )
  102. (< (cadar a) (cadar b))
  103. )
  104. (< (caar a) (caar b))
  105. )
  106. )
  107. )
  108. )
  109. (setq a (car l))
  110. (if (setq l (cdr l))
  111. (while l
  112. (setq l1 nil flag nil)
  113. (while l
  114. (setq b (car l) l (cdr l))
  115. (if (setq c (_intersect a b))
  116. (setq a c flag t)
  117. (setq l1 (cons b l1))
  118. )
  119. )
  120. (setq l (reverse l1))
  121. (if (not flag)
  122. (progn
  123. (setq lst (cons (list (car a) (cadr a)) lst))
  124. (setq a (car l) l (cdr l))
  125. )
  126. )
  127. (if (not l)
  128. (setq lst (cons (list (car a) (cadr a)) lst))
  129. )
  130. )
  131. (setq lst (cons (list (car a) (cadr a)) lst))
  132. )
  133. )
  134. )
  135. lst
  136. )
  137. (progn
  138. (setq time0 (getvar "date")) ;;计时1
  139. (foreach X (wyb-get-mBox (SSGET)) (entmake (LIST '(0 . "LINE") '(62 . 1) (CONS 10 (CAR X)) (CONS 11 (CADR X)))))
  140. (setq time1 (getvar "date")) ;;计时2
  141. (princ (strcat "\n字典方法耗时: " (rtos (* 86400 (- time1 time0)) 2 4) " 秒"))
  142. )

39、更改CAD背景颜色

  1. (defun c:gr(/ blue clno colvalue display green red rev-colour var-colour)
  2. (setq clno (getint "\n输入颜色号[黑(0)/红(1)/黄(2)/绿(3)/青(4)/蓝(5)/紫(6)/白(7)/灰(8)/灰白(9)]其他为黑色:"))
  3. (cond
  4. ((= clno 1) (setq red 255 green 0 blue 0))
  5. ((= clno 2) (setq red 255 green 255 blue 0))
  6. ((= clno 3) (setq red 0 green 255 blue 0))
  7. ((= clno 4) (setq red 0 green 255 blue 255))
  8. ((= clno 5) (setq red 0 green 0 blue 255))
  9. ((= clno 6) (setq red 255 green 0 blue 255))
  10. ((= clno 7) (setq red 255 green 255 blue 255))
  11. ((= clno 8) (setq red 128 green 128 blue 128))
  12. ((= clno 9) (setq red 192 green 192 blue 192))
  13. (t (setq red 0 green 0 blue 0))
  14. )
  15. (setq
  16. colvalue (+ red (* green 256) (* blue 65536))
  17. var-colour (vlax-make-variant colvalue 19)
  18. rev-colour (if (= clno 8) (vlax-make-variant 16777215 19) (vlax-make-variant (- 16777215 colvalue) 19))
  19. display (vla-get-display (vla-get-preferences (vla-get-application (vlax-get-acad-object))))
  20. )
  21. (vla-put-graphicswinmodelbackgrndcolor display var-colour)
  22. (vla-put-ModelCrosshairColor display rev-colour)
  23. (vla-put-graphicswinlayoutbackgrndcolor display var-colour)
  24. (vla-put-LayoutCrosshairColor display rev-colour)
  25. (prin1)
  26. )
  27. (defun Backgroundcolor(Modelcol Layoutcol / layout model obtaincolvar prefdisplay);模型与布局背景颜色切换
  28. (vl-load-com)
  29. (defun obtainColVar(color / cindex colvar)
  30. (cond
  31. ((or (= 'INT (type color)) (= 'REAL (type color)))
  32. (setq cindex (fix color))
  33. (cond
  34. ((= 1 cindex) (setq colvar (vlax-make-variant 255 19) crocol (vlax-make-variant 16777215 19)))
  35. ((= 2 cindex) (setq colvar (vlax-make-variant 65535 19) crocol (vlax-make-variant 0 19)))
  36. ((= 3 cindex) (setq colvar (vlax-make-variant 65280 19) crocol (vlax-make-variant 0 19)))
  37. ((= 4 cindex) (setq colvar (vlax-make-variant 16776960 19) crocol (vlax-make-variant 0 19)))
  38. ((= 5 cindex) (setq colvar (vlax-make-variant 16711680 19) crocol (vlax-make-variant 16777215 19)))
  39. ((= 6 cindex) (setq colvar (vlax-make-variant 16711935 19) crocol (vlax-make-variant 16777215 19)))
  40. ((= 255 cindex) (setq colvar (vlax-make-variant 16777215 19) crocol (vlax-make-variant 0 19)))
  41. (T (setq colvar (vlax-make-variant 0 19) crocol (vlax-make-variant 16777215 19)))
  42. )
  43. )
  44. ((= 'STR (type color)) (setq colvar (vlax-make-variant (atoi color) 19) crocol (vlax-make-variant (- 16777215 (atoi color)) 19)))
  45. (T (setq colvar (vlax-make-variant 0 19) crocol (vlax-make-variant 16777215 19)))
  46. )
  47. (list colvar crocol)
  48. )
  49. (setq
  50. model (car (setq mvar (obtainColVar Modelcol)))
  51. mcro (cadr mvar)
  52. Layout (car (setq lvar (obtainColVar Layoutcol)))
  53. Lcro (cadr lvar)
  54. prefDisplay (vla-get-Display (vla-get-Preferences (vlax-get-acad-object)))
  55. )
  56. (if (/= Modelcol nil)
  57. (progn;设定模型背景色
  58. (vla-put-GraphicsWinModelBackgrndColor prefDisplay model)
  59. (vla-put-ModelCrosshairColor prefDisplay mcro)
  60. )
  61. )
  62. (if (/= Layoutcol nil)
  63. (progn;设定布局背景色
  64. (vla-put-GraphicsWinLayoutBackgrndColor prefDisplay Layout)
  65. (vla-put-LayoutCrosshairColor prefDisplay Lcro)
  66. )
  67. )
  68. )
  69. (defun C:MBG(/ mindex)
  70. (setq Mindex "D")
  71. (while (or (equal Mindex "D") (equal Mindex "R"))
  72. (if (equal Mindex "D")
  73. (progn
  74. (initget 4 "r R")
  75. (setq Mindex (getint "\n请输入背景颜色值[黑(0)/红(1)/黄(2)/绿(3)/青(4)/蓝(5)/洋红(6)/白(255)/RGB模式(R)]默认:黑<0>"))
  76. (cond
  77. ((= Mindex nil) (setq Mindex 0))
  78. ((or (equal Mindex "r") (equal Mindex "R")) (setq Mindex (strcase Mindex)))
  79. ((or (< 6 Mindex 255) (> Mindex 255)) (princ "输入有误,请重新输入!") (setq Mindex "D"))
  80. )
  81. )
  82. (progn
  83. (setq Mindex (getstring "\n请输入背景颜色值[黑(0)/红(255)/黄(65535)/绿(65280)/青(16776960)/蓝(16711680)/洋红(16711935)/白(16777215)/系统模式(D)]"))
  84. (cond
  85. ((= Mindex "") (setq Mindex "0"))
  86. ((or (equal Mindex "d") (equal Mindex "D")) (setq Mindex (strcase Mindex)))
  87. )
  88. )
  89. )
  90. )
  91. (Backgroundcolor Mindex nil)
  92. (prin1)
  93. )
  94. (defun C:LBG(/ Lindex)
  95. (setq Lindex "D")
  96. (while (or (equal Lindex "D") (equal Lindex "R"))
  97. (if (equal Lindex "D")
  98. (progn
  99. (initget 4 "r R")
  100. (setq Lindex (getint "\n请输入背景颜色值[黑(0)/红(1)/黄(2)/绿(3)/青(4)/蓝(5)/洋红(6)/白(255)/RGB模式(R)]默认:黑<0>"))
  101. (cond
  102. ((= Lindex nil) (setq Lindex 0))
  103. ((or (equal Lindex "r") (equal Lindex "R")) (setq Lindex (strcase Lindex)))
  104. ((or (< 6 Lindex 255) (> Lindex 255)) (princ "输入有误,请重新输入!") (setq Lindex "D"))
  105. )
  106. )
  107. (progn
  108. (setq Lindex (getstring "\n请输入背景颜色值[黑(0)/红(255)/黄(65535)/绿(65280)/青(16776960)/蓝(16711680)/洋红(16711935)/白(16777215)/系统模式(D)]"))
  109. (cond
  110. ((= Lindex "") (setq Lindex "0"))
  111. ((or (equal Lindex "d") (equal Lindex "D")) (setq Lindex (strcase Lindex)))
  112. )
  113. )
  114. )
  115. )
  116. (Backgroundcolor nil Lindex)
  117. (prin1)
  118. )
  119. (princ "\n更改模型背景颜色:《 MBG 》更改布局背景颜色:《 LBG 》 by 702099480@qq.com")
  120. (prin1)
  121. ;************************************************************************************
  122. ;(setq blackcol (vlax-make-variant 0 19));;黑色
  123. ;(setq redcol (vlax-make-variant 255 19));;红色
  124. ;(setq yellocol (vlax-make-variant 65535 19));;黄色
  125. ;(setq greencol (vlax-make-variant 65280 19));;绿色
  126. ;(setq cyancol (vlax-make-variant 16776960 19));;青色
  127. ;(setq bluecol (vlax-make-variant 16711680 19));;蓝色
  128. ;(setq magentacol (vlax-make-variant 16711935 19));;洋红
  129. ;(setq whitecol (vlax-make-variant 16777215 19));;白色
  130. ;设定背景色:深铅灰色3156001,白色16777215,黑色0
  131. ;end defun
  132. ;(Backgroundcolor 0 0) ;设置模型背景色为黑,布局背景色为黑
  133. ;(Backgroundcolor 3156001 16777215) ;设置模型背景色为灰,布局背景色为白
  134. ;(Backgroundcolor 0 "g167fvfvsb") ;设置模型背景色为黑,布局背景色为白
  135. ;************************************************************************************

40、判断线型”DASHED”是否加载,若未加载,则先加载线型!若不然会出错!
可以这样加载线型:

  1. ;;;(loadltname "CENTER")
  2. ;;;(loadltname '("CENTER" "DASHDOT" "DASHED" "DIVIDE" "HIDDEN"))
  3. (defun loadltname ( lt / cm s1 )
  4. (setq cm (getvar 'CMDECHO))
  5. (Cond
  6. ((= (type lt) 'str)
  7. (if (not (tblsearch "LTYPE" lt))
  8. (vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) lt "acadiso.lin")
  9. (progn (setvar 'CMDECHO 0)(vl-cmdf "-linetype" "load" lt (findfile "acadiso.lin") "Y" "")(setvar 'CMDECHO cm))
  10. )
  11. )
  12. ((= (type lt) 'list)(foreach s1 lt (loadltname s1)))
  13. ) t
  14. )
  15. ========================================================
  16. (or
  17. (or (TBLSEARCH "LTYPE" "DASHED")
  18. (vl-catch-all-apply
  19. 'vla-load
  20. (list (vla-get-Linetypes
  21. (vla-get-ActiveDocument (vlax-get-acad-object))
  22. )
  23. "DASHED"
  24. (findfile "zwcadiso.lin")
  25. )
  26. )
  27. );加载虚线
  28. (or (TBLSEARCH "LTYPE" "DASHED")
  29. (vl-catch-all-apply
  30. 'vla-load
  31. (list (vla-get-Linetypes
  32. (vla-get-ActiveDocument (vlax-get-acad-object))
  33. )
  34. "DASHED"
  35. (findfile "acad.lin")
  36. )
  37. )
  38. )
  39. )