明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1429|回复: 4

如何变成函数 调用运行四次 输出

[复制链接]
发表于 2010-6-28 14:49:00 | 显示全部楼层 |阅读模式

(defun C:di5(/ dx dy dy1 dx1 dx2 diml pt scale dxt dyt dtt dimlt
               lay pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 ptt i)
  (setvar "CMDECHO" 0)      ;控制在 AutoLISP 的 command 函数运行时
                            ; AutoCAD 是否回显提示和输入。0 关闭回显  1 打开回显

  (setq lay (getvar "clayer"))  ;保存当前图层信息
  (command "color" "bylayer")  
  (command "layer" "m" "dim" "c" "green" "dim" "") ;新建 dim 层 绿色
  (if (or (= nil (tblsearch "style" "xw"))         ;  style表中找有没有 xw定义
          (/= (cdr (assoc 40 (tblsearch "style" "xw"))) 0)
      )
    (command "STYLE" "xw" "txt" "150" ".8" "0" "n" "n" "n") ;没有新建 字样式
  )
  (if (= sca nil) (setq sca 1))
  (setq scale (getreal (strcat "\nScale <" (rtos sca 2 0) ">:")))
    (if (= scale nil) (setq scale sca))                    ;比例
    (setq sca scale)
  (command "osnap" "nea")                                  ;捕捉最近点512
  (setq pt (getpoint "\nStart point of DIM <nea mode>: ")) ;开始标注点pt
  (command "osnap" "non")                                  ;关闭捕捉
    (setq dy (cadr pt))                                    ;pt点的x y坐标
    (setq dx (car pt))
  (setq diml 0 i 0)
  (while (/= diml nil)
    (setq diml (getreal "\nDimension text:"))              ;标注的长度
      (if (/= diml nil)
;*********** 坚向标注尺寸 通过pt1 dt pt2 /pt3  pt5 pt4 向上标 ***********
        (progn
          (setq dx1 (- dx 150))                             ;超出尺寸线3
          (setq dx2 (+ dx 400))                             ;起点偏移量7
          (setq pt1 (list dx1 dy))
          (setq pt2 (list dx2 dy))
            (if (= i 0)(command "line" pt1 pt2 ""))      ;标注界线1 
          (setq dy1 (+ dy (/ diml scale)))               ;按比例缩小长度
          (setq pt3 (list dx1 dy1))
          (setq pt4 (list dx2 dy1))
            (command "line" pt3 pt4 "")                  ;标注界线2
          (setq pt (list dx dy))
          (setq pt5 (list dx dy1))                
            (command "line" pt pt5 "")                   ;尺寸线
          (setq pt6 (list (+ dx 70) (- dy 70)))          ;建筑标致 \ 右下点pt6左上点pt7 长度分别70 
          (setq pt7 (list (- dx 70) (+ dy 70)))
            (if (= i 0)(command "pline" pt6 "w" "25" "25" pt7 ""));画建筑标致1箭头
          (setq pt8 (list (+ dx 70) (- dy1 70)))
          (setq pt9 (list (- dx 70) (+ dy1 70)))         
            (command "pline" pt8 "w" "25" "25" pt9 "")             ;画建筑标致2箭头
          (setq dyt (+ dy (/ (/ diml scale) 2)))
          (setq dxt (- dx 70))
          (setq ptt (list dxt dyt))                                 
          (setq dimlt (rtos diml 2 0))
            (command "text" "s" "xw" "c" ptt "150" "90" dimlt)        ;尺寸线中点靠左70的输入长度
          (setq dy (+ dy (/ diml scale))) 
          (setq i (+ i 1))
        )
      )
  )
  (command "layer" "s" lay "")
  (princ)(princ)
)

 

 

 

以上是借用的程序,

 

我现在有四个变量 :1 通行高度 变量a 第二变量 顶帽高变量 b 第三第四为C和d

 

变量在程序中都有值,

 

问题是,如何写调用以上标注程序,谢谢

 

  

 

 楼主| 发表于 2010-6-28 14:50:00 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-6-28 15:19:00 | 显示全部楼层

(defun c:di5()

(setq pt (getpoint "\n please point:"))
(setq diml 0 i 0)
(setq dy (cadr pt))
(setq dx (car pt))

 (while (/= diml nil)
 (setq diml (getreal "\n please dim"))
         (setq dx1 (- dx 150))
         (setq dx2 (+ dx 400))
         (setq dy1 (+ dy diml))
        
         (setq pt1 (list dx1 dy))
         (setq pt2 (list dx2 dy))
         (setq pt3 (list dx1 dy1))
         (setq pt4 (list dx2 dy1))
         (setq pt5 (list dx dy1))
        
 
  (if ( = i 0) ( command "line" pt1 pt2 "") )
  (command "line" pt3 pt4 "")
  (command "line" pt pt5 "")
 
 
         (setq i ( + i 1))
 )
)

 

 

我自己模仿的写的,  有什么不同

 

人家标注可能连续,我的标注在原地不前

 

关键在什么地方,请教???

 

发表于 2010-6-28 16:29:00 | 显示全部楼层

因為...你的pt沒有變化

 楼主| 发表于 2010-6-29 18:05:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 06:43 , Processed in 0.166405 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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