建筑问答网A125.com > 建筑施工 > 市政工程施工 > 提问

怎样在CAD中绘出缓和曲线 缓和,曲线,行业

未解决  --    --  11个回答  次浏览0
分享微信 发送朋友 打印
提问人:76228 - 泥土工 2级  举报  

如果用坐标绘图,出来的都是折线,怎样能绘出圆滑的缓和曲线

回答即可得20分,回答被采纳则获得悬赏分以及奖励50分。 积分规则
参考资料:
如果您的回答是从其他地方引用,请表明出处网址。
共 11 条 普通回答
楼层: 1
回答人:98356339 - 泥土工 2级 - 提交时间:2015/3/4 5:39:00  举报
工具栏有样条曲线工具
楼层: 2
回答人:32741010 - 泥土工 2级 - 提交时间:2015/3/4 12:11:00  举报
正规来说CAD没有设计这个功能,有些用样条来画是不标准的,但如果会编程序的话,在2008CAD中,增加了一个只有会编程的人才能用的,这里就不说了.比较笨的办法,那就是加密后用曲线画,只要能加密到5米内,出来的座标误差只有3CM内
楼层: 3
回答人:69261173 - 泥土工 2级 - 提交时间:2015/3/4 21:17:00  举报
额,有专门画缓和曲线的CAD插件,需要的话可以联系我的邮箱:twj790527@163.com ,当然也可以在附件里面下载。。。
楼层: 4
回答人:76208643 - 泥土工 2级 - 提交时间:2015/3/5 4:51:00  举报

一、在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)
         (- (+ (- (/ 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))
         (+ (- (/ (* 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)
         (- (/ (+ 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

楼层: 5
回答人:63487726 - 泥土工 2级 - 提交时间:2015/3/5 12:28:00  举报
要准确在标准版CAD里画出缓和曲线是不太可能的,LZ可利用EICAD或者DICAD两套软件安装进去,画起来相当方便
楼层: 6
回答人:86532018 - 泥土工 2级 - 提交时间:2015/3/5 15:41:00  举报
pl,用多段线中的工具
楼层: 7
回答人:56092225 - 泥土工 2级 - 提交时间:2015/3/6 0:17:00  举报
有的,在CAD里“工具”》》“显示精确”》》“圆孤和圆的平滑度”值改到20000,这个最大的平滑度,这样可以看不到“折线”,麻烦的是每新建图纸得先设置平滑度,再开工制作图纸
楼层: 8
回答人:72287 - 泥土工 2级 - 提交时间:2015/3/6 1:31:00  举报
用卡西欧编程计算器计算每米的坐标,展点后连线就可以得到很光滑的缓和曲线
楼层: 9
回答人:50130848 - 泥土工 2级 - 提交时间:2015/3/6 5:28:00  举报
用倒圆角命令可能可以。
楼层: 10
回答人:20046493 - 泥土工 2级 - 提交时间:2015/3/6 10:34:00  举报
用云线命令啊!
楼层: 11
回答人:01580846 - 泥土工 2级 - 提交时间:2015/3/6 19:16:00  举报
先计算曲线每5米的坐标,展开点后连线就可以得到很光滑的缓和曲线(一般五米画出来的误差也是在2公分内,如果要精确,可加密到每米一点)