Đến nội dung


Hình ảnh
- - - - -

Nhờ Chỉnh Lisp Cắt Thép Dầm Momen


  • Please log in to reply
78 replies to this topic

#21 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 11 May 2016 - 11:16 PM

3 câu dưới đây của bạn thì bạn cứ âm thầm hành động, khỏi reply tốn công người đọc. Chừng nào test xong hẵng trả lời:

1). để em thử ng/c.

2). em chưa test.

3). Mai em test lisp bác.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#22 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 11 May 2016 - 11:22 PM

3 câu dưới đây của bạn thì bạn cứ âm thầm hành động, khỏi reply tốn công người đọc. Chừng nào test xong hẵng trả lời:
1). để em thử ng/c.
2). em chưa test.
3). Mai em test lisp bác.

em rút kinh nghiệm. Tại hay vào bằng đt, hóng topic của mình mà. :)
  • 0

#23 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 10:43 AM

Nâng cấp:

1. Chạy với dầm xiên

2. Vẽ luôn thép đai

3. Tính toán số lượng đai và ghi vào dưới dim

4. Có tùy chọn nhập khoảng cách đai, đường kính

P/s: Nếu text của dim dùng Font họ vnsimli.shx, vnsimple.shx ... thì để nguyên ký hiệu Fi (~), loại font khác thì có thể thay đổi thành %%c để có ký hiệu Fi.

