许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  AutoLISP插入块的三种方法:适用场景对比

AutoLISP插入块的三种方法:适用场景对比

阅读数 6
点赞 0
article_banner


AutlLisp版本:Visual LISP 2024 (zh)

插入块的方法有三种:

  • command调用insert
  • entmake生成图元
  • vla扩展函数

一、command调用insert

示例:

代码块

ts


     自动换行
   


     复制代码
   

1


(command "_.-insert" #sBLK (list 0 0 0) #rXSCALE #rYSCALE #degR)

      复制成功
     
     
     
     

其中:

[command]为AutoLisp调用AutoCAD操作的命令。

["_.-insert&#​34;]表示CutoCAD插入块命令,其前面的 "-&#​34; 表示调用该命令的命令行模式,再前面的 "_.&#​34; 表示调用该命令的原始定义,而非各种再定义、重定义。

[#sBLK]为字符串,表示块名。这里有如下三种情况:

       1)逻辑上首先调用图形文件中存在的块名,若图形文件中之前不存在该块的定义,则会从AutoCAD设定(options)中的“支持文件搜索路径”中搜索图形文件名“#sBLK.dwg”,将目标图形文件中的图形作为块插入当前图形文件,并在当前图形文件中添加块定义“#sBLK”。

若要指定目标图形文件“#sBLK.dwg”被作为块插入时的插入基点,请使用如下方式:

设置图形文件被作为块插入时的基点

若不指定基点,则默认以原点作为基点。可以使用"_.base&#​34;命令查询所设定的基点值。

       2)“#sBLK”可以为路径,则会从指定路径把目标图形文件作为块插入当前图形文件。

若目标图形文件在AutoCAD“支持文件搜索路径”内,可以采用如下语句获得路径:

代码块

ts


     自动换行
   


     复制代码
   

1


(findfile "./Folder/#sBLK.dwg")

      复制成功
     
     
     
     

       3)可以在块名前加 “*”,此时,会插入块分解后的图形,如果图形文件中之前没有该块的定义,则会插入搜索到的图形文件,但不作为块插入,也不会添加该块的定义。

[(list 0 0 0)]为插入点坐标。

[#rXSCALE #​rYSCALE]为实型数,表示所插入图块x拉伸比例和y拉伸比例。

[#degR]为旋转角度<角度制>。

二、entmake生成图元

示例:

代码块

ts


     自动换行
   


     复制代码
   

1234567891011121314


(defun finsertblk (#sBLKNAME #layer #pt #ar #rSX #rSY #rsZ / #listE) 
  (setq #listE (list &#39;(0 . &quot;INSERT&quot;)  ;块图元类型声明
                     (cons 2 #sBLKNAME) ;块名
                     (cons 8 #layer) ;图层
                     (cons 10 #pt) ;插入点
                     (cons 41 #rSX) ;X比例
                     (cons 42 #rSY) ;Y比例
                     (cons 43 #rSZ) ;Z比例
                     (cons 50 #ar) ;旋转角度&lt;弧度制&gt;
                     (cons 70 0) ;块类型:0-最基本的块
               ) ;l
  ) ;s
  (entmakex #listE)
) ;d

      复制成功
     
     
     
     

该方法的好处:可以控制插入块的图层,可以获得块的图元名

该方法的缺点:图形文件必须已经有块定义,若没有,需要先通过insert方法生成定义:

代码块

ts


     自动换行
   


     复制代码
   

12


(command &quot;_.-insert&quot; #sBLK &#39;(0 0 0) &quot;&quot; &quot;&quot; 0)
(entdel (entlast))

      复制成功
     
     
     
     

先在原点插入一次块,生成了块定义,然后删除该块。

三、vla扩展函数

vla-InsertBlock命令,示例:

代码块

ts


     自动换行
   


     复制代码
   

123456


(defun finsertblk2 (#sBLKNAME #pt #ar #rSX #rSY #rsZ / ) 
  (setq #acadObj (vlax-get-acad-object))
  (setq #Doc (vla-get-ActiveDocument #acadObj))
  (setq #ModelSpace (vla-get-modelspace #Doc))
  (vla-insertblock #ModelSpace (vlax-3d-point #pt) #sBLKNAME #rSX #rSY #rsZ #ar)
) ;d

      复制成功
     
     
     
     

其中:#ModelSpace为要插入的空间;#​pt为插入点坐标;#sBLKNAME为块名;#​rSX #rSY #​rsZ为XYZ拉伸比例;#ar为旋转角度<弧度制>。

该方法的好处:代码行数少

该方法的缺点:图形文件必须已经有块定义,若没有,需要先通过insert方法生成定义;无法直接指定图层;要指定空间,涉及到vla命令。

注:若要指定图层,用setq保存vla-insertblock的结果(BlockReference),用vla-put-layer赋予图层。

该方法更详细内容请见官方文档“vla-insertblock”:

https://help.autodesk.com/view/OARX/2023/CHS/?guid=GUID-17F86FDD-B7FC-4F43-9F16-B4958F73A66D



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空