PDA

View Full Version : Hatching entities



Hov
16th Jul 2005, 08:10 am
:?

I've just started writing a routine to draw 2 leaders, a line and a circle to represent the extent of reinforcing bars in a rc layout.

The idea is that most reinforced concrete slabs are rectangular so the program asks for 5 points to position the leaders/lines/circle and then calculates the offsets from the points specified. The code works drawing left to right and up to down.

I'd like to hatch the circle with solid fill without any prompts from the user,
but am unsure how to do this.

Any help greatly appreciated

(defun c:rc ()
(setq offset 0)
(graphscr)
(setvar "cmdecho" 0)
;gets osmode @ start
(setq osn (getvar"osmode"))
(setvar "osmode" 512)
(setq pt1 (getpoint "\npick baseline point: "))
(setvar "osmode" 128)
(setvar "orthomode" 1 )
(setq pt2 (getpoint pt1 "\npick second baseline point: "))
(setq offset (getreal "\nconcrete cover:"))



;Leader left to right
(if (and(<(car pt1)(car pt2))(=(cadr pt1)(cadr pt2)))
(progn

(setvar "osmode" 0)
;calculate offset point pt1a
(setq pt1a (list(car pt1a)(+(car pt1)offset)))
(setq pt1a (list(cadr pt1a)(cadr pt1)))


(setq pt2a (list(car pt2a)(-(car pt2)offset)))
(setq pt2a (list(cadr pt2a)(cadr pt2)))


(command "leader" pt1a pt2a "" "" "n")
(command "leader" pt2a pt1a "" "" "n")
)
)
;if leader is drawn from right to left
(if (and(>(car pt1)(car pt2))(=(cadr pt1)(cadr pt2)))
(progn

(setvar "osmode" 0)
;calculate offset point pt1a & 2a
(setq pt1a (list(car pt1a)(-(car pt1)offset)))
(setq pt1a (list(cadr pt1a)(cadr pt1)))
(setq pt2a (list(car pt2a)(+(car pt2)offset)))
(setq pt2a (list(cadr pt2a)(cadr pt2)))
(command "leader" pt1a pt2a "" "" "n")
(command "leader" pt2a pt1a "" "" "n")
)
)
;pick a point on leader line
(setvar "osmode" 512)

(setq pt3 (getpoint"\npick a vertical point on line"))
(if(and (>(car pt3)(car pt1a)) (<(car pt3)(car pt2a)) (=(cadr pt3)(cadr pt1)))
(progn
(command"circle" pt3 "25")
; I'd like to hatch the circle without any input
(setvar "osmode" 128)
(setq pt4(getpoint pt3"\pick first vertical point"))
(setq pt5(getpoint pt4"\pick second vertical point"))
(setvar "osmode" osn)
)
(princ"\npoint not on line")
)


(if(and (<(car pt3)(car pt1a)) (>(car pt3)(car pt2a)) (=(cadr pt3)(cadr pt1)))
(progn
(command"circle" pt3 "25")
(setvar "osmode" 128)
(setq pt4(getpoint pt3"\pick first vertical point"))
(setq pt5(getpoint pt4"\pick second vertical point"))
(setvar "osmode" osn)
)
(princ"\npoint not on line")
)
;calculate offsets
(if(<(cadr pt4)(cadr pt5))
(progn
(setq pt4a (list(car pt4a)(car pt4)))
(setq pt4a (list(cadr pt4a)(+(cadr pt4)offset)))
(setq pt5a (list (car pt5a)(car pt5)))
(setq pt5a (list (cadr pt5a)(-(cadr pt5)offset)))
)
)
(if(>(cadr pt4)(cadr pt5))
(progn
(setq pt4a (list(car pt4a)(car pt4)))
(setq pt4a (list(cadr pt4a)(-(cadr pt4)offset)))
(setq pt5a (list (car pt5a)(car pt5)))
(setq pt5a (list (cadr pt5a)(+(cadr pt5)offset)))
)
)


(setvar "osmode" 0)
(command "line" pt4a pt5a "")





(setvar "osmode" osn)
(setvar "cmdecho" 1)
)

CAB
18th Jul 2005, 04:16 pm
Change this

&#40;command "circle" pt3 "25"&#41;
; I'd like to hatch the circle without any input

