Jump to content

Rebar Numbering


A Tabasi

Recommended Posts

Try this, given time involved it borders on a commercial answer. So if you find it meets your needs a Beer donation would be welcome.

; https://www.cadtutor.net/forum/topic/78788-rebar-numbering/
; By AlanH DEC 2023
; Count bars base on size

; By Gile
(defun compare-elements (a b sortspec)
  (
   (lambda (x y test)
   (if (and (equal x y ) (cdr sortspec))
    (compare-elements a b (cdr sortspec))
    (apply test (list x y))
   )
   )
    (nth (cdar sortspec) a)
    (nth (cdar sortspec) b)
    (caar sortspec)
  )
)
(defun complex-sort (alst sortspec)
  (vl-sort alst
  '(lambda (a b)
  (compare-elements a b sortspec)
  )
  )
)
(defun comparelems (  / )
(if (and
(= (nth 0 ans)(nth 0 ans2))
(= (nth 1 ans)(nth 1 ans2))
(= (nth 2 ans)(nth 2 ans2))
)
(setq tot (+ tot 1))
)
)

(defun comparelems2 (  / )
(if (and
(= (nth 0 ans)(nth 0 ans2))
(= (nth 1 ans)(nth 1 ans2))
(= (nth 2 ans)(nth 2 ans2))
(= (nth 3 ans)(nth 3 ans2))
)
(setq tot (+ tot 1))
(AH:gotable )
)
)

(defun  AH:gotable (  / txt)
(setq rownum (vla-get-rows obj2))
(vla-InsertRows obj2  rownum  (vla-GetRowHeight obj2 (- rownum 1)) 1)
(repeat (setq k (length ans))
(setq txt  (nth (setq k (- k 1)) ans))
(vla-settext obj2 rownum  k  txt)
)
(vla-settext obj2 rownum 4 (rtos tot 2 0))
(setq tot 1)
)

(defun AH:table_make ( / numrows curspc colwidth numcolumns  objtable rowheight sp doc)
(vl-load-com)
(setq sp (vlax-3d-point (getpoint "Pick top left point for table ")))
(setq doc  (vla-get-activedocument (vlax-get-acad-object) ))
(if (= (vla-get-activespace doc) 0)
(setq  curspc (vla-get-paperspace doc))
(setq curspc (vla-get-modelspace doc))
)

(setq dic (dictsearch (namedobjdict) "acad_tablestyle"))
(setq dictabs (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 3)) dic)))
(if (member "myTableStyle" dictabs)
(princ "tablestyle exists")
(progn
(setq tblStlObj (vla-addobject (vla-add (vla-get-dictionaries doc) "ACAD_TABLESTYLE")
   "myTableStyle"
   "AcDbTableStyle"
    )
)
(vla-put-horzcellmargin tblStlObj 25)
(vla-put-vertcellmargin tblStlObj 25)
(vla-settextheight tblStlObj actitlerow 200)
(vla-settextheight tblStlObj acheaderrow 200)
(vla-settextheight tblStlObj acdatarow 200)
(vla-SetAlignment tblStlObj (+ acDataRow acHeaderRow acTitleRow) acMiddleCenter)
(vla-SetTextStyle tblStlObj (+ acDataRow acHeaderRow acTitleRow) "Standard")
)
)
(setvar 'ctablestyle "myTableStyle")
(setq numrows 2)
(setq numcolumns 5)
(setq rowheight 250)
(setq colwidth 2500)
(setq objtable (vla-addtable curspc sp numrows numcolumns rowheight colwidth))
(vla-settext objtable 0 0 "TABLE title")
(vla-settext objtable 1 0 "A")
(vla-settext objtable 1 1 "B")
(vla-settext objtable 1 2 "C")
(vla-settext objtable 1 3 "D")
(vla-settext objtable 1 4 "Count")
(vla-SetColumnWidth objtable 1 1500)
(vla-SetColumnWidth objtable 2 1200)
(vla-SetColumnWidth objtable 3 1000)
(vla-SetColumnWidth objtable 4 1000)
(setq objtable (entlast))
(princ)
)

(defun c:barcnt ( / ss lst tot ent atts att ent1 x mld obj)
(setq ss (ssget "X" (list (cons 0 "MULTILEADER")(cons 8 "rebar Tag")(cons 410 "Model"))))
(setq lst '())
(repeat (setq x (sslength ss))
  (setq ent (entget (ssname ss (setq x (1- x)))))
  (setq atts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 302)) ent)))
  (setq atts (list (nth 1 atts)(nth 2 atts)(nth 3 atts) (cdr (assoc -1 ent))))
  (setq lst (cons atts lst))
)
(setq lst (complex-sort lst '((< . 0) (< . 1) (< . 2))))

(setq x 0)
(setq tot 1)
(setq ans (nth x lst))
(repeat (- (length lst) 1)
(setq ans2 (nth (setq x (+ x 1)) lst))
(if (and
(= (nth 0 ans)(nth 0 ans2))
(= (nth 1 ans)(nth 1 ans2))
(= (nth 2 ans)(nth 2 ans2))
)
(progn
  (setq mld (vlax-ename->vla-object (nth 3 ans)))
  (vlax-for obj
    (vla-item (vla-get-blocks (vla-get-document mld)) (vla-get-contentblockname mld))
    (if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj))
        (= :vlax-false (vla-get-constant obj))
        )
        (progn
          (setq oid (vla-get-objectid obj))
		  (if (= (vla-get-tagstring obj) "POS")
             (vla-setblockattributevalue mld oid (rtos tot 2 0) )
		  )
        )
	)
  )
)
(progn
(setq mld (vlax-ename->vla-object (nth 3 ans)))
  (vlax-for obj
    (vla-item (vla-get-blocks (vla-get-document mld)) (vla-get-contentblockname mld))
    (if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj))
        (= :vlax-false (vla-get-constant obj))
        )
        (progn
          (setq oid (vla-get-objectid obj))
		  (if (= (vla-get-tagstring obj) "POS")
             (vla-setblockattributevalue mld oid (rtos tot 2 0) )
		  )
        )
	)
  )
  (setq tot (1+ tot) )
)
)
(setq ans ans2)
)

