根据图形比例,按固定距离画花圃单个符号,已解决。。。
本帖最后由 zhb236623 于 2011-7-16 21:04 编辑(defun c:hp()
(setvar "CMDECHO" 0)
(setq blc_cass7 (getvar "userr1"))
(cond(( = blc_cass7 500)
(princ "比例尺,,,,,为500")
(setq nn 0.5)
)
(( = blc_cass7 200)
(princ "比例尺,,,,,为200")
(setq nn 0.2)
)
(( = blc_cass7 1000)
(setq nn 1)
(princ)
)
((and ( /= blc_cass7 500)( /= blc_cass7 200)( /= blc_cass7 1000))
(princ "比例尺不为1:500,1:200,1:1000请检查比例尺设置,程序将退出。")
(exit)
)
(princ "程序正常运行")
(princ)
)
(if (= (tblobjname "layer" "ZBTZ_tmp") nil)
(progn
(princ "图层ZBTZ_tmp不存在,新建图层ZBTZ_tmp完成,导入数据将存放在ZBTZ_tmp层")
(command ".layer" "n" "ZBTZ_tmp" "s" "ZBTZ_tmp" "")
)
(progn
(command "layer" "s" "ZBTZ_tmp" "")
(princ "ZBTZ_tmp图层已存在,导入数据将存放在ZBTZ_tmp层,完成导入")
)
)
(setq s1 (ssget '((0 . "LWPOLYLINE"))))
(command "measure" s1 10)
(if (setq ss (ssget "P" '((0 . "POINT"))))
(progn
(setq i 1)
(setq pt (cdr(assoc 10 (entget(ssname ss 0)))))
(command "insert" "gc124" pt nn nn "0" )
(repeat (1- (sslength ss))
(setq pt (cdr(assoc 10 (entget(ssname ss i)))) i (1+ i))
(command "insert" "gc124" pt nn nn "0" )
)
(princ)
)
)
(command "erase" ss "")
(setq tttc (ssget "X" '((8 . "ZBTZ_tmp")))) ;;选择ZBTZ_tmp图层所有元素。
(command "putp" "c""215401" tttc "") ;;;;这里"215401"要加引号,不加好像不行
;(command "change" tttc "" "p" "la" "ZBTZ_tmp" "")
(setvar "CMDECHO" 1)
(princ)
)
1.先画条直线,再执行此命令,即可。(部分程序来自明经)
2.(提问)但是不能加入属性,PUTP这句要怎么写。可以先把ZBTZ图层改为ZBTZ_tmp图层。再;(setq tttc '((8 . "ZBTZ_tmp"))),然后再PUTP刷属性。但是这句不怎么会写。
3(提问) command 命令下哪些参数是要加 “”如 (command "insert" "gc124" pt nn nn "0" )
然后什么时候要在参数中间加 “”, 这个没搞明白,每次都 要试验好几回 。。。。。。
本帖最后由 zhynt 于 2011-7-16 10:26 编辑
回复 zhb236623 的帖子
一般来讲,参数中调用的变量不要加,数值参数不要加,其余都要加,记住一点,lisp中用""括起来的代表的是字符串,凡是用到字符串的地方都要"",还有就是空的""在程序中除了在命令函数调用中代表回车外,其他地方都是nil,另外在判断一个字符窜变量是否为空的时候用该用"",而不是用nil。
如上例中:(command "insert" "gc124" pt nn nn "0" )
qc124是块名是字符窜,所以要加;
pt、nn、nn 分别是插入点、比例的变量调用所以不要加。
后面的0是角度,是数值可以不用加。
总结一下,如果command调用中除了变量,都要加"",数值可以不加。补充:点坐标是表,不加,用'(x y z)
再如上例,如果插入点坐标为(0 0 0);x向比例为1; y向比例为2; 旋转角度为0,可以写成:
(command "insert" "gc124" '(0 0 0) "1" "2" "0")
也可以写成
(command "insert" "gc124" '(0 0 0) 1 2 0)
需要加回车的情况:
(command "line" pt1 pt2 "")后面的""表示要用回车来结束程序,这和命令的执行方式是一样的。
比如复制:
(command "copy" ss ""pt1 pt2 )中ss表示选集或单个的图元,""表示要用回车来结束选择,这就意味着可以加入多个选择,然后用""来结束,又如:(command "copy" s1 s2 s3 ...... sn "" pt1 pt2 )。和命令的执行方式是一样的。
如果不知道如何写,可以在图中实际操作一遍,记下步骤,然后将这些步骤写入lsp中再做稍许调整就ok了。
感谢zhynt 热心回复。问题已解决 。代码已更新。。。
页:
[1]