本帖最后由 作者 于 2010-5-1 0:46:35 编辑
虽然差不多1年没弄lsp了,但每次回来这个板块,还是见到很多lsp对command的调用感到不知所措,我权当抛砖引玉吧,在这里简单说说command的调用 原则1 非到万不得已,不要使用command函数 原则2 一旦调用command函数后,就必须严格调试 事实上,一个command的调用仅仅是将lsp的控制转移给AutoCAD,一旦你给的条件不匹配那个命令,将会触发一个错误,而这个错误可能会影响你后续代码的调用,因此原则1和原则2就说明了command的缺点。 那么在调用command的时候,需要注意什么呢? 首先,command就是autocad里面的命令行中的“命令”,因此command发出的指令也就是大家用的如line之类的命令了。 其次,command后面的命令涉及的参数一定要匹配,如(command "_line" (getpoint) (getpoint ) "" ), 这样的代码将会产生一条指定点的线段,注意最后面的 "" ,这个代表了一个回车,假如没有这个回车,那将如何呢?因为command发出的line命令没有被确定终止,因此将停留在获取下一个点上,从而看上去好像暂停了动作一样。 最后,诸如trim等复杂的命令来讲,函数匹配就需要转下弯,一个trim,需要点选2个实体和一个点,那实体如何呢?就是entsel!(command "trim" (entsel) (entsel) (getpoint) );又如插入一个属性块,假如有2个attdef (command "_insert" blockname (getpoint) xScale yScale zScale "属性1" "属性2" ) 最最后,万一我不知道一个命令该如何传入参数呢?其实也不难,不是说了,command就是autocad的命令,假如一个命令为XXX,你不知道XXX究竟要传入什么东西,就可以现在cad中输入命令XXX,在看看XXX提示要什么东西,及什么选项,然后根据你的要求记下来,最后按过程写入command代码里面。如你输入line后,会提示输入一个点(一个点表),输入一个点后呢,会提示输入另外一个点(点表)及选项U是回退的,如输入U将撤销。到此的(command "_line" (getpoint) "U" )就跟上面的操作是一样的。其余命令同此推理。 |