席恩蒂 发表于 2005-1-15 11:59:00

[转帖]绘制铁路线型

  AutoCAD中带有各种线型,包括一些带符号(如圆圈、方框等)的线型,但却没有铁路线型。包括Autodesk公司新推出的GIS系统--World这一与地图紧密相关的产品,在其五花八门的线型中也未发现有铁路线型。可见,铁路这种特殊的线型,看似简单,实则很难用AutoCAD线型实现。下面向大家介绍一种简便、变通的解决方法。       


  1.使用多义线绘制命令(Pline)画出铁路中心线(颜色为黑色,假设曲线长度约为1000个图形单位)。       


  2.使用多义线编辑命令(Pedit)将画出的铁路中心线宽度用Width子命令设置为所需宽度,例如5,并使用子命令Fit或Spline将曲线进行拟合,使其成为光滑的曲线。       


  3.使用复制命令(Copy)将上述多义线在原位置复制,即在响应Copy的"Second        point        of        displacement:"时使用"@0,0"即可。       


  4.使用Pedit命令使复制出的多义线宽度略为减小,例如减小到3。       


  5.使用线型命令(LineType)装载虚线线型,例如ACAD_ISO03W100。       


  6.使用目标属性修改命令(DDModify)对复制出的多义线属性进行修改,将"Color"设置为255(白色),"Linetype"设置为虚线,"Linetype        Scale"设置成适当值(视绘图比例而定,如果在线型比例命令LTScale设置的线型比例为1,则该值设为2),并将"Polyline"的"LT        Gen"选项选中,即将该曲线设置成连续线型。       


  7.如果没有出现预期的效果,可使用刷新命令(ReGen)对图形进行刷新,或者使用改变实体显示顺序命令(DrawOrder),将白色虚线的多义线放到上一层(选Front子命令)或将黑色实线的多义线放到下一层(选Back子命令)。

xyp1964 发表于 2005-1-17 01:14:00

ljc编了一个:;;;铁路线绘制
;;;把spline变成铁路线示图
;;;ljc 2004.3
(DEFUN O1O (name cd / cm tc os q zd qd ang qdz zdy w1 w2 w3 w4 p1p2 p3
         p4)
   ;;name--spline的图元名 cd铁路线的宽度
   (setqcm (getvar "cmdecho")
tc (getvar "clayer")
os (getvar "osmode")
   )
          ;(command "osnap" "off")
   (setvar "osmode" 0)
   (setqcd   (/ cd 2)
q   (entget name)
Zd   (cdr (assoc 10 q))
qd   (cdr (LAST q))
ANG (ANGLE QD ZD)
qdz (polar qd (+ ANG (/ PI 2)) cd)
qdy (polar qd (- ANG (/ PI 2)) cd)
   )
   (command "offset" cd name qdz "")
   (setqw1 (entlast)
p1 (cdr (assoc 10 (entget w1)))
p2 (cdr (last (entget w1)))
   )
   (command "offset" cd name qdy "")
   (setqw2 (entlast)
p4 (cdr (assoc 10 (entget w2)))
p3 (cdr (last (entget w2)))
   )
   (command "line" p1 p4 "")
   (setq w3 (entlast))
   (command "line" p2 p3 "")
   (setq w4 (entlast))
   (command "-bhatch" "p" "solid" "s" w1 w2 w3 w4 "" "")
   (command "erase" w1 w2 w3 w4 name "")
   (setvar "cmdecho" cm)
   (setvar "osmode" os)
   (setvar "clayer" tc)
)
(defun c:tielu (/ line n0 j linex q qd zd cdd ang qdz dqy)
   (setqcm (getvar "cmdecho")
tc (getvar "clayer")
os (getvar "osmode")
   )
          ;(command "osnap" "off")
   (setvar "osmode" 0)
   (print "请选择铁路线(SPLINE):")
   (print)
   (setqline (ssget '((0 . "SPLINE")))
ds   (getint "请输黑白段长度:")
cd   (getreal "请输入绘制铁路线的宽度:")
   )
   (command "ucs" "" "")
   (command "erase" (ssget "x" '((0 . "point"))) "")
   (setqn0 (sslength line)
j   0
n2 0
   )
   (repeat n0
       (setq linex(ssname line j)
   cdd(/ cd 2)
   q(entget linex)
   Zd(cdr (assoc 10 q))
   qd(cdr (LAST q))
   ANG(ANGLE QD ZD)
   qdz(polar qd (+ ANG (/ PI 2)) (* 10 cd))
   qdy(polar qd (- ANG (/ PI 2)) (* 10 cd))
       )
       (command "offset" cdd linex qdz linex qdy "")
       (command "measure" linex ds "")
       (command)
       (setq point(ssget "x" '((0 . "point")))
   n(sslength point)
   i0
   ii0
       )
       (repeat n
         (setq p1 (cdr (assoc 10 (entget (ssname point i)))))
         (command "erase" (ssname point i) "")
         (command "zoom"
               "w"
               (polar p1 (* pi 0.75) ds)
               (polar p1 (* pi -0.25) ds)
         )
         (command "break" (list (car p1) (cadr p1) (caddr p1)) "@")
         (if (= 2 ii)
(setq ii 0)
         )
         (if (= 0 ii)
(O1O (entlast) cd)
(command "erase" (entlast) "")
         )
         (setq ii (1+ ii)
         i   (+ i 1)
         )
       )
       (setq j (+ j 1))
       (if(= 2 ii)
         (O1O linex cd)
         (command "erase" linex "")
       )
   )
   (command "zoom" "e" "")
   (setvar "cmdecho" cm)
   (setvar "osmode" os)
   (setvar "clayer" tc)
)
;;(print "敲入tL运行程序---LJC")
(PRINT)

trkx 发表于 2005-1-15 21:10:00

正因为没办法定制这样的线型,剩下最有效的办法就是编程,而不是如何画的问题。要说画,一句话解决:“二条实线一条虚线”。

wawbt 发表于 2005-1-16 20:36:00

不过编程还没有学会,席姐的方法也可以。

Joseflin 发表于 2005-1-17 09:40:00

RAILROAD LINETYPE 请参考

xyp1964 发表于 2005-1-17 11:42:00

楼上是演示版。
页: [1]
查看完整版本: [转帖]绘制铁路线型