海南省BIM中心

 找回密码
 注册请加微信xycost

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 896|回复: 19

怎样在CAD中绘出缓和曲线

[复制链接]

0

主题

2801

帖子

2655

积分

论坛游侠

Rank: 1

积分
2655
发表于 2014-5-17 20:12:09 | 显示全部楼层 |阅读模式
如果用坐标绘图,出来的都是折线,怎样能绘出圆滑的缓和曲线

回复

使用道具 举报

0

主题

2638

帖子

2483

积分

论坛游侠

Rank: 1

积分
2483
发表于 2014-5-17 20:12:09 | 显示全部楼层
工具栏有样条曲线工具
回复 支持 反对

使用道具 举报

0

主题

2638

帖子

2483

积分

论坛游侠

Rank: 1

积分
2483
发表于 2014-5-17 20:12:09 | 显示全部楼层
正规来说CAD没有设计这个功能,有些用样条来画是不标准的,但如果会编程序的话,在2008CAD中,增加了一个只有会编程的人才能用的,这里就不说了.比较笨的办法,那就是加密后用曲线画,只要能加密到5米内,出来的座标误差只有3CM内
回复 支持 反对

使用道具 举报

0

主题

2638

帖子

2483

积分

论坛游侠

Rank: 1

积分
2483
发表于 2014-5-17 20:12:09 | 显示全部楼层
额,有专门画缓和曲线的CAD插件,需要的话可以联系我的邮箱:twj790527@163.com ,当然也可以在附件里面下载。。
回复 支持 反对

使用道具 举报

0

主题

2633

帖子

5136

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5136
发表于 2014-5-17 20:12:09 | 显示全部楼层
一、在CAD中画出切线长

二、运行程序: 在命令行中输入hh回车

三、选择两条切线,然后输入曲线半径如:2204.5回车

四、输入缓和曲线长,如270,绘图完成!如图

记事本格式内容,新建的lisp语言,在CAD中要先加载

;;多义线摹拟缓和曲线
;;输入起止直线、半径、缓和曲线长或设计车速。
;;命令:HH
(defun com_p() 
  (setq l   0)
  (command "ucs" "o" (list (- 0 x1) 0 0))
  (command "pline" (list 0 0 0) "w" "0" ""
    (repeat 1000
      (setq l (+ l (/ Ls 1000))
            x (+ (- l (/ (* l l l l l) 40 C C)) (/ (* l l l l l l l l l) 3456 C C C C))
            y (* id__ (+ (- (/ (* l l l) 6 C) (/ (* l l l l l l l) 336 C C C)) (/ (* l l l l l l l l l l l) 42240 C C C C C)))
      );setq
      (command (list x y 0))
    );repaet
  );command 
  (setq pt5 (trans (list x y 0) 1 0)) 
);com_p

(defun ll_v()
  (setq V   (getreal "\nGive Velocity:")
        Ls1 (* V 0.85)
        Ls2 (/ (* 0.0357 V V V) R)
        Ls  (max Ls1 Ls2 (/ R 9))
        Ls  (* (fix (/ Ls 10)) 10.0)
  );setq
  (if (> Ls R) (setq Ls R))
  (ll_d)
);ll_v

