明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2196|回复: 2

[基础] 根据图形比例,按固定距离画花圃单个符号,已解决。。。

[复制链接]
发表于 2011-7-16 09:16:54 | 显示全部楼层 |阅读模式
本帖最后由 zhb236623 于 2011-7-16 21:04 编辑
  1. (defun c:hp()
  2. (setvar "CMDECHO" 0)
  3. (setq blc_cass7 (getvar "userr1"))
  4. (cond  (  ( = blc_cass7 500)
  5.            (princ "比例尺,,,,,为500")
  6.            (setq nn 0.5)
  7.          )
  8.    
  9.    
  10.       (  ( = blc_cass7 200)
  11.      (princ "比例尺,,,,,为200")
  12.            (setq nn 0.2)
  13.    )
  14.    
  15.    
  16.    (  ( = blc_cass7 1000)
  17.              (setq nn 1)
  18.      (princ)
  19.    )
  20.    
  21.   (  (and ( /= blc_cass7 500)  ( /= blc_cass7 200)  ( /= blc_cass7 1000))
  22.     (princ "比例尺不为1:500,1:200,1:1000请检查比例尺设置,程序将退出。")
  23.     (exit)
  24.   )
  25. (princ "程序正常运行")
  26. (princ)
  27. )
  28. (if (= (tblobjname "layer" "ZBTZ_tmp") nil)
  29. (progn
  30.   (princ "图层ZBTZ_tmp不存在,新建图层ZBTZ_tmp完成,导入数据将存放在ZBTZ_tmp层")
  31.   (command ".layer" "n" "ZBTZ_tmp" "s" "ZBTZ_tmp" "")
  32.   
  33. )
  34. (progn
  35. (command "layer" "s" "ZBTZ_tmp" "")
  36.   (princ "ZBTZ_tmp图层已存在,导入数据将存放在ZBTZ_tmp层,完成导入")
  37. )
  38. )

  39. (setq s1 (ssget '((0 . "LWPOLYLINE"))))
  40. (command "measure" s1 10)
  41. (if (setq ss (ssget "P" '((0 . "POINT"))))
  42. (progn
  43.   (setq i 1)
  44.   (setq pt (cdr(assoc 10 (entget(ssname ss 0)))))
  45.   (command "insert" "gc124" pt nn nn "0" )
  46.   (repeat (1- (sslength ss))
  47.    (setq pt (cdr(assoc 10 (entget(ssname ss i)))) i (1+ i))
  48.    (command "insert" "gc124" pt nn nn "0" )
  49.   )
  50.    (princ)
  51. )
  52. )
  53. (command "erase" ss "")

  54. (setq tttc (ssget "X" '((8 . "ZBTZ_tmp"))))    ;;选择ZBTZ_tmp图层所有元素。
  55. (command "putp" "c"  "215401" tttc "")     ;;;;这里"215401"要加引号,不加好像不行
  56. ;(command "change" tttc "" "p" "la" "ZBTZ_tmp" "")

  57. (setvar "CMDECHO" 1)
  58. (princ)

  59. )

1.先画条直线,再执行此命令,即可。(部分程序来自明经)

2.(提问)但是不能加入属性,PUTP这句要怎么写。可以先把ZBTZ图层改为ZBTZ_tmp图层。再;(setq tttc '((8 . "ZBTZ_tmp"))),然后再PUTP刷属性。但是这句不怎么会写。

3(提问) command 命令下哪些参数是要加   “”  如 (command "insert" "gc124" pt nn nn "0" )
  然后什么时候要在参数中间加   “”, 这个没搞明白,每次都 要试验好几回 。。。。。。


发表于 2011-7-16 09:42:18 | 显示全部楼层
本帖最后由 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了。



 楼主| 发表于 2011-7-16 21:25:25 | 显示全部楼层
感谢zhynt 热心回复。问题已解决 。代码已更新。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-10 04:13 , Processed in 0.177662 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表