关于cad的lisp

关于cad的lisp,第1张

提供思路 和 部分代码

1快捷方式可以用(defun c: xxx) 实现

2调用xxx 时 可以d出对话框 选择需要选取的图形 并将结果 放入选集 selection@

3关闭0 图层 打开 1图层 试用insert 命令插入 至于偏移多少自己定

3关闭1 图层 打开 2图层 用insert 命令插入 到图层2中

;;;;;实现打开图层1 例如 (LayerOn 1)

(defun LayerOn (LayerNames$ / LayerList@ Name$)

(setq LayerList@ (CommaList LayerNames$))

(foreach Name$ LayerList@

(if (= Name$ "")

(command "LAYER" "T" "" "U" "" "ON" "" "")

(if (tblsearch "layer" Name$)

(command "LAYER" "T" Name$ "U" Name$ "ON" Name$ "S" Name$ "")

(command "LAYER" "M" Name$ "")

);if

);if

);foreach

);defun LayerOn

;;关闭图纸0 (LayerOff 0)

(defun LayerOff (LayerNames$)

(if (= LayerNames$ "")

(command "LAYER" "F" "" "")

(command "LAYER" "OFF" LayerNames$ "F" LayerNames$ "")

);if

);defun LayerOff

(findfile "settingtxt")

用以上语句获取你这个文件的完整路径,前提是不管这个文件是放在那个目录,必须将该目录设置在autocad的支持文件搜索路径内,否则是找不到该文件目录的

(defun c:test()

(SETVAR "QAFLAGS" 1)

(setq s (ssget "X" '(

(-4 "<or")

(8 "")

(-4 "or>")

)))

(command "explode" s "")

(setq s nil)

(SETVAR "QAFLAGS" 0)

)

(c:test)

;可以使用princ函数在命令行查看,如:

(setq &k1 (entsel))    ;选择对象

(princ &k1)            ;命令行查看代码&k1

(setq &k2 (car &k1))   ;取得对象图元名

(princ &k2)            ;在命令行查看图元名

(setq #k1 (entget &k2));取得图元名的属性列表

(princ #k1)            ;在命令行查看属性列表

怎么在启动CAD时自动加载Lisp的工具及插件

网上有很多非常有用的CAD插件,手动加载后就可以执行,但每次用的时候都要加载挺麻烦的,能不能在启动软件的`时候把自己常用的插件加载进来

方法1:添加到启动组

CAD的工具插件都可以通过appload(ap)命令来加载,在d出的“加载\卸载应用程序”对话框中,可以找到“启动组”。不同CAD不一样,AutoCAD是在“启动组”下面有一个“内容”按钮,点击此按钮就可以需要启动时自动加载的程序加进去;浩辰CAD有一个“添加到启动组”按钮,可以将“历史记录列表”中加载过的程序添加到启动组中。添加到启动组后,下次启动CAD的时候这些程序就会自动加载。

这种方式比较简单易行,任何 *** 作起来都没有难度。

方法2:在启动的lisp文件加入LOAD语句。

无论是AutoCAD还是浩辰CAD等国产CAD,启动时都会有一个自动加载的LISP程序,AutoCAD加载的是acadlsp或acadxxxxlisp(xxxx为版本号),acaddoclsp等(通常在AutoCAD的support目录下),很多CAD病毒正是利用了这一点来加载从而影响CAD的应用;浩辰CAD等自动加载的LSP名为icadautoloadlsp,在安装的根目录下,浩辰CAD8以后的版本为SUPPORT目录下的gcad2013doclsp。

需要做的就是用记事本打开这些LSP,在里面加上类似下面的语句:

(LOAD "x:\\xxxxx\\sp2pllsp")

如果觉得写路径太麻烦,你就可以将程序复制刚才哪些自动加载LISP所在的路径。

关于CAD病毒

因此如果遇到AutoCAD莫名奇妙出现不正常状态,你可以搜索所有acadlsp,看看在图纸所在目录是否有此类文件,是否有多个相同大小的此类LSP,如果有,删除掉后可以看看CAD是否恢复正常。如果有兴趣可以用记事本打开看看,到底这些CAD病毒做了什么手脚。当然现在CAD病毒也有变种成acadvlx或acadfas的,这些文件就没法打开看了,如果有此类文件,建议直接删除。

;

一般有两个方案

第一个方案:用AutoLisp方案,首先用 取得图块这个图元,然后用 entnext 逐一找到属性块来找到其中length的属性,然后将它的值给找出来,然后进行运算,注意 entnext 的运用。这个很简单,你自己应该写吧。

第二个方案:用VisualLisp方案,注意vla-getattributes,vlax-variant-value,vlax-safeArray->list这几个函数的运用,以下为 VisualLisp的例子

(Defun C:Test ()

(setq en0 (car (entsel)))

;;此处请选有属性定义的图块

(setq vn0 (vlax-ename->vla-object en0))

(setq lstVar (vla-getattributes vn0))

(setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar)))

(setq TextString nil)

(foreach attr lstAttrs

(setq TagString (vla-get-TagString attr))

(if (equal TagString "length") ;此处为你想要的元素

(setq TextString (vla-get-TextString attr))

)

)

(if TextString

(princ (strcat "The content of length = " TextString))

(princ "没有找到length ")

)

(prin1)

)

;;打开指定图层lisp

(defun c:tes ( / lay lays obj TC_ss tc1)

(vl-load-com)

(setq TC_ss '() lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))

(vlax-for obj lays

(setq TC_ss (cons (vla-get-Name obj) TC_ss));提取所有图层

)

(setq TC_ss (mapcar 'strcase TC_ss) lay nil)

(if tc_mc

(if (and (setq tc1 (getstring (strcat "\n请输入需要打开的图层名称默认:<" tc_mc ">"))) (/= tc1 ""))

(setq tc_mc (strcase tc1) lay t)

(setq lay t)

)

(if (setq tc1 (getstring "\n请输入需要打开的图层名称:")) (setq tc_mc (strcase tc1) lay t) )

)

(if lay

(progn

(if (member tc_mc TC_ss)

(progn

(setq lay (vla-add lays tc_mc))

(if (< (cdr (assoc 62 (tblsearch "layer" tc_mc))) 0) (vla-put-LayerOn lay :vlax-true));打开

)

(progn

(princ (strcat "\n没有(" tc_mc ")这个图层,仔细核对后输入"))

(setq tc_mc nil)

)

)

)

)

(princ)

)

;以上是autolisp程序

以上就是关于关于cad的lisp全部的内容,包括:关于cad的lisp、CAD lisp中,是否可以获取自己所在的lisp源代码文件的当前所在路径名、用lisp实现打开一个图后自动炸开所有的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9675170.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存