这是完整的代码
只需画一条线,比如说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)
;(setqobj2 nil)
(setq ss nil)
) ;end defun
(princ)
)
您是否包括了我提供的递归EntnexttoEnd函数? 您好,李,谢谢您的建议,我的错,问题实际上在于break命令,如果它的pline不起作用,但如果您在命令行上运行该行(命令“break”pt15 pt16)效果很好,则始终适用于该行,以便正确计算所有点。
尝试替换为:
(command "break" "_non" pt15 "_non" pt16)
这可能很简单,因为你的OSnap正在处理事情。
页:
1
[2]