(defun ll_d() 
  (setq os (getvar "osmode"))
  (setvar "osmode" 0) 
  (setq C   (* Ls R)
        q   (- (+ (- (/ Ls 2) (/ (* Ls Ls Ls) 240 R R)) (/ (* Ls Ls Ls Ls Ls) 34560 R R R R)) (/ (* Ls Ls Ls Ls Ls Ls Ls) 8386560 R R R R R R))
        pt1 (cdr (assoc 10 (entget (car p1))))
        pt2 (cdr (assoc 11 (entget (car p1))))
        pt10(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))
        pt3 (cdr (assoc 10 (entget (car p2))))
        pt4 (cdr (assoc 11 (entget (car p2))))
        pt20(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2))
        p   (+ (- (/ (* Ls Ls) 24 R) (/ (* Ls Ls Ls Ls) 2688 R R R)) (/ (* Ls Ls Ls Ls Ls Ls) 506880 R R R R R))
 jd  (inters pt1 pt2 pt3 pt4 nil)
        alf1(angle pt10 jd)
        alf2(angle pt20 jd)
        alf (- (angle jd pt20) alf1) 
  );setq 
  (if (or (> alf pi) (and (< alf 0) (> alf (- 0 pi))))
    (progn
      (setq id__ -1)
      (if (> alf pi) (setq alf (- (+ pi pi) alf)) (setq alf (abs alf)))
    );progn
    (progn
      (setq id__ 1)
      (if (<= alf (- 0 pi)) (setq alf (+ pi pi alf)))
    );progn
  );if
  (setq x0  (/ (* (+ p R) (sin(/ alf 2.0))) (cos(/ alf 2.0)))
        x1  (+ x0 q)
        Cl  (+ (*  alf R) Ls)
        E   (- (/ (+ R p) (cos(/ alf 2))) R)
  );setq 
  (command "ucs" "o" jd)
  (command "ucs" "z" (/ (* 180 alf1) pi))
  (com_p) (setq pt6 pt5)
  (setq ppt1 (list x1 0 0)) 
  (command "ucs" "") 
  (command "ucs" "o" jd)
  (command "ucs" "z" (/ (* 180 alf2) pi))
  (setq id__ (- 0 id__)) (com_p)
  (setq ppt2 (list x1 0 0)) 
  (command "ucs" "")
  (if (> (abs(distance jd pt1)) (abs(distance jd pt2)))
    (setq ptt1 pt1)
    (setq ptt1 pt2)
    );if
  (setq ptt2 (polar jd alf1 (- 0 x1))) 
  (thh p1 ptt1 10)
  (thh p1 ptt2 11)
  (if (> (abs(distance jd pt3)) (abs(distance jd pt4)))
    (setq ptt3 pt3)
    (setq ptt3 pt4)
    );if
  (setq ptt4 (polar jd alf2 (- 0 x1)))
  (thh p2 ptt3 10)
  (thh p2 ptt4 11)
  (if (= id__ 1) (command "arc" pt5 "e" pt6 "r" R) (command "arc" pt6 "e" pt5 "r" R))
  (setq alfd (angf alf))
  (setvar "osmode" os) 
  (command "cmdecho" "1")
  (command "text" pause pause "" (strcat "偏 角=" alfd))
  (command "cmdecho" "0")
  (command "text" ""  (strcat "半 径=" (rtos R 2 2)))
  (command "text" ""  (strcat "切 线 长=" (rtos x1 2 2)))
  (command "text" ""  (strcat "曲 线 长=" (rtos Cl 2 2)))
  (command "text" ""  (strcat "外 距=" (rtos E 2 2)))
  (command "text" ""  (strcat "缓和曲线长=" (rtos Ls 2 2)))
);ll_d

(defun angf (alf)
  (setq alff (angtos alf 1 4)
 n 1
 kk (strlen alff))
  (repeat kk
    (setq alfn (substr alff n 1))
    (if (= alfn "d")
      (setq nn n));if
    (setq n (+ n 1))
    );repeat
  (strcat (substr alff 1 (- nn 1)) "%%" (substr alff nn))
  );angf

(defun c:hh(/ p1 p2 pt1 pt2 pt3 pt4 pt5 pt6 pt10 pt20 id__ R V Ls E p3
                r1 x y l x0 x1 C jd alf alf1 alf2 q p Cl Ls1 Ls2)
  (command "ucs" "")
  (setq p1 nil p2 nil) 
  (while (= p1 nil) (setq p1 (entsel "\n拾取第一条直线:")))
  (redraw (car p1) 3)
  (while (= p2 nil) (setq p2 (entsel "\n拾取第二条直线:")))
  (redraw (car p2) 3)
  (initget 1)
  (setq R (getdist "\n请输入弯道半径 R:  "))
  (initget 1 "Ls V")
  (setq p3 (getdist "\n输入缓和曲线长度(Ls)或[设计速度(V)]:  "))
  (if (= p3 "V") (ll_v) (progn (setq ls p3) (ll_d)))
  (princ)
);eline

(defun thh(len pt h)
  (setq en_data (entget (car len))
        old_data (assoc h en_data)
 new_data (cons h pt)
 en (subst new_data old_data en_data));setq
  (entmod en)
  );thh

回复 支持 反对

使用道具 举报

0

主题

2633

帖子

5136

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5136
发表于 2014-5-17 20:12:10 | 显示全部楼层
要准确在标准版CAD里画出缓和曲线是不太可能的,LZ可利用EICAD或者DICAD两套软件安装进去,画起来相当方便
回复 支持 反对

使用道具 举报

0

主题

2633

帖子

5136

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5136
发表于 2014-5-17 20:12:10 | 显示全部楼层
pl,用多段线中的工具
回复 支持 反对

使用道具 举报

0

主题

2633

帖子

5136

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5136
发表于 2014-5-17 20:12:10 | 显示全部楼层
有的,在CAD里“工具”》》“显示精确”》》“圆孤和圆的平滑度”值改到20000,这个最大的平滑度,这样可以看不到“折线”,麻烦的是每新建图纸得先设置平滑度,再开工制作图纸
回复 支持 反对

使用道具 举报

0

主题

2811

帖子

2589

积分

论坛游侠

Rank: 1

积分
2589
发表于 2014-5-17 20:12:10 | 显示全部楼层
用卡西欧编程计算器计算每米的坐标,展点后连线就可以得到很光滑的缓和曲线
回复 支持 反对

使用道具 举报

0

主题

2811

帖子

2589

积分

论坛游侠

Rank: 1

积分
2589
发表于 2014-5-17 20:12:10 | 显示全部楼层
用倒圆角命令可能可以
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条


QQ|小黑屋|手机版|Archiver|ChinaBIM ( 琼ICP备14001050号-1 )

GMT+8, 2024-12-23 04:20 , Processed in 0.032720 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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