在位编辑参照命令组插件源码分析

linxiaoyun 2019.5.16 17:12 157 0
软件应用 autolisp

介绍

在位编辑参照命令组包括,在位编辑(refe),退出在位编辑保存修改(refs),退出在位编辑不保存修改(refd),以及支持在位编辑过程中使用的保存命令(sv)。

效果

在位编辑、退出在位编辑保存和放弃保存,cad均需两步操作(命令、鼠标选择确认),本套命令组,节约了鼠标点击确认操作的时间(该操作效率提高100%);

保存命令,支持在位编辑过程中使用,cad操作需要退出在位编辑、保存、进入在位编辑,共5步(每步都很耗时,很容易因此造成长时间未保存,遇到崩溃就很难接受了),本套命令组只一个命令,节约了4步的时间(该操作效率提高400%)。

原理

1. 进入在位编辑时,记录entsel选择的参数(位置、名称),该参数均为全局变量,一同修改,故一一对应。

(setq hnu:reflastpoint (utow (cadr e))) ;设置选择块对象位置为全局变量,每次更新,保存为wcs下坐标
(setq hnu:refname (get-DXF 2 (car e))) ;设置该块名为全局变量,每次更新
(setq hnu:viewsize (getvar 'viewsize) );保存这个对象

值得注意的是:在使用entsel、(command “refedit”)等命令时,选择对象需要合适的图形显示缩放比例,图形缩放过小、选择点在屏幕外等原因会造成误选、无法选择。为使能正常选择,还需要记录viewsize值。

2.在参照编辑中保存时,先应退出并保存参照,同时记录该参照名。当验证其与全局变量参照名一致时,说明全局参照名已经正常记录(包括位置、图形缩放高度信息),可以在保存图形后自动继续进入参照编辑,否则调用新的在位编辑命令。

(if  ;(and (= hnu:refname rfname) (ssget (wtou hnu:reflastpoint) (list '(0 . "INSERT")(cons 2 rfname)))) 
;因为该对象肯定存在,所以无需用ssget来判断
    (= hnu:refname rfname)
(progn
(command "zoom" "c" (wtou hnu:reflastpoint) hnu:viewsize)
;为了实现选择,将视图中心调整为该点
;(setq ss (ssget "c" (wtou hnu:reflastpoint)(wtou hnu:reflastpoint) (list '(0 . "INSERT")(cons 2 rfname))))
;(princ (ssname ss 0))
(command "-refedit" (wtou hnu:reflastpoint) "O" "A" "Y") ;退出的参照名与原保存的位置对应的参照名相同时,直接进入参照,否则手动进入
(command "zoom" "p");完成选择后,返回上一个视图
);progn
(c:refe)
);if

注意到,为了使自动进入参照编辑操作能正常实现,将先调用zoom命令回到选择参照的合适视图里,选择完后,再返回上一个视图。

3.本套命令组是操作合理,逻辑清晰,全操作支持。

Last Modified·2019年5月16日 17:29

暂无评论

您尚未登录,请先才能评论。