明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1857|回复: 5

中心线程序!

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

大家好,这是我使用的一个很好用的画圆和直线中心线程序,在使用过程中发现如下问题啦!

如果在相交线比较多的情况下,画出来的中心就不准确,不是偏的就是中心线是斜的!

另外,我还想控制中心线的长度,就是说我画12MM中心线,我想让中心线为13MM,望大侠们帮我改改!

本帖子中包含更多资源

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

x
发表于 2007-6-9 11:02 | 显示全部楼层
在世界坐标和用户坐标下都可以用,楼主自己测试过吗?
发表于 2007-6-9 11:17 | 显示全部楼层

确实,有的时候不能正常画出来。。。

有图为证都是按楼主的程序画的。。

本帖子中包含更多资源

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

x
发表于 2007-6-9 12:16 | 显示全部楼层

运行前先把osmode变量保存(setq old_osm (getvar "osmode"))

再设置为(setvar "osmode" 0)

进入程序

。。。。。。

最后恢复原来的变量(setvar "osmode" old_osm)

 楼主| 发表于 2007-6-9 18:03 | 显示全部楼层

兄弟,不行呢!

再改改啦

发表于 2007-6-22 21:53 | 显示全部楼层

;;;中心线自动标注,角平分线有问题
(DEFUN c:cc ()
;(warn)
(setq old_osm (getvar "osmode"))
(setq cl_old (getvar "clayer"))
(setvar "cmdecho" 0)
;-----------------------------------------------------------------------------------------
   (if (not (tblsearch "layer" "cen"))
       (command "_.layer" "_new" "cen" "_color" "1" "cen" "_ltype" "center" "cen" "")
       (command "_.layer" "thaw" "cen" "on" "cen" "unlock" "cen" "")
   )
;------------------------------------------------------------------------------------------
(setq sel_id "OK"
       cl_ent1 (entsel "\:请选取直线LINE 圆弧ARC 圆CIRCLE:"))
(while (and sel_id cl_ent1)
  (setq cl_dat1 (entget (car cl_ent1))
        cl_nam1 (cdr (assoc 0 cl_dat1)))
  (if (and (/= "LINE"   cl_nam1)
           (/= "ARC"    cl_nam1)
           (/= "CIRCLE" cl_nam1))
   (setq cl_ent1 (entsel "\r:请选取直线LINE 圆弧ARC 圆CIRCLE:"))
   (setq sel_id nil)
  )
)
(if (and cl_ent1 (null sel_id))
  (progn
   (setq cl_lay (cdr (assoc 8 cl_dat1)))
   (if (= "LINE" cl_nam1)
    (progn
     (setq cl_ent2 (entsel "\:请选取另一直线:"))
     (if cl_ent2
      (progn
       (setq cl_dat2 (entget (car cl_ent2))
             cl_nam2 (cdr (assoc 0 cl_dat2)))
       (if (/= "LINE" cl_nam2)
        (exit)
        (progn
         (setq cl_pt1 (trans (cdr (assoc 10 cl_dat1)) 0 1)
               cl_pt2 (trans (cdr (assoc 11 cl_dat1)) 0 1)
               cl_pt3 (trans (cdr (assoc 10 cl_dat2)) 0 1)
               cl_pt4 (trans (cdr (assoc 11 cl_dat2)) 0 1)
               cl_pt5 (trans (cadr cl_ent1) 0 1))
         (if (<= (distance cl_pt1 cl_pt5) (distance cl_pt2 cl_pt5))
          (setq cl1_pt cl_pt1 cl2_pt cl_pt2)
          (setq cl1_pt cl_pt2 cl2_pt cl_pt1) 
         )       
         (if (<= (distance cl_pt3 cl_pt5) (distance cl_pt4 cl_pt5))
          (setq cl3_pt cl_pt3 cl4_pt cl_pt4)
          (setq cl3_pt cl_pt4 cl4_pt cl_pt3) 
         )
         (setq cl_pnt1 (polar cl1_pt (angle cl1_pt cl3_pt) (* 0.5 (distance cl1_pt cl3_pt)))
               cl_pnt2 (polar cl2_pt (angle cl2_pt cl4_pt) (* 0.5 (distance cl2_pt cl4_pt))))
         (setvar "clayer" "cen")
   (setvar "osmode" 0)
   (command "CELTSCALE"  (/ cl_rad 3));设置当前线型比例
         (command "line" (polar cl_pnt1 (angle cl_pnt2 cl_pnt1) (* 0.1 (distance cl_pnt1 cl_pnt2)))
                         (polar cl_pnt2 (angle cl_pnt1 cl_pnt2) (* 0.1 (distance cl_pnt1 cl_pnt2))) "")
         (setvar "clayer" cl_old)
   (setvar "osmode" old_osm)
   (setvar "CELTSCALE" (getvar "ltscale"))
        )     
       )
      )
     )
    )
    (progn
     (setq cl_pt (trans (cdr (assoc 10 cl_dat1)) 0 1)
           cl_rad (cdr (assoc 40 cl_dat1)))
(if (= "ARC" cl_nam1)
 (progn
     (setvar "clayer" "cen")
  (setvar "osmode" 0)
  (command "CELTSCALE"  (/ cl_rad 25));设置当前线型比例
     (command "line" (list (+ (* 0.2 cl_rad) (car cl_pt)) (cadr cl_pt))
                     (list (- (car cl_pt) (* 0.2 cl_rad)) (cadr cl_pt)) "")
     (command "line" (list (car cl_pt) (+ (* 0.2 cl_rad) (cadr cl_pt)))
                     (list (car cl_pt) (- (cadr cl_pt) (* 0.2 cl_rad))) "")
     (setvar "clayer" cl_old)
  (setvar "osmode" old_osm)
  (setvar "CELTSCALE" (getvar "ltscale"))
 )
 (progn
     (setvar "clayer" "cen")
  (setvar "osmode" 0)
  (command "CELTSCALE"  (/ cl_rad 3));设置当前线型比例
     (command "line" (list (+ (* 1.2 cl_rad) (car cl_pt)) (cadr cl_pt))
                     (list (- (car cl_pt) (* 1.2 cl_rad)) (cadr cl_pt)) "")
     (command "line" (list (car cl_pt) (+ (* 1.2 cl_rad) (cadr cl_pt)))
                     (list (car cl_pt) (- (cadr cl_pt) (* 1.2 cl_rad))) "")
     (setvar "clayer" cl_old)
  (setvar "osmode" old_osm)
  (setvar "CELTSCALE" (getvar "ltscale"))
  ;(princ (/ cl_rad 25))
 ))
    )
   )
  )
)

  (princ)
)
;;

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 20:26 , Processed in 0.344212 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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