(setq lst5 '())
(repeat (setq x (sslength ss))
  (setq ent (entget (ssname ss (setq x (1- x)))))
  (setq atts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 302)) ent)))
  (setq atts (list (nth 1 atts)(nth 2 atts)(nth 3 atts) (nth 4 atts)))
  (setq lst5 (cons atts lst5))
)
(setq lst5 (complex-sort lst5 '((< . 0) (< . 1) (< . 2)(< . 3))))

(AH:table_make)
(setq obj2 (vlax-ename->vla-object (entlast)))

(vla-put-regeneratetablesuppressed obj2 :vlax-true)
(setq x 0)
(setq tot 1)
(setq ans (nth x lst5))
(repeat (- (length lst5) 1)
(setq ans2 (nth (setq x (+ x 1)) lst5))
(comparelems2)
(setq ans ans2)
)
(AH:gotable)
(vla-put-regeneratetablesuppressed obj2 :vlax-false)

(princ)
)
(c:barcnt)

 

 

Please check the table answer carefully, I have not cross checked as to many values. Remove the "X" in this line will let you select and make smaller tables for checking. (setq ss (ssget "X" (list (cons 0 "MULTILEADER")(cons 8 "rebar Tag")(cons 410 "Model"))))

image.png.3e1d65055e939a29e539e9ea6002b7a6.png

 

Edited by BIGAL
Link to comment
Share on other sites

Thanks very much, BIGAL, 
I will use this code and say the result. Anyway,  You a big help to me and I should buy a Beer for you However, you need to tell me how to pay for it.

Link to comment
Share on other sites

again I had an error when loading the LISP code. I think I need to download the Lisp Code with a file lisp. Please send this code in LSP format. "Cannot invoke (command) from *error* without prior call to (*push-error-using-command*).
Converting (command) calls to (command-s) is recommended."

You don't know about the hardships of living in a country like Iran. It is very difficult and impossible for ordinary people to transfer money abroad. That's why I want you to tell me how I should serve you Beer.

Link to comment
Share on other sites

Thank you

I do not have PayPal or any debit card for transferring money, here is IRAN. It is not supported in my country. so I want to pay for your Beer, but I don't know how to do it.

Link to comment
Share on other sites

Posted (edited)

Happy New Year
I Wish best happens in the new year for you
I checked this lisp, that's great. Although it's improved over the first version, there are still a few issues. For example;
1- Different numbers are assigned for similar rebars. a part of this problem is related to visibility states rebar block. actually "L1 shape" and "L shape" both of them have similar shapes. As a result, we should find a solution for this.
2- Also I saw that "Smooth Shape" Rebars have different marks for similar rebars. I don't understand why this problem has been created.
3-sometimes maybe should we need to mark the Rebars of the beam to the beam. so It will be better When LISP is loaded, before creating the final table, the user selects specific rebars and tags for the assignment mark, and then the final table is created by LISP.

Finally, I would like to express my gratitude for your cooperation and help in this process.

Edited by A Tabasi
Link to comment
Share on other sites

"1- Different numbers are assigned for similar rebars" ? Each bar is sorted based on bar type, length and bundle number of bars, this is reflected in the count column. You need to supply an example table say for the top beam in your sample dwg.

 

2- Also I saw that "Smooth Shape" Rebars have different marks for similar rebars, The bars have different groups like a L=5.00M can have 3T10 or 3T20.

 

3 Can look into adding beam ID.

Link to comment
Share on other sites

1- I mean some Rebars by the Same Identity have different marks. 
Please look at the file attached in the table that has Revcloud. 

2-although the bars have different groups, in same groups have different marks. for example; L=5.00m 5T20 , mark is 34 while L=5.00m 6T20, mark is 35 ! Both of them are Smooth Shapes. it's not correct.
3- I don't understand what you mean. I want in the file that has many beams, I do numbering bars beam to beam 

Test Lisp -new version.dwg

Link to comment
Share on other sites

You did not confirm see post above only want to do once. Match common name and length and get total count. Ignore 2xT20 2xT16 etc

Edited by BIGAL
Link to comment
Share on other sites

  • 2 weeks later...

Found some time and found a few more things to fix. Need sort on length, need to check for 7.5 & 7.50, fix ID number. So will be back. Please let me know if that is what your looking for that is important.

 

image.png.0bc893efea8e93c20aed2bad7f17fda5.png

 

Also fixed number of decimals to 2 for all lengths 8m becomes 8.00m 8.5 now 8.50. In both beams and table.

Edited by BIGAL
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Hi Mr Bigal
thanks a lot for your assistance. I wonder if you found the time for solving my problem. I would appreciate your help.

Edited by A Tabasi
Link to comment
Share on other sites

Please try this and check carefully that it is correct. Run on a small number of reo bars, increase during checking.

 

Note in sample dwg there are problems like L8.05m which should be L=8.05, I think I fixed like 5. 

ReoBarcount2.lsp

Link to comment
Share on other sites

it's wonderful, thanks a  lot man. you do big help me.
Now I'm so happy and I appreciate your kindness.🙏
so, for the last question, how do select a specific beam in the drawing for the numbering bar? For example; I want to select a couple of beams from all the beams in my drawing so that naming is done only for them.

Edited by A Tabasi
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...