to this


&#40;command "circle" pt3 "25"&#41;
&#40;setq ent &#40;entlast&#41;&#41;
&#40;command "hatch" "solid" ent ""&#41;

If you posted a picture or drawing of what you are working on we could help you better.
It is difficult to see from the code what exactly is supposed to be taking place.

Hov
18th Jul 2005, 06:31 pm
:)

CAB

Thanks for the bit of code, it worked a treat. It would have taken me ages to figure it out! I'll post a version showing what it's meant to do in the near future.

Regards

CAB
18th Jul 2005, 07:22 pm
You're welcome.

Hov
27th Jul 2005, 05:53 am
:wink:

Type "ccover" at the command line and set the variables. This saves the data to cover.text on your desktop. Anybody who would like to try out the routine needs to change the pathname to where you want the file saved as marked in red.

Draw a rectangle to show a boundary.

Type "rcd" and the program will ask you for five points, and then draw a series of lines & leaders.

Do not format text or dimension styles before you use the routine.

The text and arrow sizes will appear very small

One problem with the code is that if you format a text style before you use the program a set of quotation marks have to be removed from
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "") as highlighted in green.


If anybody has any suggestions I'd be grateful.

Regards

(setq count 0)
;writes concrete cover text offset whether text is be be placed up down left or right to cover.txt
(defun C:ccover ()

(setq f (open "C:/Documents and Settings/Hov/desktop/cover.txt" "w"))
(setq cover (getreal"\n\Enter concrete cover: "))
(print cover f)
(setq textoffset (getreal"\n\Enter text offset: "))
(print textoffset f)
(setq textd(getstring"\Enter text offset direction (l or r): "))

(if (= textd "l")
(setq textdirection 0)
(setq textdirection 1)
)

(if (= textd "r")
(setq textdirection 1)
(setq textdirection 0)
)
(print textdirection f)
(setq textd(getstring"\n\Enter text offset direction(u or d): "))
(if (= textd "u")
(setq textvert 1)
(setq textvert 0)
)
(If (= textd "d")
(setq textvert 0)
(setq textvert 1)
)

(print textvert f)


(close f)
(princ)
(setq count 1)

)
;reads cover from cover.txt
(defun c:cover()
(setq fi "C:/Documents and Settings/Hov/desktop/points.txt")
(setq f (open fi "r"))
(read-line f)
(setq cover (read-line f))
(setq textdirection (read-line f))
(setq textvert (read-line f))
;(setq dmstyle (read-line f))
;(command"-dimstyle" "" dmstyle)
(princ)
)
;rcd detail
(defun c:rcd ()


(command"layer" "n" "rebar" "")
(command"layer" "n" "redim" "")
;(setq cover 0)
(graphscr)
(setvar "cmdecho" 1)
(if (= count 0)
(progn
(print"ccover not initialised this session")

)
)
;gets osmode @ start
(setq osmod (getvar"osmode"))
;get coverset for concrete cover
;(setq cover (getreal "\nconcrete cover:"))
;get first point
(setvar "osmode" 512)
(setq pt1 (getpoint"\npick baseline point: "))
;get perpendicular second point
(setvar "osmode" 128)
(setvar "orthomode" 1)
(setq pt2 (getpoint pt1"\npick second baseline point: "))


;leader line top to bottom

(if(>(cadr pt1)(cadr pt2))
(progn
(setq pt1a(list(car pt1a)(car pt1)))
(setq pt1a(list(cadr pt1a)(-(cadr pt1)cover)))
(setq pt2a(list(car pt2a)(car pt2)))
(setq pt2a(list(cadr pt2a)(+(cadr pt2)cover)))
(setq vert 1)
)
)

;leader line bottom to top

(if(<(cadr pt1)(cadr pt2))
(progn
(setq pt1a (list(car pt1a)(car pt1)))
(setq pt1a (list(cadr pt1a)(+(cadr pt1)cover)))
(setq pt2a (list (car pt2a)(car pt2)))
(setq pt2a (list (cadr pt2a)(-(cadr pt2)cover)))
(setq vert 1)
)
)

;leader line left to right

(if(<(car pt1)(car pt2))
(progn

(setq pt1a(list(car pt1a)(+(car pt1)cover)))
(setq pt1a(list(cadr pt1a)(cadr pt1)))
(setq pt2a(list(car pt2a)(-(car pt2)cover)))
(setq pt2a(list(cadr pt2a)(cadr pt2)))


(setq vert 2)
)
)

;leader line right to left

(if(>(car pt1)(car pt2))
(progn
(setq pt1a(list(car pt1a)(-(car pt1)cover)))
(setq pt1a(list(cadr pt1a)(cadr pt1)))
(setq pt2a(list(car pt2a)(+(car pt2)cover)))
(setq pt2a(list(cadr pt2a)(cadr pt2)))
(setq vert 2)
)
)


;Draw Arrows with coverset
(command"layer" "s" "redim" "")
(setvar "osmode" 0)
(command"leader" pt1a pt2a "" "" "n" )
(setq ent1 (entlast))
(command"leader" pt2a pt1a "" "" "n" )
(setq ent2 (entlast))

(if(= vert 2)
(progn
(setq ptup(list(car ptup)(car pt1a)))
(setq ptup(list(cadr ptup)(+(cadr pt1a)40)))
(setq ptdown(list(car ptdo)(car pt1a)))
(setq ptdown(list(cadr ptdown)(-(cadr pt1a)40)))
(command"line" ptup ptdown "")
(setq ent3 (entlast))
(setq ptup(list(car ptup)(car pt2a)))
(setq ptup(list(cadr ptup)(+(cadr pt2a)40)))
(setq ptdown(list(car ptdo)(car pt2a)))
(setq ptdown(list(cadr ptdown)(-(cadr pt2a)40)))
(command"line" ptup ptdown "")
(setq ent4 (entlast))
))
(if(= vert 1)
(progn
(setq ptright(list(car ptright)(+(car pt1a)40)))
(setq ptright(list(cadr ptright)(cadr pt1a)))
(setq ptleft(list(car ptleft)(-(car pt1a)40)))
(setq ptleft(list(cadr ptleft)(cadr pt1a)))
(command"line" ptleft ptright "")
(setq ent3 (entlast))
(setq ptright(list(car ptright)(+(car pt2a)40)))
(setq ptright(list(cadr ptright)(cadr pt2a)))
(setq ptleft(list(car ptleft)(-(car pt2a)40)))
(setq ptleft(list(cadr ptleft)(cadr pt2a)))
(command"line" ptleft ptright "")
(setq ent4 (entlast))
))



;position intersection point bottom to top
(setvar "osmode" 512)

(setq pt3 (getpoint"\npick a vertical point on line"))

(command"layer" "S" "Redim" "")
(command"circle" pt3 "25")
(setq ent5 (entlast))
(command "hatch" "solid" ent5 "")
(setq ent6 (entlast))

(setvar "osmode" 128)
(setq pt4(getpoint pt3"\pick first vertical point"))
(setq pt5(getpoint pt4"\pick second vertical point"))
(setvar "osmode" 0)


;rebar line line top to bottom

(if(>(cadr pt4)(cadr pt5))
(progn
(setq pt4a(list(car pt4a)(car pt4)))
(setq pt4a(list(cadr pt4a)(-(cadr pt4)cover)))
(setq pt5a(list(car pt5a)(car pt5)))
(setq pt5a(list(cadr pt5a)(+(cadr pt5)cover)))
(setq vert 1)
)
)

;rebar line bottom to top

(if(<(cadr pt4)(cadr pt5))
(progn
(setq pt4a (list(car pt4a)(car pt4)))
(setq pt4a (list(cadr pt4a)(+(cadr pt4)cover)))
(setq pt5a (list (car pt5a)(car pt5)))
(setq pt5a (list (cadr pt5a)(-(cadr pt5)cover)))
(setq vert 1)
)
)

;rebar line left to right

(if(<(car pt4)(car pt5))
(progn

(setq pt4a(list(car pt4a)(+(car pt4)cover)))
(setq pt4a(list(cadr pt4a)(cadr pt4)))
(setq pt5a(list(car pt5a)(-(car pt5)cover)))
(setq pt5a(list(cadr pt5a)(cadr pt5)))
(setq vert 2)
)
)

;rebar line right to left

(if(>(car pt4)(car pt5))
(progn
(setq pt4a(list(car pt4a)(-(car pt4)cover)))
(setq pt4a(list(cadr pt4a)(cadr pt4)))
(setq pt5a(list(car pt5a)(+(car pt5)cover)))
(setq pt5a(list(cadr pt5a)(cadr pt5)))

(setq vert 2)
)
)
(command"layer" "S" "Rebar" "")
(command"line" pt4a pt5a "")
(setq ent7 (entlast))
(command"layer" "s" "Redim" "")



;offsets according to left or right
;if leader right to left and textd l
(if(and(>(car pt1)(car pt2))(=(cadr pt1)(cadr pt2))(= textdirection 0))
(progn
(setq pt6(list(car pt6)(-(car pt2)textoffset)))
(setq pt6(list(cadr pt6)(cadr pt1)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
(command"_pline" pt2a pt6 pt7 "")
)
)
;if leader right to left and textd r
(if(and(>(car pt1)(car pt2))(=(cadr pt1)(cadr pt2))(= textdirection 1))
(progn
(setq pt6(list(car pt6)(+(car pt1)textoffset)))
(setq pt6(list(cadr pt6)(cadr pt1)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "")
(command"_pline" pt1a pt6 pt7 "")
)
)
;if leader left to right and textd l
(if(and(<(car pt1)(car pt2))(=(cadr pt1)(cadr pt2))(= textdirection 0))
(progn
(setq pt6(list(car pt6)(-(car pt1)textoffset)))
(setq pt6(list(cadr pt6)(cadr pt1)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
(command"_pline" pt1a pt6 pt7 "")
)
)
;if leader left to right and textd r
(if(and(<(car pt1)(car pt2))(=(cadr pt1)(cadr pt2))(= textdirection 1))
(progn
(setq pt6(list(car pt6)(+(car pt2)textoffset)))
(setq pt6(list(cadr pt6)(cadr pt1)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "")
(command"_pline" pt2a pt6 pt7 "")
)
)
;if leader bottom to top and textd l and textvert 1
(if(and(<(cadr pt1)(cadr pt2))(= textdirection 0)(= textvert 1))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(+(cadr pt2)textoffset)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader bottom to top and textd l and textvert 0
(if(and(<(cadr pt1)(cadr pt2))(= textdirection 0)(= textvert 0))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(-(cadr pt1)textoffset)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader bottom to top and textd r and textvert 1
(if(and(<(cadr pt1)(cadr pt2))(= textdirection 1)(= textvert 1))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(+(cadr pt2)textoffset)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader bottom to top and textd r and textvert 0
(if(and(<(cadr pt1)(cadr pt2))(= textdirection 1)(= textvert 0))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(-(cadr pt1)textoffset)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader top to bottom and textd l and textvert 1
(if(and(>(cadr pt1)(cadr pt2))(= textdirection 0)(= textvert 1))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(+(cadr pt1)textoffset)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
)
)

;if leader top to bottom and textd l and textvert 0
(if(and(>(cadr pt1)(cadr pt2))(= textdirection 0)(= textvert 0))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(-(cadr pt2)textoffset)))
(setq pt7(list(car pt7)(-(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "mr" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader top to bottom and textd r and textvert 1
(if(and(>(cadr pt1)(cadr pt2))(= textdirection 1)(= textvert 1))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(+(cadr pt1)textoffset)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "")
)
)
;if leader top to bottom and textd r and textvert 0
(if(and(>(cadr pt1)(cadr pt2))(= textdirection 1)(= textvert 0))
(progn

(setq pt6(list(car pt6)(car pt1)))
(setq pt6(list(cadr pt6)(-(cadr pt2)textoffset)))
(setq pt7(list(car pt7)(+(car pt6)900)))
(setq pt7(list(cadr pt7)(cadr pt6)))
(command"_pline" pt2a pt6 pt7 "")
(command"_text" "j" "ml" pt7 "" "" "xx-xx-xx-xx" "" )
)
)



(setvar "osmode" osmod)
(princ)
;Group objects
;(command"group" "" "Rebar" "" ent ent1 ent2 ent3 ent4 ent5 ent6 ent7 "")
; (setvar"pickstyle" 3)


)[/img]