明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 843|回复: 3

[已解答] 求助!新手写的代码,有几个问题求指点。

[复制链接]
发表于 2015-12-5 17:29:52 | 显示全部楼层 |阅读模式
本帖最后由 6224jjyy 于 2015-12-5 18:33 编辑

程序思路,输入圆的周长为<600>,就画1个周长500的圆,和一个周长100的圆弧。并在圆心标注0.6。
同理,输入圆的周长为<4000>,就画8个周长500的圆,并在圆心标注4。

现在主要有3个问题。。
1、直接用AP加载代码不成功,必须进入lisp编辑器,把代码复制进去,才能加载上。什么原因?
2、(command "layer" "m" "@立管" "c" 1 "" ""),这段代码,不能设置图层的颜色,哪里写错了?
3、我想让圆的的标注,保留1位小数(比如是0.6),下面三行代码,应该怎么改?
如果把系统变量“DIMZIN”改成4,CAD显示是15位小数(如下图所示“0.600000000000000”)。
如果把系统变量“DIMZIN”改成8,CAD显示是整数(如下图所示“0”)。

(setq 圆的周长 (read (rtos 圆的周长 2 1)))  ;转换精度,保留小数点后一位
(setq 圆的标注 (/ 圆的周长 1000))
(command "text" "j" "m" 圆心位置 30 0 圆的标注)
-------------------------------------------------------------------------------------------------------------
(defun c:cc()
(setq 圆的周长 (getint "请输入圆的周长mm :"))
(setq 圆心位置 (GETPOINT "\n指定圆心位置 : "))  
(while 圆心位置
  (if (= (rem 圆的周长 100) 0)
    (command (c1))
    (princ "\n输入错误")
  )
(setq 圆心位置 (GETPOINT "\n指定圆心位置 : "))
))

(defun c1()
(setq AA nil BB nil ang nil)     ;清空参数(必须清空ang)
(setvar "cmdecho" 0)             ;关闭系统响应
(setq 图层 (getvar "clayer"))    ;备份图层
(setq 颜色 (getvar "Cecolor"))   ;备份颜色

(setq AA (/ 圆的周长 500))
(setq BB (rem 圆的周长 500))
  
(command "layer" "m" "@立管" "c" 5 "" "")    ;设置图层(有问题)
(setvar "cecolor" "bylayer")                 ;设置颜色的系统变量

(setq 圆的周长 (read (rtos 圆的周长 2 1)))   ;转换精度,保留小数点后一位
(setq 圆的标注 (/ 圆的周长 1000))
(command "text" "j" "m" 圆心位置 30 0 圆的标注)   ;精度有问题

(repeat AA
(COMMAND "circle" 圆心位置 79.58)
)
  
(cond
((= bb 400)(setq ang (* 360 (/ 400.0 500))))
((= bb 300)(setq ang (* 360 (/ 300.0 500))))
((= bb 200)(setq ang (* 360 (/ 200.0 500))))
((= bb 100)(setq ang (* 360 (/ 100.0 500))))
;(t)可以不要T
)
(COMMAND "arc" "c" 圆心位置 (polar 圆心位置 0 79.58) "a" ang "")
(princ)
(setvar "cmdecho" 1)            ;开启系统响应
(setvar "clayer" 图层)          ;还原图层
(setvar "Cecolor" 颜色)         ;还原颜色
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-12-5 17:31:11 | 显示全部楼层
本帖最后由 6224jjyy 于 2015-12-5 17:32 编辑

头疼死了。。lisp这么难!写几个简单的代码,总是搞不定,出问题。。
求各路大神的帮助!!!帮忙改一改代码。。思路就是,根据输入值,画圆和圆弧。
发表于 2015-12-6 10:34:57 | 显示全部楼层
  1. (defun c:cc ()
  2.   (setq leng (getint "请输入圆的周长mm: "))
  3.   (if (= (rem leng 100) 0)
  4.     (while (setq p0 (getpoint "\n指定圆心位置: "))
  5.       (c1)
  6.     )
  7.   )
  8.   (princ)
  9. )
  10. (defun c1 (/ bb ang)
  11.   (command "layer" "m" "立管" "c" 5 "" "")
  12.   (setq        bb  (rem leng 500.)
  13.         ang (cond ((= bb 400) (* 360 (/ 400.0 500)))
  14.                   ((= bb 300) (* 360 (/ 300.0 500)))
  15.                   ((= bb 200) (* 360 (/ 200.0 500)))
  16.                   ((= bb 100) (* 360 (/ 100.0 500)))
  17.                   (t 0)
  18.             )
  19.         p1  (polar p0 0 79.58)
  20.   )
  21.   (command "text" "j" "m" p0 30 0 (rtos (/ leng 1000.) 2 2))
  22.   (repeat (/ leng 500)
  23.     (command "circle" p0 79.58)
  24.   )
  25.   (if (/= ang 0)
  26.     (command "arc" "c" p0 p1 "a" ang)
  27.   )
  28. )
 楼主| 发表于 2015-12-6 15:18:26 | 显示全部楼层
xyp1964 发表于 2015-12-6 10:34

非常感谢!!!大爱
我测试一下,很好用。。我再研究研究代码。。再次感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 00:35 , Processed in 0.172013 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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