您好,李,谢谢您的建议。问题是,entlast似乎总是返回一条多线的最后一部分,当多条多线组成多条多线时,用户选择了不同的部分。
这是完整的代码
只需画一条线,比如说10个单位长,在线长度内的同一侧拾取2个点,接受返回的距离,线将绘制一个偏移部分,然后我们根据需要重复多个房屋车道。
再试一次,但普林说10个单位长或多个长度。
- (princ "\nTo run again type DRV")
- (princ "\n")
- (defun c:DRV ()
- (setq oldsnap (getvar "osmode"))
- (command "ucs" "w")
- (setq pt1 (getpoint "\npick point 1 left side of driveway:"))
- (setq pt1 (list (car pt1)(cadr pt1) 0.0)) ; rip z elevation out
- (setq pt2 (getpoint "\npick point 2 right side of driveway:"))
- (setq pt2 (list (car pt2)(cadr pt2) 0.0))
- (setq dist (distance pt1 pt2))
- (setq ang (angle pt1 pt2))
- (setq pt3 (polar pt1 ang (/ dist 2.0))) ;1/2 way between drive
- (setq obj (entsel "\nPick back of kerb line"))
- (setvar "osmode" 0)
- (setq objtype (cdr (assoc 0 (entget (car obj)))))
- (IF (or (= objtype "POLYLINE")(= objtype "LWPOLYLINE"))
- (progn
- (setq objpt (cadr obj))
- (princ "\nNow exploding polyline that was picked :")
- (command "explode" obj "")
- (setq ss (ssget objpt))
- (setq obj2 (entget (ssname ss 0)))
- )
- (setq obj2 (entget (car obj))) ; else is linepl
- )
- ;start point of line
- (princ "\nEnter new width of driveway or press enter to accept existing :")
- (princ dist)
- (setq newdist (getreal "..."))
- (setq pt10 (cdr (assoc 10 obj2)))
- (setq pt10 (list (car pt10)(cadr pt10) 0.0)) ; rip z elevation out
- (princ pt10)
- ;end point of line
- (setq pt11 (cdr (assoc 11 obj2)))
- (setq pt11 (list (car pt11)(cadr pt11) 0.0)) ; rip z elevation out
- (princ pt11)
- (setq ang3 (angle pt10 pt3))
- (setq ang4 (angle pt10 pt11))
- (setq dist3 (distance pt3 pt10))
- ;may need a check here to ensure angle is always under 90 1.5707
- (setq angdiff (- ang3 ang4)) ; use cos(ang) = o/h to cal perp point
- (setq dist4 (* (cos angdiff) dist3))
- (setq pt4 (polar pt10 ang4 dist4))
- (setq dist2 (+ (distance pt3 pt4)10.0 ))
- (setq ang2 (angle pt3 pt4))
- (if (= newdist nil)(setq newdist dist))
- (setq halfdist (/ newdist 2.0))
- (setq ang3 (+ ang 3.1417))
- (setq pt5 (polar pt3 ang halfdist))
- (setq pt6 (polar pt3 ang3 halfdist))
- (setq pt7 (polar pt5 ang2 dist2))
- (setq pt8 (polar pt6 ang2 dist2))
- (setq pt9 (inters pt10 pt11 pt5 pt7))
- (setq pt12 (inters Pt10 pt11 pt6 pt8))
- (setq dist4 (- (distance pt5 pt9) 0.3)) ; shorten kerbs by 0.3m
- (setq ang1 (angle pt5 pt9))
- (setq pt13 (polar pt5 ang1 dist4))
- (setq dist4 (- (distance pt6 pt12) 0.3))
- (setq pt14 (polar pt6 ang1 dist4))
- (command "line" pt5 pt13 pt14 pt6 "") ; draw driveway
- (setq ang2 (angle pt12 pt9))
- (setq ang3 (angle pt9 pt12))
- (setq pt15 (polar pt9 ang2 0.6))
- (setq pt16 (polar pt12 ang3 0.6))
- (command "break" pt15 pt16)
- (command "line" pt15 pt13 "")
- (command "line" pt16 pt14 "")
- (setvar "osmode" oldsnap)
- (setq obj nil)
- ;(setq obj2 nil)
- (setq ss nil)
- ) ;end defun
- (princ)
- )
|