(defun c:tt  (/ msp lay bv cd pt1 temp create-layer tiep_theo_qm kcach_dau Make_pline mid lthep pt-01 pt-02 goi nhi fi)
 (defun kcach_dau  (mm-am len fac / del l-0)
  (if (eq mm-am t)
   (progn (setq l-0 (/ len 4)
                del (rem l-0 50))
          (if (> del 0)
           (setq l-0 (- l-0 del (/ -50 fac)))))
   (progn (setq l-0 (/ len 6)
                del (rem l-0 (/ 50 fac)))
          (if (> del 0)
           (setq l-0 (- l-0 del)))))
  l-0)
 (defun create-layer  (name color lineWeight)
  (entmakex (list '(0 . "LAYER")
                  (cons 100 "AcDbSymbolTableRecord")
                  (cons 100 "AcDbLayerTableRecord")
                  (cons 2 name)
                  (cons 70 0)
                  (cons 62 color)
                  (cons 6 "Continuous")
                  (cons 370 (fix (* 100 lineWeight))))))
 (defun Make_pline  (listpoint Layer / Lst)
  (setq lst (list '(0 . "LWPOLYLINE")
                  '(100 . "AcDbEntity")
                  '(100 . "AcDbPolyline")
                  (cons 8 layer)
                  (cons 90 (length listpoint))
                  (cons 70 0)))
  (foreach p listpoint (setq lst (append lst (list (cons 10 p)))))
  (entmakex lst))
 (defun mid (p1 p2) (list (/ (+ (car p1) (car p2)) 2.0) (/ (+ (cadr p1) (cadr p2)) 2.0)))
 ;;; Main defun
 (defun tiep_theo_qm  (/ cdim pt2 kc pd1 pd2 pd3 pa1 pa2 pa3 ang lent p1 p2 p3 p4 p0 i sdg sdn ptn ppn add kcd dng kc1 kc2 kc3 kc4 ncd kcl)
  (if (setq pt-02 (getpoint "\nNhap toa do diem cuoi duoi dam:" pt-01))
   (progn (setq cdim (* (getvar "DIMTXT") (getvar "DIMSCALE"))
                kc   (distance pt-01 pt-02)
                lent (* bv 1.5))
          (if (< (car pt-01) (car pt-02))
           (setq pt1 pt-01
                 pt2 pt-02
                 ang (angle pt-01 pt-02))
           (setq pt1 pt-02
                 pt2 pt-01
                 ang (angle pt-02 pt-01)))
          ;; Momen duong
          (setq pd1 (polar pt1 ang (kcach_dau nil kc 1))
                pd2 (polar pt2 (+ ang (* pi 1.0)) (kcach_dau nil kc 1))
                pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdim 4)))
          (setvar "CLAYER" "DIM")
          (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                  (mapcar 'vlax-3d-point (list pt1 pd1 pd2))
                  (mapcar 'vlax-3d-point (list pd1 pd2 pt2))
                  (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))
          (setq p2 (polar pd1 (+ ang (* pi 0.5)) bv)
                p1 (polar p2 (+ ang (* pi 0.25)) lent)
                p3 (polar pd2 (+ ang (* pi 0.5)) bv)
                p4 (polar p3 (+ ang (* pi 0.75)) lent))
          (Make_pline (list p1 p2 p3 p4) lthep)
          ;; Momen am
          (setq kcd (kcach_dau t kc 1)
                pt1 (polar pt1 (+ ang (* pi 0.5)) cd)
                pt2 (polar pt2 (+ ang (* pi 0.5)) cd)
                pa1 (polar pt1 (+ ang (* pi 0)) kcd)
                pa2 (polar pt2 (+ ang (* pi 1)) kcd)
                pa3 (polar pt1 (+ ang (* pi 0.5)) (* cdim 4)))
          (setq kc1 (* (1+ (fix (/ kcd goi))) goi)
                kc2 (- kc (* 2 kc1))
                kc3 (* (1- (fix (/ (* kc2 0.5) nhi))) nhi)
                kc4 (- kc2 (* 2 kc3)))
          (setq dng (* (fix (/ (* 0.5 kc2) nhi)) 2))
          (cond ((>= kc4 (* 3.5 nhi)) (setq dng (+ dng 3)))
                ((>= kc4 (* 3.0 nhi)) (setq dng (+ dng 2)))
                ((>= kc4 (* 1.5 nhi)) (setq dng (+ dng 1)))
                (t (setq dng (+ dng 0))))
          (setq sdg (strcat "<>\\X" (itoa (+ (fix (/ kcd goi)) 1)) "~" (itoa fi) "a" (rtos goi 2 0))
                sdn (strcat "<>\\X" (rtos dng 2 0) "~" (itoa fi) "a" (rtos nhi 2 0)))
          (mapcar (function (lambda (x y z s) (vla-put-TextOverride (vla-adddimaligned msp x y z) s)))
                  (mapcar 'vlax-3d-point (list pt1 pa1 pa2))
                  (mapcar 'vlax-3d-point (list pa1 pa2 pt2))
                  (mapcar 'vlax-3d-point (list pa3 pa3 pa3))
                  (list sdg sdn sdg))
          (setq p1 (polar pa1 (+ ang (* pi 1.5)) bv)
                p2 (polar p1 (+ ang (* pi 1.25)) lent))
          (Make_pline (list p1 p2) lthep)
          ;; Ve thep dai ben trai
          ;; Goi
          (setq i  0
                p0 (polar pt1 (* pi 1.5) bv))
          (repeat (+ (fix (/ kcd goi)) 1)
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar (polar pt1 (* pi 1.5) bv) (+ ang 0) (* goi (setq i (1+ i))))))
          ;; Nhip
          (setq i   0
                p1  p0
                ncd (* goi (fix (/ kcd goi))))
          (repeat (1- (fix (/ (- kc (* 2 ncd)) (* 2 nhi))))
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar p1 (+ ang 0) (* nhi (setq i (1+ i))))))
          (setq ptn p0)
          ;;-----------
          (setq p1 (polar pa2 (+ ang (* pi 1.5)) bv)
                p2 (polar p1 (+ ang (* pi 1.75)) lent))
          (Make_pline (list p1 p2) lthep)
          ;; Ve thep dai ben phai
          ;; Goi
          (setq i  0
                p0 (polar pt2 (* pi 1.5) bv))
          (repeat (+ (fix (/ kcd goi)) 1)
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar (polar pt2 (* pi 1.5) bv) (+ ang pi) (* goi (setq i (1+ i))))))
          ;; Nhip
          (setq i  0
                p1 p0)
          (repeat (1- (fix (/ (- kc (* 2 ncd)) (* 2 nhi))))
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar p1 (+ ang pi) (* nhi (setq i (1+ i))))))
          (setq ppn p0)
          ;; Bo sung khoang giua
          (setq kcl (distance (polar ptn (+ ang pi) nhi) (polar ppn (+ ang 0) nhi)))
          (cond ((>= kcl (* 3.5 nhi))
                 (Make_pline (list ptn (polar ptn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list (mid ptn ppn) (polar (mid ptn ppn) (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list ppn (polar ppn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep))
                ((>= kcl (* 3.0 nhi))
                 (Make_pline (list ptn (polar ptn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list ppn (polar ppn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep))
                ((>= kcl (* 1.5 nhi))
                 (Make_pline (list (mid ptn ppn) (polar (mid ptn ppn) (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)))
          (setvar "CLAYER" lay))))
 ;;; MAIN
 (vl-load-com)
 (setq msp   (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       lay   (getvar "clayer")
       lthep "THEPDOC")
 (create-layer lthep 1 0.4)
 (create-layer "DIM" 8 -3)
 (or (> (getvar 'USERR1) 0) (setvar 'USERR1 400))
 (or (> (getvar 'USERR2) 0) (setvar 'USERR2 25))
 (or (> (getvar 'USERR3) 0) (setvar 'USERR3 150))
 (or (> (getvar 'USERR4) 0) (setvar 'USERR4 200))
 (or (> (getvar 'USERI5) 0) (setvar 'USERI5 6))
 (or (and cd (or (= (type cd) 'int) (= (type cd) 'real))) (setq cd (getvar 'USERR1)))
 (or (and bv (or (= (type bv) 'int) (= (type bv) 'real))) (setq bv (getvar 'USERR2)))
 (or (and goi (or (= (type goi) 'int) (= (type goi) 'real))) (setq goi (getvar 'USERR3)))
 (or (and nhi (or (= (type nhi) 'int) (= (type nhi) 'real))) (setq nhi (getvar 'USERR4)))
 (or (and fi (= (type fi) 'int)) (setq fi (getvar 'USERI5)))
 (setq temp "T")
 (while (= temp "T")
  (initget 0 "Cao Bao Goi Nhip Kinh")
  (setq pt-01 (getpoint (strcat "\nCaodam <"
                                (rtos cd 2 0)
                                ">/Baove <"
                                (rtos bv 2 0)
                                ">/daiGoi <"
                                (rtos goi 2 0)
                                ">/daiNhip <"
                                (rtos nhi 2 0)
                                ">/duongKinh <"
                                (itoa fi)
                                "> . Nhap toa do diem dau duoi dam: ")))
  (cond ((= pt-01 "Cao")
         (setq cd (cond ((getdist (strcat "\nChieu cao dam <" (rtos cd 2 0) ">:")))
                        (cd)))
         (setvar 'USERR1 cd))
        ((= pt-01 "Bao")
         (setq bv (cond ((getdist (strcat "\nChieu day lop betong bao ve <" (rtos bv 2 0) ">:")))
                        (bv)))
         (setvar 'USERR2 bv))
        ((= pt-01 "Goi")
         (setq goi (cond ((getdist (strcat "\nKhoang cach dai vung goi <" (rtos goi 2 0) ">:")))
                         (goi)))
         (setvar 'USERR3 goi))
        ((= pt-01 "Nhip")
         (setq nhi (cond ((getdist (strcat "\nKhoang cach dai vung nhip <" (rtos nhi 2 0) ">:")))
                         (nhi)))
         (setvar 'USERR4 nhi))
        ((= pt-01 "Kinh")
         (setq fi (cond ((getint (strcat "\nDuong kinh thep dai <" (itoa fi) ">:")))
                        (fi)))
         (setvar 'USERI5 fi))
        ((= pt-01 nil) (setq temp nil))
        (t (tiep_theo_qm))))
 (princ))

  • 1

#24 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 12 May 2016 - 10:52 AM

ko hiếu sao lisp bác viết (lisp trc) em k dùng dc. báo lỗi ; error: syntax error khi load.
khi gõ lệnh thì lỗi : TABLETYour pointing device cannot be used as a tablet.
lisp xiên em thử cũng k dc. Viết bài ko cho vào quote thì k nhìn thấy bài :D

  • 0

#25 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 11:19 AM

Không hiểu vì sao mà mình thường phải trả lời câu này:

=> Download bị lỗi thì dùng copy, paste... Chán...Phen này chắc phải làm chữ ký: Bạn hãy copy đừng download... :D


  • 1

#26 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 12 May 2016 - 11:39 AM

Không hiểu vì sao mà mình thường phải trả lời câu này:

=> Download bị lỗi thì dùng copy, paste... Chán...ạok.

 khá tổng quát, bác vẽ cả phần phi thép rồi khoảng cách, rải cả thép đai. quá cả mong đợi. 

Bác chỉnh em chút xíu nữa:

-Bác gán thêm dim giữa 2 cột, phần phía trên và phần dưới (điểm cuối của pick lần n với điểm đầu lần n+1)

-Đai dầm bác chỉnh cách mép cột 50 dc k. vẽ nó bị trùng với nét mép cột.

Phần dim của anh có cả thép đai trong đấy rất hay, nhưng như thế k dùng lisp công text để ra số thép đai dc (thống kê)

ĐƯợc voi đòi tiên nhờ Bác viết 1 lisp +tổng số đai kiểu này dc k. :P

Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. voi lai font họ vnsimli.shx, vnsimple.shx đều gõ %%C để ra phi dc. :D

Một cái máy gặt thực sự thay cho cái liềm. hihi


  • 0

#27 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 12 May 2016 - 12:12 PM

Theo bài 1:

(defun c:tt  (/ modelSpace lay bv cd pt1 temp create-layer tiep_theo_qm kcach_dau Make-Line laythep)
 (defun kcach_dau  (mm-am len fac / del l-0)
  (if (eq mm-am t)
   (progn (setq l-0 (/ len 4)
                del (rem l-0 50))
          (if (> del 0)
           (setq l-0 (- l-0 del (/ -50 fac)))))
   (progn (setq l-0 (/ len 6)
                del (rem l-0 (/ 50 fac)))
          (if (> del 0)
           (setq l-0 (- l-0 del)))))
  l-0)
 (defun create-layer  (name color lineWeight)
  (entmakex (list '(0 . "LAYER")
                  (cons 100 "AcDbSymbolTableRecord")
                  (cons 100 "AcDbLayerTableRecord")
                  (cons 2 name)
                  (cons 70 0)
                  (cons 62 color)
                  (cons 6 "Continuous")
                  (cons 370 (fix (* 100 lineWeight))))))
 (defun Make-Line  (p1 p2 lay)
  (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
 ;;-------------------
 (defun tiep_theo_qm  (/ cdim pt2 kc pd1 pd2 pd3 pa1 pa2 pa3 ptt)
  (setq cdim (* (getvar "DIMTXT") (getvar "DIMSCALE")))
  (setq pt2 (getpoint "\nNhap toa do diem cuoi duoi dam:" pt1))
  (setq kc (distance pt1 pt2))
  ;; Momen duong
  (setq pd1 (polar pt1 (* pi 0) (kcach_dau nil kc 1))
        pd2 (polar pt2 (* pi 1) (kcach_dau nil kc 1))
        pd3 (polar pt1 (* pi 1.5) (* cdim 4)))
  (setvar "CLAYER" "DIM")
  (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
          (mapcar 'vlax-3d-point (list pt1 pd1 pd2))
          (mapcar 'vlax-3d-point (list pd1 pd2 pt2))
          (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))
  (Make-Line (setq ptt (polar pd1 (* pi 0.5) bv)) (polar ptt (* pi 0.25) bv) laythep)
  (Make-Line (setq ptt (polar pd2 (* pi 0.5) bv)) (polar ptt (* pi 0.75) bv) laythep)
  ;; Momen am
  (setq pt1 (polar pt1 (* pi 0.5) cd)
        pt2 (polar pt2 (* pi 0.5) cd)
        pa1 (polar pt1 (* pi 0) (kcach_dau t kc 1))
        pa2 (polar pt2 (* pi 1) (kcach_dau t kc 1))
        pa3 (polar pt1 (* pi 0.5) (* cdim 4)))
  (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
          (mapcar 'vlax-3d-point (list pt1 pa1 pa2))
          (mapcar 'vlax-3d-point (list pa1 pa2 pt2))
          (mapcar 'vlax-3d-point (list pa3 pa3 pa3)))
  (Make-Line (setq ptt (polar pa1 (* pi 1.5) bv)) (polar ptt (* pi 1.25) bv) laythep)
  (Make-Line (setq ptt (polar pa2 (* pi 1.5) bv)) (polar ptt (* pi 1.75) bv) laythep)
  (setvar "CLAYER" lay))
 ;; MAIN
 (vl-load-com)
 (setq msp     (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       lay     (getvar "clayer")
       laythep "THEPDOC")
 (create-layer laythep 1 0.4)
 (create-layer "DIM" 8 -3)
 (or (and cd (or (= (type cd) 'int) (= (type cd) 'real))) (setq cd 400))
 (or (and bv (or (= (type bv) 'int) (= (type bv) 'real))) (setq bv 20))
 (setq temp "T")
 (while (= temp "T")
  (initget 0 "Cao Bao")
  (setq pt1 (getpoint
             (strcat "\nCaodam <" (rtos cd 2 0) ">/Baove <" (rtos bv 2 0) ">. Nhap toa do diem dau duoi dam: ")))
  (cond ((= pt1 "Cao")
         (setq cd (cond ((getdist (strcat "\nChieu cao dam <" (rtos cd 2 0) ">:")))
                        (cd))))
        ((= pt1 "Bao")
         (setq bv (cond ((getdist (strcat "\nChieu day lop betong bao ve <" (rtos bv 2 0) ">:")))
                        (bv))))
        ((= pt1 nil) (setq temp nil))
        (t (tiep_theo_qm))))
 (princ))

Cái đó là có dim trước, rồi chia dim khác với topic này.

b2HgAau.png

Bác viết giùm mình cái code nó đơn giản hơn của thớt:

1. Đánh lệnh

2. Pick điểm 1, điểm 2, điểm 3, điểm 4.

3. Nhập chiều cao dầm

4. Nhập lớp bảo vệ

Sẽ được kết quả như trong hình. Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra.

Chân thành cảm ơn.


  • -1

#28 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 12:41 PM

Bác viết giùm mình cái code nó đơn giản hơn của thớt:

1. Đánh lệnh

2. Pick điểm 1, điểm 2, điểm 3, điểm 4.

3. Nhập chiều cao dầm

4. Nhập lớp bảo vệ

Sẽ được kết quả như trong hình. Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra.

Chân thành cảm ơn.

- Từ bên trái sang, vừa cách mép cột 700 vừa cách điểm d3 hdam liệu có ổn không???

- Vị trí cắt thép này phụ thuộc nhiều vào nhịp của dầm mà???

- Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra. Là sao???


  • 0

#29 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 12 May 2016 - 01:01 PM

- Từ bên trái sang, vừa cách mép cột 700 vừa cách điểm d3 hdam liệu có ổn không???

- Vị trí cắt thép này phụ thuộc nhiều vào nhịp của dầm mà???

- Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra. Là sao???

Trả lời câu hỏi của bác:

- Gạch đầu dòng thứ 1 và thứ 2:

Sau khi làm xong bước 4, nó sẽ vẽ móc cách điểm đ3 và đ4 khoảng cách bằng chiều cao dầm đã nhập.

- Gạch đầu dòng thứ 3

Kích thước của cái móc ấy bác. dài 70 góc nghiêng 30

Chân thành cảm ơn bác đã quan tâm giúp đỡ.


  • 0

#30 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 01:23 PM

Như vậy cái dim 700 cách mép cột là của ai? Cái dim không bị khống chế bởi 700? Lisp sẽ dim cái này hay bạn tự dim?


  • 0

#31 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 02:08 PM

 khá tổng quát, bác vẽ cả phần phi thép rồi khoảng cách, rải cả thép đai. quá cả mong đợi. 

Bác chỉnh em chút xíu nữa:

-Bác gán thêm dim giữa 2 cột, phần phía trên và phần dưới (điểm cuối của pick lần n với điểm đầu lần n+1)

-Đai dầm bác chỉnh cách mép cột 50 dc k. vẽ nó bị trùng với nét mép cột.

Phần dim của anh có cả thép đai trong đấy rất hay, nhưng như thế k dùng lisp công text để ra số thép đai dc (thống kê)

ĐƯợc voi đòi tiên nhờ Bác viết 1 lisp +tổng số đai kiểu này dc k. :P

Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. voi lai font họ vnsimli.shx, vnsimple.shx đều gõ %%C để ra phi dc. :D

Một cái máy gặt thực sự thay cho cái liềm. hihi

- %%C ra Phi trong dimtext (font .shx) ký hiêụ rất xấu không cùng dạng.

- Lisp chỉnh sửa đáp ứng các nhu cầu trên (trước khi kết thúc lệnh sẽ có bảng thống kê đai theo từng nhịp).

(defun c:tt  (/ msp lay bv cd pt1 temp create-layer tiep_theo_qm kcach_dau Make_pline mid lthep pt-01 pt-02 goi nhi fi pcd dim_cot pca ang lst-dai k thong_ke_dai)
 (defun kcach_dau  (mm-am len fac / del l-0)
  (if (eq mm-am t)
   (progn (setq l-0 (/ len 4)
                del (rem l-0 50))
          (if (> del 0)
           (setq l-0 (- l-0 del (/ -50 fac)))))
   (progn (setq l-0 (/ len 6)
                del (rem l-0 (/ 50 fac)))
          (if (> del 0)
           (setq l-0 (- l-0 del)))))
  l-0)
 (defun create-layer  (name color lineWeight)
  (entmakex (list '(0 . "LAYER")
                  (cons 100 "AcDbSymbolTableRecord")
                  (cons 100 "AcDbLayerTableRecord")
                  (cons 2 name)
                  (cons 70 0)
                  (cons 62 color)
                  (cons 6 "Continuous")
                  (cons 370 (fix (* 100 lineWeight))))))
 (defun Make_pline  (listpoint Layer / Lst)
  (setq lst (list '(0 . "LWPOLYLINE")
                  '(100 . "AcDbEntity")
                  '(100 . "AcDbPolyline")
                  (cons 8 layer)
                  (cons 90 (length listpoint))
                  (cons 70 0)))
  (foreach p listpoint (setq lst (append lst (list (cons 10 p)))))
  (entmakex lst))
 (defun mid (p1 p2) (list (/ (+ (car p1) (car p2)) 2.0) (/ (+ (cadr p1) (cadr p2)) 2.0)))
 (defun dim_cot  ()
  (if (and pt-02 pcd pca)
   (progn (vla-put-layer (vla-adddimaligned msp (vlax-3d-point pt-02) (vlax-3d-point pt-01) (vlax-3d-point pcd))
                         "DIM")
          (vla-put-layer (vla-adddimaligned msp
                                            (vlax-3d-point (polar pt-02 (+ ang (* 0.5 pi)) cd))
                                            (vlax-3d-point (polar pt-01 (+ ang (* 0.5 pi)) cd))
                                            (vlax-3d-point pca))
                         "DIM"))))
 (defun thong_ke_dai  (/ Text poi htx)
  (defun Text (pt hgt str) (entmakex (list (cons 0 "TEXT") (cons 10 pt) (cons 40 hgt) (cons 1 str))))
  (setq htx (* (getvar "DIMTXT") (getvar "DIMSCALE")))
  (if (and lst-dai (setq poi (getpoint "\nDiem chen thong ke dai: ")))
   (foreach x  lst-dai
    (Text poi htx (itoa (car x)))
    (Text (polar poi 0 (* 4 htx)) htx (itoa (cadr x)))
    (Text (polar poi 0 (* 8 htx)) htx (itoa (caddr x)))
    (setq poi (polar poi (* 1.5 pi) (* 2.5 htx))))))
;;; Main defun
 (defun tiep_theo_qm  (/ cdim pt2 kc pd1 pd2 pd3 pa1 pa2 pa3 lent p1 p2 p3 p4 p0 i sdg sdn ptn ppn add kcd dng kc1 kc2 kc3 kc4 ncd kcl sdai_n)
  (if (setq pt-02 (getpoint "\nNhap toa do diem cuoi duoi dam:" pt-01))
   (progn (setq cdim (* (getvar "DIMTXT") (getvar "DIMSCALE"))
                kc   (distance pt-01 pt-02)
                lent (* bv 1.5))
          (if (< (car pt-01) (car pt-02))
           (setq pt1 pt-01
                 pt2 pt-02
                 ang (angle pt-01 pt-02))
           (setq pt1 pt-02
                 pt2 pt-01
                 ang (angle pt-02 pt-01)))
          ;; Momen duong
          (setq pd1 (polar pt1 ang (kcach_dau nil kc 1))
                pd2 (polar pt2 (+ ang (* pi 1.0)) (kcach_dau nil kc 1))
                pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdim 4))
                pcd pd3)
          (setvar "CLAYER" "DIM")
          (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                  (mapcar 'vlax-3d-point (list pt1 pd1 pd2))
                  (mapcar 'vlax-3d-point (list pd1 pd2 pt2))
                  (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))
          (setq p2 (polar pd1 (+ ang (* pi 0.5)) bv)
                p1 (polar p2 (+ ang (* pi 0.25)) lent)
                p3 (polar pd2 (+ ang (* pi 0.5)) bv)
                p4 (polar p3 (+ ang (* pi 0.75)) lent))
          (Make_pline (list p1 p2 p3 p4) lthep)
          ;; Momen am
          (setq kcd (kcach_dau t kc 1)
                pt1 (polar pt1 (+ ang (* pi 0.5)) cd)
                pt2 (polar pt2 (+ ang (* pi 0.5)) cd)
                pa1 (polar pt1 (+ ang (* pi 0)) kcd)
                pa2 (polar pt2 (+ ang (* pi 1)) kcd)
                pa3 (polar pt1 (+ ang (* pi 0.5)) (* cdim 4))
                pca pa3)
          (setq kc1 (* (1+ (fix (/ kcd goi))) goi)
                kc2 (- kc (* 2 kc1))
                kc3 (* (1- (fix (/ (* kc2 0.5) nhi))) nhi)
                kc4 (- kc2 (* 2 kc3)))
          (setq dng (* (fix (/ (* 0.5 kc2) nhi)) 2))
          (cond ((>= kc4 (* 3.5 nhi)) (setq dng (+ dng 3)))
                ((>= kc4 (* 3.0 nhi)) (setq dng (+ dng 2)))
                ((>= kc4 (* 1.5 nhi)) (setq dng (+ dng 1)))
                (t (setq dng (+ dng 0))))
          (setq sdg (strcat "<>\\X" (itoa (+ (fix (/ kcd goi)) 1)) "~" (itoa fi) "a" (rtos goi 2 0))
                sdn (strcat "<>\\X" (rtos dng 2 0) "~" (itoa fi) "a" (rtos nhi 2 0)))
          (mapcar (function (lambda (x y z s) (vla-put-TextOverride (vla-adddimaligned msp x y z) s)))
                  (mapcar 'vlax-3d-point (list pt1 pa1 pa2))
                  (mapcar 'vlax-3d-point (list pa1 pa2 pt2))
                  (mapcar 'vlax-3d-point (list pa3 pa3 pa3))
                  (list sdg sdn sdg))
          (setq sdai_n (+ (* (+ (fix (/ kcd goi)) 1) 2) dng))
          (setq lst-dai (append lst-dai (list (list k sdai_n fi))))
          (setq p1 (polar pa1 (+ ang (* pi 1.5)) bv)
                p2 (polar p1 (+ ang (* pi 1.25)) lent))
          (Make_pline (list p1 p2) lthep)
          ;; Ve thep dai ben trai
          ;; Goi
          (setq i   0
                pt1 (polar pt1 ang 50)
                p0  (polar pt1 (* pi 1.5) bv))
          (repeat (+ (fix (/ kcd goi)) 1)
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar (polar pt1 (* pi 1.5) bv) (+ ang 0) (* goi (setq i (1+ i))))))
          ;; Nhip
          (setq i   0
                p1  p0
                ncd (* goi (fix (/ kcd goi))))
          (repeat (1- (fix (/ (- kc (* 2 ncd)) (* 2 nhi))))
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar p1 (+ ang 0) (* nhi (setq i (1+ i))))))
          (setq ptn p0)
          ;;-----------
          (setq p1 (polar pa2 (+ ang (* pi 1.5)) bv)
                p2 (polar p1 (+ ang (* pi 1.75)) lent))
          (Make_pline (list p1 p2) lthep)
          ;; Ve thep dai ben phai
          ;; Goi
          (setq i   0
                pt2 (polar pt2 (+ ang pi) 50)
                p0  (polar pt2 (* pi 1.5) bv))
          (repeat (+ (fix (/ kcd goi)) 1)
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar (polar pt2 (* pi 1.5) bv) (+ ang pi) (* goi (setq i (1+ i))))))
          ;; Nhip
          (setq i  0
                p1 p0)
          (repeat (1- (fix (/ (- kc (* 2 ncd)) (* 2 nhi))))
           (Make_pline (list p0 (polar p0 (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
           (setq p0 (polar p1 (+ ang pi) (* nhi (setq i (1+ i))))))
          (setq ppn p0)
          ;; Bo sung khoang giua
          (setq kcl (distance (polar ptn (+ ang pi) nhi) (polar ppn (+ ang 0) nhi)))
          (cond ((>= kcl (* 3.5 nhi))
                 (Make_pline (list ptn (polar ptn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list (mid ptn ppn) (polar (mid ptn ppn) (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list ppn (polar ppn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep))
                ((>= kcl (* 3.0 nhi))
                 (Make_pline (list ptn (polar ptn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)
                 (Make_pline (list ppn (polar ppn (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep))
                ((>= kcl (* 1.5 nhi))
                 (Make_pline (list (mid ptn ppn) (polar (mid ptn ppn) (+ ang (* pi 1.5)) (- cd (* bv 2)))) lthep)))
          (setvar "CLAYER" lay))))
;;; MAIN
 (vl-load-com)
 (setq msp   (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       lay   (getvar "clayer")
       lthep "THEPDOC")
 (create-layer lthep 1 0.4)
 (create-layer "DIM" 8 -3)
 (or (> (getvar 'USERR1) 0) (setvar 'USERR1 400))
 (or (> (getvar 'USERR2) 0) (setvar 'USERR2 25))
 (or (> (getvar 'USERR3) 0) (setvar 'USERR3 150))
 (or (> (getvar 'USERR4) 0) (setvar 'USERR4 200))
 (or (> (getvar 'USERI5) 0) (setvar 'USERI5 6))
 (or (and cd (or (= (type cd) 'int) (= (type cd) 'real))) (setq cd (getvar 'USERR1)))
 (or (and bv (or (= (type bv) 'int) (= (type bv) 'real))) (setq bv (getvar 'USERR2)))
 (or (and goi (or (= (type goi) 'int) (= (type goi) 'real))) (setq goi (getvar 'USERR3)))
 (or (and nhi (or (= (type nhi) 'int) (= (type nhi) 'real))) (setq nhi (getvar 'USERR4)))
 (or (and fi (= (type fi) 'int)) (setq fi (getvar 'USERI5)))
 (setq temp "T"
       k    1)
 (while (= temp "T")
  (initget 0 "Cao Bao Goi Nhip Kinh")
  (setq pt-01 (getpoint (strcat "\nCaodam <"
                                (rtos cd 2 0)
                                ">/Baove <"
                                (rtos bv 2 0)
                                ">/daiGoi <"
                                (rtos goi 2 0)
                                ">/daiNhip <"
                                (rtos nhi 2 0)
                                ">/duongKinh <"
                                (itoa fi)
                                "> . Nhap toa do diem dau duoi dam: ")))
  (cond ((= pt-01 "Cao")
         (setq cd (cond ((getdist (strcat "\nChieu cao dam <" (rtos cd 2 0) ">:")))
                        (cd)))
         (setvar 'USERR1 cd))
        ((= pt-01 "Bao")
         (setq bv (cond ((getdist (strcat "\nChieu day lop betong bao ve <" (rtos bv 2 0) ">:")))
                        (bv)))
         (setvar 'USERR2 bv))
        ((= pt-01 "Goi")
         (setq goi (cond ((getdist (strcat "\nKhoang cach dai vung goi <" (rtos goi 2 0) ">:")))
                         (goi)))
         (setvar 'USERR3 goi))
        ((= pt-01 "Nhip")
         (setq nhi (cond ((getdist (strcat "\nKhoang cach dai vung nhip <" (rtos nhi 2 0) ">:")))
                         (nhi)))
         (setvar 'USERR4 nhi))
        ((= pt-01 "Kinh")
         (setq fi (cond ((getint (strcat "\nDuong kinh thep dai <" (itoa fi) ">:")))
                        (fi)))
         (setvar 'USERI5 fi))
        ((= pt-01 nil) (setq temp nil))
        (t (dim_cot) (tiep_theo_qm)))
  (setq k (1+ k)))
 (thong_ke_dai)
 (princ))

  • 1

#32 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 12 May 2016 - 02:32 PM

b2HgAau.png

Bác viết giùm mình cái code nó đơn giản hơn của thớt:

1. Đánh lệnh

2. Pick điểm 1, điểm 2, điểm 3, điểm 4.

3. Nhập chiều cao dầm

4. Nhập lớp bảo vệ

Sẽ được kết quả như trong hình. Chỗ khoanh mây là kích thước của điểm cần vẽ chứ không vẽ ra.

Chân thành cảm ơn.

2. Pick điểm 1, điểm 2, điểm 3, điểm 4. thì k còn là vẽ tự động nữa. lisp tự tính điểm cắt dựa vào 2 điểm pick thôi, trên là 1/4 mép trong, dưới là 1/6.

các ý khác bác quốc mạnh 04 tt đã làm rồi. 

-Điểm dấu móc bác  nên để 70 góc dốc 30 độ như @790312 thì đẹp (k quan trọng) ''em tìm số góc 45 độ với 75 để sửa k thấy :p"

- về điểm cắt thì bác để trên 1/4 làm tròn đến 50 là ok. dưới để cắt dưới 1/6 nếu nhịp lẻ thì thép cắt momen dương bị lẻ.13177166_1063087023714422_72486718080253

 

-Ý bài trên của em là 3 lisp khác nhau:

+Lisp 1: vẽ thép với dải đai như bác là làm thành công, bỏ phần ghi số đai từng nhịp xuất ra màn hình đi (điển chèn thống kê đai ấy)

+Lisp 2: Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. Dim này có thể là dim bình thường hoặc dim đã qua sửa kiểu "3000\X15~6a200". cái này phòng trường hợp nhịp dầm thay đổi, co kéo số đai k nhảy, k phải chia lại số đai thủ công, chọn dc nhiều dim 1 lúc. :P

+Lisp 3: cộng số lượng các đai. gõ lệnh, chọn những dim mà kích thước kiểu: "3000\X15~6a200" "3000\X17~6a200"... thì kết quả chỉ cần ra 15+17=32 thì xuất kq 32 ra màn hình. pick điểm chọn ghi text số 32. (đai dâm toàn nhà sẽ cùng 1 loại đường kính, k cần phân định rõ cho thuật toán đơn giản), hoặc có thể xuất kq 32 đấy vào 1 đối tượng ATTribute trong block thì càng tốt. (các chương trình thống kê thép mỗi số hiệu thép là 1 block kiểu này) Mình cũng cần thuật toán copy 1 giá trị đã tính toán ra rồi, giờ muốn ghi nó vào  1 phần tử ATT của block chứa nhiều ATT.

http://www.lee-mac.com/copytext.htmlkiểu như lệnh này của lee mac. cơ mà giá trị text mình tính ra trong hàm rồi chứ k phải chọn text :P


  • 0

#33 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 12 May 2016 - 02:47 PM

Như vậy cái dim 700 cách mép cột là của ai? Cái dim không bị khống chế bởi 700? Lisp sẽ dim cái này hay bạn tự dim?

700 là dim từ đoạn móc đến điểm đ1 và đ2 đấy bác, lisp sẽ dim cái này bác.


  • 0

#34 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 03:47 PM

Hỏi không được, thôi làm đại:

(defun c:test  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4)
 (defun Make-Line  (p1 p2 lay)
  (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
 (vl-load-com)
 (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
 (if (and (setq pt1 (getpoint "\nDiem p1: "))
          (setq pt2 (getpoint "\nDiem p2: "))
          (setq pt3 (getpoint "\nDiem p3: "))
          (setq pt4 (getpoint "\nDiem p4: "))
          (setq hcd (getdist "\nChieu cao dam: "))
          (setq hbv (getdist "\nChieu day bt bao ve: ")))
  (progn (setq po1 (polar pt3 (* pi 1.0) hcd)
               po2 (polar po1 (* pi (/ 30 180.0)) 70)
               po3 (polar pt4 (* pi 0.0) hcd)
               po4 (polar po3 (* pi (/ 150 180.0)) 70)
               ang (angle pt1 pt2)
               pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
         (Make-Line po1 po2 "CAT-THEP")
         (Make-Line po3 po4 "CAT-THEP")
         (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                 (mapcar 'vlax-3d-point (list pt1 pt2 (polar po1 (* pi 1.5) hbv)))
                 (mapcar 'vlax-3d-point
                         (list (polar po1 (* pi 1.5) hbv) (polar po3 (* pi 1.5) hbv) (polar po3 (* pi 1.5) hbv)))
                 (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
 (princ))

  • 1

#35 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 04:00 PM

2. Pick điểm 1, điểm 2, điểm 3, điểm 4. thì k còn là vẽ tự động nữa. lisp tự tính điểm cắt dựa vào 2 điểm pick thôi, trên là 1/4 mép trong, dưới là 1/6.

các ý khác bác quốc mạnh 04 tt đã làm rồi. 

-Điểm dấu móc bác  nên để 70 góc dốc 30 độ như @790312 thì đẹp (k quan trọng) ''em tìm số góc 45 độ với 75 để sửa k thấy :p"

- về điểm cắt thì bác để trên 1/4 làm tròn đến 50 là ok. dưới để cắt dưới 1/6 nếu nhịp lẻ thì thép cắt momen dương bị lẻ.13177166_1063087023714422_72486718080253

 

-Ý bài trên của em là 3 lisp khác nhau:

+Lisp 1: vẽ thép với dải đai như bác là làm thành công, bỏ phần ghi số đai từng nhịp xuất ra màn hình đi (điển chèn thống kê đai ấy)

+Lisp 2: Một lisp tách từ lisp trên vẽ momen trên: chọn dim, thông số phi<6>/khoảng cách</150> thì trong dim có thêm thông số về số lượng đai và khoảng cách :3000\X15~6a200. Dim này có thể là dim bình thường hoặc dim đã qua sửa kiểu "3000\X15~6a200". cái này phòng trường hợp nhịp dầm thay đổi, co kéo số đai k nhảy, k phải chia lại số đai thủ công, chọn dc nhiều dim 1 lúc. :P

+Lisp 3: cộng số lượng các đai. gõ lệnh, chọn những dim mà kích thước kiểu: "3000\X15~6a200" "3000\X17~6a200"... thì kết quả chỉ cần ra 15+17=32 thì xuất kq 32 ra màn hình. pick điểm chọn ghi text số 32. (đai dâm toàn nhà sẽ cùng 1 loại đường kính, k cần phân định rõ cho thuật toán đơn giản), hoặc có thể xuất kq 32 đấy vào 1 đối tượng ATTribute trong block thì càng tốt. (các chương trình thống kê thép mỗi số hiệu thép là 1 block kiểu này) Mình cũng cần thuật toán copy 1 giá trị đã tính toán ra rồi, giờ muốn ghi nó vào  1 phần tử ATT của block chứa nhiều ATT.

http://www.lee-mac.com/copytext.htmlkiểu như lệnh này của lee mac. cơ mà giá trị text mình tính ra trong hàm rồi chứ k phải chọn text :P

- Xem bài này, mình bắt đầu có hiện tượng bị hoảng loạn rồi... :D

- Thống kê đai để tổng quát, tức phải từng nhịp, đai có thể cùng đường kính nhưng kích thước có thể khác nhau (Vì dầm có thể không đều nhịp, chiều cao dầm khác nhau...).


  • 0

#36 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 12 May 2016 - 04:30 PM

 

Hỏi không được, thôi làm đại:

(defun c:test  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4)
 (defun Make-Line  (p1 p2 lay)
  (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
 (vl-load-com)
 (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
 (if (and (setq pt1 (getpoint "\nDiem p1: "))
          (setq pt2 (getpoint "\nDiem p2: "))
          (setq pt3 (getpoint "\nDiem p3: "))
          (setq pt4 (getpoint "\nDiem p4: "))
          (setq hcd (getdist "\nChieu cao dam: "))
          (setq hbv (getdist "\nChieu day bt bao ve: ")))
  (progn (setq po1 (polar pt3 (* pi 1.0) hcd)
               po2 (polar po1 (* pi (/ 30 180.0)) 70)
               po3 (polar pt4 (* pi 0.0) hcd)
               po4 (polar po3 (* pi (/ 150 180.0)) 70)
               ang (angle pt1 pt2)
               pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
         (Make-Line po1 po2 "CAT-THEP")
         (Make-Line po3 po4 "CAT-THEP")
         (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                 (mapcar 'vlax-3d-point (list pt1 pt2 (polar po1 (* pi 1.5) hbv)))
                 (mapcar 'vlax-3d-point
                         (list (polar po1 (* pi 1.5) hbv) (polar po3 (* pi 1.5) hbv) (polar po3 (* pi 1.5) hbv)))
                 (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
 (princ))

Ok rồi bác, nhưng bị lỗi gì mà dim nó không thẳng hàng.

P/s: Bác thêm giùm hàng nhập tỉ lệ nữa là tốt nhất, nếu tỉ lệ 1/20 thì cái đoạn vẽ móc dài gấp 5 lần chiều cao dầm, tương tự các tỉ lệ khác cũng vậy.

Chân thành cảm ơn bác đã nhiệt tình giúp đỡ.f1fu21n.png


  • -1

#37 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 04:52 PM

Sửa lại đây:

(defun c:test  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4 tlv p11 p33)
 (defun Make-Line  (p1 p2 lay)
  (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
 (vl-load-com)
 (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
 (if (and (setq pt1 (getpoint "\nDiem p1: "))
          (setq pt2 (getpoint "\nDiem p2: "))
          (setq pt3 (getpoint "\nDiem p3: "))
          (setq pt4 (getpoint "\nDiem p4: "))
          (setq hcd (getdist "\nChieu cao dam: "))
          (setq hbv (getdist "\nChieu day bt bao ve: "))
          (setq tlv (getreal "\nTi le ve <Nhap 20 de co ty le 1/20>:")))
  (progn (setq po1 (polar pt3 (* pi 1.0) hcd)
               po2 (polar po1 (* pi (/ 30 180.0)) (* 70 (/ 100 tlv)))
               po3 (polar pt4 (* pi 0.0) hcd)
               po4 (polar po3 (* pi (/ 150 180.0)) (* 70 (/ 100 tlv)))
               ang (angle pt1 pt2)
               pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
         (Make-Line po1 po2 "CAT-THEP")
         (Make-Line po3 po4 "CAT-THEP")
         (setq p11 (inters pt1 pt2 po1 (polar po1 (* pi 1.5) hcd))
               p33 (inters pt1 pt2 po3 (polar po3 (* pi 1.5) hcd)))
         (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                 (mapcar 'vlax-3d-point (list pt1 pt2 p11))
                 (mapcar 'vlax-3d-point (list p11 p33 p33))
                 (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
 (princ))

P/s: Làm kiểu này thì khai báo chiều dày bt bảo vệ không quan trọng, bạn có thể xóa dòng đó đi.


  • 1

#38 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 12 May 2016 - 04:56 PM

- Xem bài này, mình bắt đầu có hiện tượng bị hoảng loạn rồi... :D

- Thống kê đai để tổng quát, tức phải từng nhịp, đai có thể cùng đường kính nhưng kích thước có thể khác nhau (Vì dầm có thể không đều nhịp, chiều cao dầm khác nhau...).

lisp số 1: em muốn cái thép gia cường mô men dương là số chẵn bội số 50, chứ ko phải k cách mép chẵn, vì mép chẵn thì cái chiều dài này lẻ. :P. cho dải đai vào 1 layer thepdai cho màu vàng in nhạt hơn...

lisp số 2 em nghĩ chắc k vấn đề.

lisp số 3 là gõ lệnh:

-chọn dim cần thống kê số đai, k liên quan đến từng nhịp j cả, k liên quan đến đường kính đai. vì thường dầm sẽ là 1 loại đường kính. (chọn thủ công để lựa những đai cùng chiều cao dầm bằng mắt)

-ghi nội dung số đai vào 1 att block. LEE-mac he he


  • 0

#39 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 12 May 2016 - 05:07 PM

Sửa lại đây:

(defun c:test  (/ Make-Line ang bv cdi hbv hcd len msp pd3 po1 po2 po3 po4 pt1 pt2 pt3 pt4 tlv p11 p33)
 (defun Make-Line  (p1 p2 lay)
  (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2) (cons 8 lay))))
 (vl-load-com)
 (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       cdi (* (getvar "DIMTXT") (getvar "DIMSCALE")))
 (if (and (setq pt1 (getpoint "\nDiem p1: "))
          (setq pt2 (getpoint "\nDiem p2: "))
          (setq pt3 (getpoint "\nDiem p3: "))
          (setq pt4 (getpoint "\nDiem p4: "))
          (setq hcd (getdist "\nChieu cao dam: "))
          (setq hbv (getdist "\nChieu day bt bao ve: "))
          (setq tlv (getreal "\nTi le ve <Nhap 20 de co ty le 1/20>:")))
  (progn (setq po1 (polar pt3 (* pi 1.0) hcd)
               po2 (polar po1 (* pi (/ 30 180.0)) (* 70 (/ 100 tlv)))
               po3 (polar pt4 (* pi 0.0) hcd)
               po4 (polar po3 (* pi (/ 150 180.0)) (* 70 (/ 100 tlv)))
               ang (angle pt1 pt2)
               pd3 (polar pt1 (+ ang (* pi 1.5)) (* cdi 4)))
         (Make-Line po1 po2 "CAT-THEP")
         (Make-Line po3 po4 "CAT-THEP")
         (setq p11 (inters pt1 pt2 po1 (polar po1 (* pi 1.5) hcd))
               p33 (inters pt1 pt2 po3 (polar po3 (* pi 1.5) hcd)))
         (mapcar (function (lambda (x y z) (vla-adddimaligned msp x y z)))
                 (mapcar 'vlax-3d-point (list pt1 pt2 p11))
                 (mapcar 'vlax-3d-point (list p11 p33 p33))
                 (mapcar 'vlax-3d-point (list pd3 pd3 pd3)))))
 (princ))

P/s: Làm kiểu này thì khai báo chiều dày bt bảo vệ không quan trọng, bạn có thể xóa dòng đó đi.

Nhập 20 mà nó vẫn vẽ tỉ lệ 1:1, bác xem lại giúp, nếu nhập 20 thì x5, 25 thì x4, 10 thì 10, không nhập gì thì tỉ lệ 1:1. Vậy thôi bác. Cảm ơn bác lần nữa.


  • 0

#40 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 12 May 2016 - 05:28 PM

Nhập 20 mà nó vẫn vẽ tỉ lệ 1:1, bác xem lại giúp, nếu nhập 20 thì x5, 25 thì x4, 10 thì 10, không nhập gì thì tỉ lệ 1:1. Vậy thôi bác. Cảm ơn bác lần nữa.

Bạn kiểm tra lại đi, làm gì có chuyện đó, mình test kỹ rồi mà. Trong lisp có dòng này: (* 70 (/ 100 tlv))) tức là lấy 70 * (100/tlv).


  • 1