[转帖]绘制铁路线型
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子命令)。 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)
正因为没办法定制这样的线型,剩下最有效的办法就是编程,而不是如何画的问题。要说画,一句话解决:“二条实线一条虚线”。 不过编程还没有学会,席姐的方法也可以。 RAILROAD LINETYPE 请参考 楼上是演示版。
页:
[1]