Chuyển đến nội dung
Diễn đàn CADViet

quan08

Thành viên
  • Số lượng nội dung

    67
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi quan08


  1. Quick :

    (defun c:do(/ lst p1 p2)
    (while
    (and
     (setq p1 (getpoint "\nP1:"))
     (setq p2 (getpoint p1 "\nP2:"))
    )
    (setq lst (cons (distance p1 p2) lst))
    )
    (alert (itoa (fix (+ (/ (apply '+ lst) (getreal "\nSo can chia :"))0.99))))
    )
    

    Dạo này đau đầu quá nên mình k onl đc nhiều để trả lời nhanh ^^

    Cảm ơn bác,sửa thêm giùm mình tí sau khi chia làm tròn giờ mình muốn nó cộng thêm 50 nữa thì sửa làm sao?Thanks.


  2. Nên viết thế này thôi bác ạ :

     

    (defun c:do(/ lst p1 p2 p)
    (setq p2 (getpoint (setq p1 (getpoint "\nP1 :")) "\nP2:") lst (list p2 p1))
    (while (setq p (getpoint (car lst) "\nDiem tiep theo <space to exit>")) (setq lst (cons p lst)))
    (alert (rtos (apply '+ (mapcar '(lambda(x y)(distance x y)) lst (cdr lst))) 2 2))
    )
    

    Nhờ bác sửa lại thành đo nhiều đoạn chứ không phải đo các đoạn thẳng liền nhau.

    1.Chọn điểm P1 rồi chọn điểm P2 là đoạn thứ 1 sẽ hỏi tiếp tục không?

    a. Nếu có sẽ chọn điểm P1 và P2 ra đoạn thứ 2,tiếp tục tới n đoạn.kết thúc lệnh sẽ cộng tổng các đoạn tiép là mục 3

    b. Nếu chọn không sẽ kết thúc lệnh tiếp là mục 3.

    3. Khi kết thúc lệnh thì hiện Số cần chia khi ta nhập số cần chia vào thì lấy kích thước tổng vừa đo chia cho số đó và hiện kết quả làm tròn ở hàng chục.

    Ví dụ: Sau khi chia kết quả là 255,33 thì làm tròn là 256.

    Thanks.


  3. 1/Nếu vẽ đoạn thẳng với 2 giá trị:giá trị đầu chia 6 giá trị sau giữ nguyên thì không được.

    Rep: Bạn enter thì đoạn sau (đoạn cuối) tự động dãn dài ra (giữ nguyên giá trị của nó).

    Còn các đoạn đầu chia cho 6.0

    Sửa lại code về việc bắt điểm cho bạn

    (defun c:TT (/ L ang dd L1 oldos)
     (defun Rnd (sc sbc)
    (if (/= (rem sc sbc) 0.0) (+ (- sc (rem sc sbc)) sbc) sc)
     )
     (setq oldos (getvar "osmode"))
     (setvar "cmdecho" 0)
    (setq dd (getpoint "\n Diem dau :"))
    (setq ang (getangle dd "\nGoc nghieng :"))
    (while (setq L (getdist "\n Nhap do dai <enter ket thuc lenh> :"))
    	(setq L1 L)
    	(setvar "osmode" 0)
    	(command "line" dd (setq dd (polar dd ang (Rnd (/ L 6.0) 50.0))) "" )
    	(setvar "osmode" oldos)
    )  
    (command "lengthen" "T" L1 "_non" (cdr(assoc 11 (entget(entlast)))) "")
     (princ)
    )
    

    Cảm ơn sự nhiệt tình giúp đỡ của bác,cho e hỏi thêm tí,sau khi vẽ đoạn thẳng xong giờ muốn vẽ 1 đoạn thẳng vuông góc và dài 500 vào cuối đoạn thẳng vừa vẽ thì thêm như thế nào?Thanks.


  4. Ở dòng này : (setq L (getdist dd "\n Nhap do dai <enter ket thuc lenh> :"))

    Bạn sửa thành :(setq L (getdist "\n Nhap do dai <enter ket thuc lenh> :"))

     

    Hàm getdist cho phép nhập theo 2 cách : nhập trực tiếp và pick 2 điểm chọn trên màn hình làm khoảng cách

     

    Ngoài ra, thay vì nhập C/K (lâu) như yêu cầu của bạn thì mình làm dòng nhắc :Nhap do dai <enter ket thuc lenh> :Khi bạn enter kết thúc lệnh thì đoạn thẳng cuối đúng bằng giá trị mà bạn nhập vào lần cuối cùng (trước khi bạn enter kết thúc lệnh).

    Sau khi sửa lại theo như ý bác chỉ:

    (defun c:TT (/ L ang dd L1 oldos) (defun Rnd (sc sbc) (if (/= (rem sc sbc) 0.0) (+ (- sc (rem sc sbc)) sbc) sc) ) (setq oldos (getvar "osmode")) (setvar "cmdecho" 0) (setq dd (getpoint "\n Diem dau :")) (setq ang (getangle dd "\nGoc nghieng :")) (while (setq L (getdist "\n Nhap do dai <enter ket thuc lenh> :")) (setq L1 L) (setvar "osmode" 0) (command "line" dd (setq dd (polar dd ang (Rnd (/ L 6.0) 50.0))) "" ) ) (command "lengthen" "T" L1 (cdr(assoc 11 (entget(entlast)))) "") (setvar "osmode" oldos) (princ) )
    

    Thì bị vướng mắc vài chỗ:

    nhập độ dài lần 1 bằng pick chọn 2 điểm thì có truy bắt điểm để pick,nhập độ dài lần 2 thì không có truy bắt điểm để pick nếu pick 2 điểm bất kỳ thì kết quả sẽ là đoạn thẳng có chiều dài không chia cho 6.

    Ý e muốn:

    1/Nếu vẽ đoạn thẳng với 2 giá trị:giá trị đầu chia 6 giá trị sau giữ nguyên thì không được.

    2/Vẽ đoạn thẳng với 3 giá trị thì 2 giá trị đầu chia 6 giá trị cuối không chia 6 thì được.

    Mong bác sửa sao cho có thể vẽ đoạn thẳng thỏa mãn cả 1 và 2.Thanks.


  5. Lisp của bạn đây:
     (defun c:TT (/ L ang dd L1 oldos) (defun Rnd (sc sbc) (if (/= (rem sc sbc) 0.0) (+ (- sc (rem sc sbc)) sbc) sc) ) (setq oldos (getvar "osmode")) (setvar "cmdecho" 0) (setq dd (getpoint "\n Diem dau :")) (setq ang (getangle dd "\nGoc nghieng :")) (while (setq L (getdist dd "\n Nhap do dai <enter ket thuc lenh> :")) (setq L1 L) (setvar "osmode" 0) (command "line" dd (setq dd (polar dd ang (Rnd (/ L 6.0) 50.0))) "" ) ) (command "lengthen" "T" L1 (cdr(assoc 11 (entget(entlast)))) "") (setvar "osmode" oldos) (princ) ) 

    Cảm ơn bác nhưng chưa đầy đủ bác ah.

    Ở phần nhập độ dài,cho ta nhập trực tiếp và pick 2 điểm chọn(cái này sử dụng nhiều hơn nhập trực tiếp giá trị) giống lệnh offset.

    Ví Dụ cụ thể:

    Đánh lệnh TT:

    Điểm đầu:....

    Góc nghiêng:....

    1- nhập giá trị :3000

    2-Tiếp tục hay không:K

    3-Nhập giá trị tiếp:4000

    Kết thúc lệnh ta vẽ được đoạn thẳng =1 + 3 = 3000/6 + 4000 = 4500

    Nếu 2- nhấn C:

    3-Nhập giá trị tiếp:4000

    4-Tiếp tục hay không:K

    5-Nhập giá trị tiếp:1000

    Kết thúc lệnh ta vẽ được đoạn thẳng =1+ 3 + 5= (3000/6=500) + (4000/6 = 666,66 )+1000 = 500+700+1000=2200

    Thanks.


  6. Nhờ các bác viết gùm đoạn lisp:

    Sau khi đánh lệnh TT chẳng hạn,sẽ hiện lên yêu cầu nhập chiều dài đoạn thứ nhất hoặc nếu không nhập ta sẽ pick 2 điểm để chọn khoảng cách giống lệnh offset sẽ vẽ đoạn thẳng có chiều dài bằng giá trị nhập vào hoặc khoảng cách 2 điểm pick chọn.

    (nhưng chiều dài này sẽ bằng giá trị đầu vào chia cho 6.Nếu giá trị đầu vào là 3000 thì chiều dài đoạn cần vẽ là 500,nếu khi chia cho 6 mà lẻ sẽ là:

    Phần lẻ hàng chục nhỏ hơn 50 sẽ làm tròn 50,lớn hơn 50 sẽ làm tròn 100

    Ví dụ 666,666 thì làm tròn 700 nếu1025 sẽ làm tròn 1050.)

    Sau khi có đoạn thứ nhất sẽ hỏi có nhập tiếp không,nếu không thì giá trị tiếp theo sẽ bằng đúng giá trị đầu vào mà không chia cho 6 và kết thúc lệnh.Nếu có thì giá trị giống đoạn thứ nhất là chia cho 6.

    Ví Dụ cụ thể:

    Đánh lệnh TT:

    1- nhập giá trị :3000

    2-Tiếp tục hay không:K

    3-Nhập giá trị tiếp:4000

    Kết thúc lệnh ta vẽ được đoạn thẳng =1 + 3 = 3000/6 + 4000 = 4500

    Nếu 2- nhấn C:

    3-Nhập giá trị tiếp:4000

    4-Tiếp tục hay không:K

    5-Nhập giá trị tiếp:1000

    Kết thúc lệnh ta vẽ được đoạn thẳng =1+ 3 + 5= (3000/6=500) + (4000/6 = 666,66 )+1000 = 500+700+1000=2200

    Chân thành cảm ơn sự quan tâm giúp đỡ.


  7. Bạn chú ý linetype CENTER Phải đã được load smile.png Không thì thêm đoạn này vào đầu lisp :

     

     

    => Lisp thành :

     

    (defun c:cl(/ eLine ll ur pl pr pt pb ex ss)
    (vl-load-com)
    (if (= (tblsearch "ltype" "CENTER") nil)(command "-linetype" "l" "CENTER" "acad.lin" ""))
    (grtext -1 "Center Line @Ketxu")
    (defun eLine(p1 p2)(entmakex (list (cons 0 "LINE")(cons 62 3)(cons 10 p1)(cons 11 p2)(cons 6 "CENTER"))))
    (while (setq ss (ssget))
    (vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
    (vla-getboundingbox e 'll 'ur)
    (setq ll (vlax-safearray->list ll)
     ur (vlax-safearray->list ur)
     ex (/ (abs (-(car ll)(car ur))) 6) ;Extend outside Rectangle
     pl (list (- (car ll) ex) (/ (+ (cadr ll)(cadr ur)) 2))
     pr (list (+ (car ur) ex) (cadr pl))
     pt (list (/ (+ (car ll)(car ur)) 2) (+ (cadr ur) ex))
     pb (list (car pt) (- (cadr ll) ex))
    )
    (eLine pl pr)
    (eLine pt pb)
    )
    )
    )
    

    Cảm ơn bạn nhiều,nhưng mình muốn khi vẽ đường trục đó mặc định nó vẽ đường trục đó bằng layer TRUC đã có trên bản vẽ,tiện thể cho mình hỏi phần trục dư ra ngoài các hình kích thước dài như thế nào vậy?


  8. Đối tượng bất kỳ :

    (defun c:cl(/ eLine ll ur pl pr pt pb ex ss)
    (vl-load-com)
    (defun eLine(p1 p2)(entmakex (list (cons 0 "LINE")(cons 62 3)(cons 10 p1)(cons 11 p2)(cons 6 "CENTER"))))
    (while (setq ss (ssget))
    (vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
    (vla-getboundingbox e 'll 'ur)
    (setq ll (vlax-safearray->list ll)
     ur (vlax-safearray->list ur)
     ex (/ (abs (-(car ll)(car ur))) 6) ;Extend outside Rectangle
     pl (list (- (car ll) ex) (/ (+ (cadr ll)(cadr ur)) 2))
     pr (list (+ (car ur) ex) (cadr pl))
     pt (list (/ (+ (car ll)(car ur)) 2) (+ (cadr ur) ex))
     pb (list (car pt) (- (cadr ll) ex))
    )
    (eLine pl pr)
    (eLine pt pb)
    )
    )
    )
    

    Bạn xem lại giùm sau khi kêu chọn đối tượng thì lisp không hoạt động.Thanks.


  9. Mình down được trên diễn đàn lisp vẽ trục cho đường tròn,nay nhờ các bác chỉnh sửa lại sao cho lisp có thể định được trục cho hình vuông,hình chữ nhật được vẽ bằng polyline.Chân thành cảm ơn trước.

     
    defun NewLayer (Name Col Typ)
    (if (not (tblsearch "layer" Name))
    (command "-layer" "n" Name "c" Col Name "l" Typ Name "" ))
    )
    (defun c:tdx ( / ss oldos oldla ent r c)
     (setq oldos (getvar "osmode"))
     (setq oldla (getvar "clayer"))
     (NewLayer "TRUCDX" 9 "CENTER2")
     (setvar "osmode" 0)
     (setvar "clayer" "TRUCDX")
     (setq ss (ssget '((0 . "CIRCLE"))))
     (setq c 0)
     (repeat (sslength ss)
    (setq ent (entget (ssname ss c)))
    (setq r (cdr (assoc 40 ent)))
    (setq pt (cdr (assoc 10 ent)))
    (command ".pline" (list (- (car pt) r (/ r 5)) (cadr pt)) (list (+ (car pt) r (/ r 5)) (cadr pt)) "")
    (command ".pline" (list (car pt) (- (cadr pt) r (/ r 5))) (list (car pt) (+ (cadr pt) r (/ r 5))) "")
    (setq c (1+ c))
    )
     (setvar "osmode" oldos)
     (setvar "clayer" oldla)
     (princ "\n* * * Completed! * * *")
     (princ)
     )
    


  10. Mình sưu tầm được lisp vẽ mặt cắt móng,vì phát hiện 1 chỗ vẽ không đúng,vừa mày mò vừa lên diễn đàn nhờ các bác giải thích giúp nhưng làm mãi không được.Nay đưa lên nhờ các bác sửa giúp những cái e cần:

    http://www.cadviet.c...drawing1_91.dwg

    Và đây là đoạn lisp nhờ các bác sửa:

    ;;Ham ve mc cac thanh thep
    (defun mcthep (pd pc d n)
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (setq kc (/ (- (distance pd pc) d) (- n 1)))
    (command ".line" pd pc "")
    
    (setq  a (angle pd pc)
     pd (list (+ (car pd) (/ d 2)) (+ (cadr pd) (/ d 2)))
    )
    
    (repeat n
     (command ".donut" 0 d pd c^)
     (setq pd(polar pd a kc))
    )
    ;;(command ".donut" 0 d (polar pc (+ a (* pi 0.75)) d) c^)
    (setvar "osmode" old)
    )
    ;;Ham ve thep dai va thep chiu luc cua dam mong
    (defun vdai (p1 a b n1 n2 d)
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) B)))
    (setq  kc (/ (- a d) (- n1 1))
     p1 (list (+ (car p1) (/ d 2)) (+ (cadr p1) (/ d 2)))
    )
    ;(princ n1)
    (setq p p1)
    (repeat n1
     (command ".donut" 0 d p c^)
     (setq p (polar p 0 kc))
    );end of repeat1
    (setq p (polar p1 (/ pi 2) (- b d)))
    (repeat n1
     (command ".donut" 0 d p c^)
     (setq p (polar p 0 kc))
    );end of repeat2
    (setq  kc (/ (- b d) (- n2 1)))
    (setq p (polar p1 (/ pi 2) kc))
    (repeat (- n2 1)
     (command ".donut" 0 d p c^)
     (setq p (polar p (/ pi 2) kc))
    );end of repeat3
    (setq p (polar p1 0 (- a d)))
    (setq p (polar p (/ pi 2) kc))
    (repeat ( - n2 1)
     (command ".donut" 0 d p c^)
     (setq p (polar p (/ pi 2) kc))
    );end of repeat4
    
    (setvar "osmode" old)
    )
    ;; Chuong trinh chinhs vex mc mongs
    (defun c:mcm1 ()
       (initget 1 "MC MB")
      (setq res (getkword "\n<M.BANG/M.COT><MB/MC>:"))
    (setq   p1 (getpoint "\nDiem chen:")
     l1 (getreal "\nBe rong mong:")
     l2 (getreal "\nBe rong co mong:")
     l3 (/ (- l1 l2) 2)
     h1 (getreal "\nChieu cao ben mong:")
     h2 (getreal "\nChieu cao phan nghieng:")
     h3 (getreal "\nChieu cao co mong:")
     bv (getreal "\nBe day lop bao ve:")
     d (getreal "\nDuong kinh thep:")
     n (getint "\nS.luong thep day mong:")
    )
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (setq p (polar p1 pi 100))
    (setq p (polar p (/ (- 0 pi) 2) 100))
    (command  ".rectangle" p (list (+ (car p) 200 l1) (+ (cadr p) 100)))
    (command  ".pline" p1 "W" 0 0 (setq p (polar p1 (/ pi 2) h1)) (setq p (list (+ (car p) l3) (+ (cadr p) h2))) (setq p (polar p (/ pi 2) h3)) ""
    )
    (command ".mirror" "l" "" (setq p (polar p1 0 (/ l1 2))) (setq p (polar p (/ pi 2) (/ l1 2))) "")
    (setq pd (list (+ (car p1) bv) (+ (cadr p1) bv))
     pc (polar pd 0 (- l1 (* 2 bv)))
    )
    (mcthep pd pc d n)
    
    (IF (= res "MB")
     (progn
      (setq  p (list (+ (car p1) l3 bv) (+ (cadr p1) d bv))
       a (- l2 (* 2 bv))
       b (- (+ h1 h2 h3) (* 2 bv) d)
       n1 (getint "\nS.luong thep ngang dam mong:")
       n2 (getint "\nS.luong thep doc dam mong:")
      )
      (vdai p a b n1 n2 d)
     );end of progn1
     (progn
      (setq p (list (+ (car p1) l3 bv (- 0 (* 10 d))) (+ (cadr p1) (* 2 d) bv))); end of setq
      (command ".pline" p "W" 0 0  (setq p (polar p 0 (* 10 d)))
       (setq p (polar p (/ pi 2) (+ h1 h2 h3 (* 20 d) (- 0 (* 2 d)  bv))))
       (setq p (polar p (/ (- 0 pi) 4) (* 2 d))) ""
      ); end of co
      (command ".mirror" "l" "" (setq p (polar p1 0 (/ l1 2))) (setq p (polar p (/ pi 2) (/ l1 2))) ""  ); end of co
     );end of progn2
    
    ); end of if
    (setvar "osmode" old)
    )
    

    Cảm ơn các bác đã dành thời gian quan tâm.

    Mong các bác bớt chút thời gian giúp e với.Thanks.


  11. Mình sưu tầm được lisp vẽ mặt cắt móng,vì phát hiện 1 chỗ vẽ không đúng,vừa mày mò vừa lên diễn đàn nhờ các bác giải thích giúp nhưng làm mãi không được.Nay đưa lên nhờ các bác sửa giúp những cái e cần:

    http://www.cadviet.com/upfiles/3/drawing1_91.dwg

    Và đây là đoạn lisp nhờ các bác sửa:

     
    ;;Ham ve mc cac thanh thep
    (defun mcthep (pd pc d n)
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (setq kc (/ (- (distance pd pc) d) (- n 1)))
    (command ".line" pd pc "")
    
    (setq  a (angle pd pc)
     pd (list (+ (car pd) (/ d 2)) (+ (cadr pd) (/ d 2)))
    )
    
    (repeat n
     (command ".donut" 0 d pd c^)
     (setq pd(polar pd a kc))
    )
    ;;(command ".donut" 0 d (polar pc (+ a (* pi 0.75)) d) c^)
    (setvar "osmode" old)
    )
    ;;Ham ve thep dai va thep chiu luc cua dam mong
    (defun vdai (p1 a b n1 n2 d)
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) B)))
    (setq  kc (/ (- a d) (- n1 1))
     p1 (list (+ (car p1) (/ d 2)) (+ (cadr p1) (/ d 2)))
    )
    ;(princ n1)
    (setq p p1)
    (repeat n1
     (command ".donut" 0 d p c^)
     (setq p (polar p 0 kc))
    );end of repeat1
    (setq p (polar p1 (/ pi 2) (- b d)))
    (repeat n1
     (command ".donut" 0 d p c^)
     (setq p (polar p 0 kc))
    );end of repeat2
    (setq  kc (/ (- b d) (- n2 1)))
    (setq p (polar p1 (/ pi 2) kc))
    (repeat (- n2 1)
     (command ".donut" 0 d p c^)
     (setq p (polar p (/ pi 2) kc))
    );end of repeat3
    (setq p (polar p1 0 (- a d)))
    (setq p (polar p (/ pi 2) kc))
    (repeat ( - n2 1)
     (command ".donut" 0 d p c^)
     (setq p (polar p (/ pi 2) kc))
    );end of repeat4
    
    (setvar "osmode" old)
    )
    ;; Chuong trinh chinhs vex mc mongs
    (defun c:mcm1 ()
       (initget 1 "MC MB")
      (setq res (getkword "\n<M.BANG/M.COT><MB/MC>:"))
    (setq   p1 (getpoint "\nDiem chen:")
     l1 (getreal "\nBe rong mong:")
     l2 (getreal "\nBe rong co mong:")
     l3 (/ (- l1 l2) 2)
     h1 (getreal "\nChieu cao ben mong:")
     h2 (getreal "\nChieu cao phan nghieng:")
     h3 (getreal "\nChieu cao co mong:")
     bv (getreal "\nBe day lop bao ve:")
     d (getreal "\nDuong kinh thep:")
     n (getint "\nS.luong thep day mong:")
    )
    (setq old (getvar "osmode"))
    (setvar "osmode" 0)
    (setq p (polar p1 pi 100))
    (setq p (polar p (/ (- 0 pi) 2) 100))
    (command  ".rectangle" p (list (+ (car p) 200 l1) (+ (cadr p) 100)))
    (command  ".pline" p1 "W" 0 0 (setq p (polar p1 (/ pi 2) h1)) (setq p (list (+ (car p) l3) (+ (cadr p) h2))) (setq p (polar p (/ pi 2) h3)) ""
    )
    (command ".mirror" "l" "" (setq p (polar p1 0 (/ l1 2))) (setq p (polar p (/ pi 2) (/ l1 2))) "")
    (setq pd (list (+ (car p1) bv) (+ (cadr p1) bv))
     pc (polar pd 0 (- l1 (* 2 bv)))
    )
    (mcthep pd pc d n)
    
    (IF (= res "MB")
     (progn
      (setq  p (list (+ (car p1) l3 bv) (+ (cadr p1) d bv))
       a (- l2 (* 2 bv))
       b (- (+ h1 h2 h3) (* 2 bv) d)
       n1 (getint "\nS.luong thep ngang dam mong:")
       n2 (getint "\nS.luong thep doc dam mong:")
      )
      (vdai p a b n1 n2 d)
     );end of progn1
     (progn
      (setq p (list (+ (car p1) l3 bv (- 0 (* 10 d))) (+ (cadr p1) (* 2 d) bv))); end of setq
      (command ".pline" p "W" 0 0  (setq p (polar p 0 (* 10 d)))
       (setq p (polar p (/ pi 2) (+ h1 h2 h3 (* 20 d) (- 0 (* 2 d)  bv))))
       (setq p (polar p (/ (- 0 pi) 4) (* 2 d))) ""
      ); end of co
      (command ".mirror" "l" "" (setq p (polar p1 0 (/ l1 2))) (setq p (polar p (/ pi 2) (/ l1 2))) ""  ); end of co
     );end of progn2
    
    ); end of if
    (setvar "osmode" old)
    )
    

    Cảm ơn các bác đã dành thời gian quan tâm.


  12. @quan08 : Dòng bôi đen : = (pi * 0,75) = 3/4 pi. Số Pi được lisp mặc định như số pi ta đang dùng để tính toán hình học giải tích (trừ khi bị định nghĩa lại ^^)

    E vẫn chưa hiểu,dòng lệnh này vẽ 1 donut đường kính trong 0 đường kính ngoài d,dòng sau hiểu như thế nào vậy bác.Mong bác chỉ giúp.Thanks.


  13. 1). Đặt biến kc bằng (khoảng cách từ điểm pd đến pc) trừ đi giá trị d, sau đó chia cho (n trừ 1).

    2). Vẽ 1 Donut có đường kính trong là 0, đường kính ngoài là d, điểm tâm là pd (c^ tương ứng enter).

    Thân thương!

    Cảm ơn bác nhiều nhờ bác giải thích giùm e dòng bôi đen dưới đây với:

    (command ".donut" 0 d (polar pc (+ a (* pi 0.75)) d) c^)


  14. Day ban.

     

    
    (defun c:hcn (/ p1 p2 p3 p4 p5 p6 p7 h B)
    (if (and
     	(setq h (getreal "\nH:"))
     	(setq b (getreal "\nb:"))
     	(setq p3 (getpoint "\nPoint:"))
     	)
     (progn
    
    (setq p2 (polar p3 (* pi 0.5) (+ h 21))
     	p1 (polar p2 (* pi 1.75) 66)
     	p4 (polar p3 0 B)
     	p5 (polar p4 (* pi 0.5) h)
     	p6 (polar p5 pi (+ b 21))
     	p7 (polar p6 (* pi 1.75) 66))
    (command "pline" p1 p2 p3 p4 p5 p6 p7 "")
    (princ)
    )
     )
     )
    

    Cảm ơn bạn nhưng có 1 lỗi là khi vẽ 1 hình chữ nhật kích thước bất kỳ thì ra đúng như yêu cầu,hình thứ n cùng kích thước với hình đầu thì lisp vẫn thực hiện đúng nhưng khi vẽ hình chữ nhật kích thước khác thì bị lỗi vẽ hcn không đúng yêu cầu.Mong bạn và các bác xem giúp.Thanks.


  15. code Autolisp:

     

     

    (defun c:dchu (/ tdt csht sdt index tt entdt)

    (defun thay (tt key moi / cu)

    (setq cu (assoc key tt))

    (subst (cons key moi) cu tt)

    )

    (setq tdt (ssget '((0 . "TEXT")))

    csht (getint "\nSo bat dau: ")

    sdt (sslength tdt)

    index 0

    )

    (repeat sdt

    (setq entdt (ssname tdt index)

    index (1+ index)

    tt (entget entdt)

    tt (thay tt 1 (itoa csht))

    csht (1+ csht)

    )

    (entmod tt)

    (entupd entdt)

    )

    (princ)

    )

     

    Khi dùng lệnh, chỉ cần pick các text theo đúng thứ tự, là ok. Có thể dùng tham số f(ence) để chọn cho nhanh theo thứ tự.

    Conlonbay dùng thử, có gì thì hồi âm nhé!

    Nhờ các bác sửa lisp này sau khi đánh lệnh mặc định có sẵn tham số f để chọn luôn khỏi phải đánh chữ f sau đó mới nhập số bắt đầu.Chân thành cảm ơn trước.


  16. Hự, cái lisp nó tạo ra đối tượng Boundary hoàn toàn mới, là 1 PLine KHÉP KÍN, nên vấn đề bạn yêu cầu mình không thể hiểu được :unsure: Bạn đã sử dụng lệnh Boundary chưa ??

    Ý mình là:

    1.Nếu cùng 1 layer thì nối thành 1 polyline,không cùng layer thì không nối bạn ah.

    2.Nếu có thể không cùng layer vẫn nối thành 1 polyline nhưng vẫn giữ nguyên thuộc tính của layer,ví dụ có 2 layer nét liền và nét đứt khi dùng lisp nó nối thành polyline nhưng nét liền vẫn là nét liền,nét đứt vẫn là nét đứt.

    Nếu 2 không được thì 1 cũng được bạn ah.Cảm ơn bạn nhiều.


  17. Có thể nên làm như thế này :

    (defun c:b2 (/ elast lay) (setq elast (entlast) lay (cdr (assoc 8 (entget (car (entsel "\nPick an entity to gap Layer :"))))))
    (command ".boundary")
    (while (= (logand (getvar "CMDACTIVE") 1) 1) (command pause))
    (while (setq elast (entnext elast))(vla-put-Layer (vlax-ename->vla-object elast) lay)))

    Thí dụ hình chữ nhật được tạo bởi 4 đoạn thẳng,3 đoạn liền nhau cùng là NETBAO còn 1 đoạn là NETTHEP thì lisp của bác sẽ đưa về cùng 1 layer,Bác có thể sửa lại giùm e nếu nhiều đoạn thẳng cùng 1 layer liền nhau thì nối lại thành BOUNDARY nét khác layer thì không?Thanks.

×