明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2127|回复: 6

看看圆中心线标注程式问题出在那里?

[复制链接]
发表于 2003-12-16 00:50:00 | 显示全部楼层 |阅读模式
; center.lsp
;本程序创建多个孔的中心线。

(defun C:CENTER (/ COUNT_1 COUNT_2 DIST OBJECTS_X OBJECTS_Y SCALE
      CENTER CENTER_2 ENTITY_1 ENTITY_2 RADIUS RADIUS_2
      LEFT LEFT_2 RIGHT RIGHT_2 NAME
   BOTTOM BOTTOM_2 TOP TOP_2)
   ;设置所有变量
   (setvar "CMDECHO" 0)
   (command "linetype" "S" "CENTER" "")
   (setq SCALE (getvar "DIMSCALE"))
   (setq DIST (* 0.1 SCALE))
   ; 拾取所有的圆
   (princ "\n选择所有希望添加中心线的圆:")
   (princ "\n ")
   (setq OBJECTS_X (ssget '((0 . "CIRCLE"))))
   ;构造两个选择集(水平和垂直)
   (setq OBJECTS_Y (ssget ""))
   ; 绘制水平线的主循环
   (setq COUNT_1 0)
   (while (< COUNT_1 (sslength OBJECTS_X))
      (setq ENTITY_1 (entget (ssname OBJECTS_X COUNT_1)))
      (setq CENTER (cdr (assoc 10 ENTITY_1)))
      (setq RADIUS (cdr (assoc 40 ENTITY_1)))
      (setq RIGHT (polar center 0.0 (+ RADIUS DIST)))
      (setq LEFT (polar RIGHT 3.141592654 (* 2.0 (+ RADIUS DIST))))
      (setq COUNT_2 (+ COUNT_1 1))
      (while (< COUNT_2 (sslength OBJECTS_X))
         (setq ENTITY_2 (entget (ssname OBJECTS_X COUNT_2)))
         (setq CENTER_2 (cdr (assoc 10 ENTITY_2)))
         (if (< (ABS (-  (cadr CENTER) (cadr CENTER_2))) 0.0001)
            (progn
               (setq RADIUS_2 (cdr (assoc 40 ENTITY_2)))
               (setq RIGHT_2 (polar CENTER_2 0.0 (+ RADIUS_2 DIST)))
               (setq LEFT_2 (polar RIGHT_2 3.141592654 (* 2.0 (+ RADIUS_2 DIST))))
               (if (< (car LEFT_2) (car LEFT))
                  (setq LEFT LEFT_2)
               )
               (if (> (car RIGHT_2) (car RIGHT))
                  (setq RIGHT RIGHT_2)
               )
               (setq NAME (ssname OBJECTS_X COUNT_2))
               (setq OBJECTS_X (ssdel NAME OBJECTS_X))
               (setq COUNT_2 (- COUNT_2 1))
            )
         )
         (setq COUNT_2 (+ COUNT_2 1))
      )      (command "line" LEFT RIGHT "")
      (setq COUNT_1 (+ COUNT_1 1))
   )      
   ; 绘制垂直线的主循环
   (setq COUNT_1 0)
   (while (< COUNT_1 (sslength OBJECTS_Y))
      (setq ENTITY_1 (entget (ssname OBJECTS_Y COUNT_1)))
      (setq CENTER (cdr (assoc 10 ENTITY_1)))
      (setq RADIUS (cdr (assoc 40 ENTITY_1)))
      (setq TOP (polar CENTER 1.570796327 (+ RADIUS DIST)))
      (setq BOTTOM (polar TOP 4.712388981 (* 2.0 (+ RADIUS DIST))))
      (setq COUNT_2 (+ COUNT_1 1))
      (while (< COUNT_2 (sslength OBJECTS_Y))
         (setq ENTITY_2 (entget (ssname OBJECTS_Y COUNT_2)))
         (setq CENTER_2 (cdr (assoc 10 ENTITY_2)))
         (if (< (ABS (-  (car CENTER) (car CENTER_2))) 0.0001)
            (progn
               (setq RADIUS_2 (cdr (assoc 40 ENTITY_2)))
               (setq TOP_2 (polar CENTER_2 1.570796327 (+ RADIUS_2 DIST)))
               (setq BOTTOM_2 (polar TOP_2 4.712388981 (* 2.0 (+ RADIUS_2 DIST))))
               (if (> (cadr TOP_2) (cadr TOP))
                  (setq TOP TOP_2)
               )
               (if (< (cadr BOTTOM_2) (cadr BOTTOM))
                  (setq BOTTOM BOTTOM_2)
               )
               (setq NAME (ssname OBJECTS_Y COUNT_2))
               (setq OBJECTS_Y (ssdel NAME OBJECTS_Y))
               (setq COUNT_2 (- COUNT_2 1))
            )
         )
         (setq COUNT_2 (+ COUNT_2 1))
      )
      (command "line" TOP BOTTOM "")
      (setq COUNT_1 (+ COUNT_1 1))
   )
   ; 复位所有变量并清除绘图
   (command "linetype" "S" "BYLAYER" "")
   (command "redraw")
   (setvar "cmdecho" 1)
); end center.lsp
发表于 2003-12-16 09:13:00 | 显示全部楼层
哪儿有问题呢?
 楼主| 发表于 2003-12-16 09:39:00 | 显示全部楼层
画不出中心线,只能出现一个中心点
发表于 2003-12-16 09:51:00 | 显示全部楼层
可在我这里调试正确啊,看结果是否你需要的。。。

本帖子中包含更多资源

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

x
 楼主| 发表于 2003-12-16 12:28:00 | 显示全部楼层
OK!OK!   是我的电脑有问题!感谢大侠!
再请教一个问题-------以上程式如何让同X及同Y坐标的圆中心线不相连,每个圆的中心线是独立的且伸出量为1/3圆
发表于 2003-12-16 13:53:00 | 显示全部楼层
难道是这样:(未做处理,不应该啊,这个比你的那个简单多了)

  1. (defun c:center( / ss i j ent ents ptc r pts)
  2.   (setq ss (ssget '((0 . "CIRCLE"))))
  3.   (setq i 0)
  4.   (repeat (sslength ss)
  5.     (setq ent (ssname ss i))
  6.     (setq ents (entget ent))
  7.     (setq ptc (cdr (assoc 10 ents))
  8.           r (cdr (assoc 40 ents))
  9.           j 0
  10.           pts'())
  11.     (repeat 4
  12.       (setq pts (append pts (list (polar ptc (* j (/ pi 2)) (+ r (/ r 3))))))
  13.       (setq j (1+ j))
  14.     )
  15.     (command "_.line" (nth 0 pts) (nth 2 pts) ""
  16.              "_.line" (nth 1 pts) (nth 3 pts) "")
  17.     (setq i (1+ i))
  18.   )
  19.   (princ)
  20. )
 楼主| 发表于 2003-12-16 17:08:00 | 显示全部楼层
感谢!真是高手让我开眼界啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 08:39 , Processed in 0.183782 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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