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

Danh Cong

Moderator
  • Số lượng nội dung

    1.387
  • Đã tham gia

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

  • Ngày trúng

    117

Bài đăng được đăng bởi Danh Cong


  1. Bài toán của bạn đây.


    Thực hiên lệnh "VE"  để vẽ nhé. 


    Kích thước thì bạn tự DIM lấy vậy.   :D   :D   :D


     


    Góp ý chút với bạn:


    1. Bài vẽ có nhiều điểm. Bạn nên đặt tên cho từng điểm đễ dễ kiểm soát trong quá trình viết lisp.


    2. Các điểm tuân theo quy luật thì bạn dùng hàm (Polar....) sẽ trực quan hơn.


     


    http://www.cadviet.com/upfiles/6/124641_ve_1.lsp


    • Vote tăng 1

  2. 1. Cad bạn có mở được 1 bản vẽ mới không?

    -Nếu mở được mà màn hình màu xám, thì là do Cad mặc định màu ban đầu trên Model là Màu xám. Bạn có thể thay đổi trở về Màu Đen nguyên thủy bằng cách gõ "OP"--> Thẻ "Display"--> Nhấn nút  "Colors"--->  Chọn mục 2D model Space + Uniform BackGround + Color chọn màu Black  ---> OK


  3. Mình trả lời 1 số câu hỏi của bạn thôi.

    1. Đối tượng bên Model và bên Layout.

    - Cách thức tạo nên bản vẽ bên Layout của bạn đang ở cái gọi là "Gán gép".  Tức là bản vẽ đang vẽ hình bên Model , sao đó chuyển sang Layout để Dim kích thước. 

    Thông thường thì bạn tạo khung nhìn View bên Layout bằng lệnh MV tạo ra được hình chữ nhật, còn nếu bạn muốn tạo khung nhìn View bất kỳ thì tìm hiểu thêm lệnh VPCLIP.

     

    - Khung nhìn bên layout của bạn rất lung tung, khó tìm nó ở đâu trên Model. Có rất nhiều cách tìm nhanh, ví dụ như bạn đang ở Layout, kích đúp vào cái khung View của bạn, vẽ ra 1 cái đường tròn có bán kính to đùng. Sau đó bạn chuyển về bên Model, tìm cái tâm của đường tròn đó là xong.  :)  :)  :)  :)

     

    2. Mình thì ko biết cách thức bạn đặt nét in như thế nào. Nếu là mình thì đặt nét in theo màu. 

    Số layer thì nên đặt ít thôi, bản vẽ của mình rất nhiều đối tượng nhưng chỉ giới hạn dưới 20 layer là quá lắm rồi. 

    Chúc bạn thành công.  :D  :D  :D

    • Vote tăng 1

  4. Block có tính hệ thống, mục đích sử dụng của block là khi thay đổi 1 đối tượng thì tất cả Block đã Insert đều thay đổi theo.

    Thế nên bạn muốn sửa 1 vài cái thì chỉ có cách tạo Block mới hoặc EXPLODE nó ra thôi  :)  :)  :)  Mà theo mình thì cứ EXPLODE đối tượng block ra là dễ nhất  :D  :D  :D

    • Vote giảm 1

  5. vậy muốn cắt 1 đoạn cong có sẵn để đc 1 đoạn cong có chiều dài theo ý mình thì sao bạn. ví dụ mình có đường cong 10m, giờ muốn cắt còn lại 7m thì làm sao đo đc 7m để cắt.

    Cách đơn giản nhất là sử dụng lisp.

    Lisp này do bậc tiền bối nào đó viết chứ ko phải mình viết ra đâu nghen.

    Lệnh XDIV.

     

    - Gõ "XDIV"   ---> Chọn đối tượng đường cong bất kỳ---> Chọn khoảng chia. Sẽ ra vị trí mà đường cong có chiều dài theo ý muốn. Bạn vẽ thêm đoạn thẳng rồi "Trim" đoạn thừa là ok

     

    http://www.cadviet.com/upfiles/6/124641_xdiv.lsp


  6. Em cám ơn ạ :)

    Em tìm tòi học lisp mấy tuần,  chưa biết cách để xử lý cơ sở dữ liệu của đối tượng được chọn.

     

    ANh có thể giải thích chút ít về cú pháp : (ssget "_F" (list a b) '((0 . "*LINE"))         và      (and (Setq c (car (acet-geom-intersectwith enl tmp 0)))

     

     

     

    Cái này nên làm MLeader luôn để các Leader nó kết thành 1 đối tượng.

    Lisp sửa lại của bạn:

    (defun c:lee  (/ a b c cmd enl i ssl tmp)
     (setq cmd (getvar 'CMDECHO))
     (setvar 'CMDECHO 0)
     (command "undo" "be")
     (if (and (setq a (getpoint "\nChon diem Cuoi Leader"))
              (setq b (getpoint a "\nChon diem Dau ve Leader")))
      (progn
    ;;; (command "Leader" b a "" "" "n")
             (command "LINE" b a "")
             (setq tmp (entlast))
             (setq ssl (ssget "_F" (list a b) '((0 . "*LINE"))))
             (setq i -1)
             (while (setq enl (ssname ssl (setq i (1+ i))))
              (and (Setq c (car (acet-geom-intersectwith enl tmp 0))) (command "leader" c a "" "" "n")))
             (entdel tmp)))
     (command "undo" "end")
     (setvar 'CMDECHO cmd)
     (princ))

     


  7.  

    Điểm C chỉ là để lấy khoảng cách và góc hợp giữa đoạn thẳng nối A-C với khúc đầu của leader. Hướng rải luôn theo hướng mũi tên leader, nếu góc ở trên < 90 thì rải giật lùi và ngược lại.

    (defun c:tt  (/ ang apt dis ele ent i lea len lsc lsm lsp pt pt1 pt2)
     (vl-load-com)
     (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
     (if (and (setq ele (ssget "_+.:E:S" '((0 . "LEADER"))))
              (setq ent (ssname ele 0)
                    lsp (vl-remove-if-not '(lambda (x) (member (car x) '(10))) (entget ent))
                    lsc (vlax-get-property (vlax-ename->vla-object ent) 'ScaleFactor))
              (setq pt1 (cdr (car lsp)))
              (setq dis (getdist "\nKhoang cach giua cac Leader: " pt1))
              (setq pt2 (getpoint "\nDiem ket thuc: " pt1)))
      (progn (setq lsm (vl-remove-if '(lambda (x) (member (car x) '(-1 5 10 330 340))) (entget ent))
                   ang (angle pt1 (cdr (cadr lsp)))
                   len (distance pt1 pt2)
                   i   0)
             (setq apt (angle pt1 pt2))
             (if (or (< (- apt ang) (* 0.5 pi)) (> (- apt ang) (* 1.5 pi)))
              (setq ang ang)
              (setq ang (+ ang pi)))
             (repeat (fix (/ len dis))
              (setq pt (polar pt1 ang (* dis (setq i (1+ i)))))
              (setq lea (entmakex (append lsm (subst (cons 10 pt) (assoc 10 lsp) lsp))))
              (vlax-put-property (vlax-ename->vla-object lea) 'ScaleFactor lsc))))
     (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
     (princ))

     

    Em thử nghiệm và đạt kết quả cao :))) Nhưng đoc lisp của bác mà em chưa hiểu gì hết. 

    Chắc tại trình độ mình còn kém quá, còn phải học dài dài.....


  8. Lisp  này của em thì chỉ cố định được điểm cuối của Learder. Còn điểm đầu thì phải Pick thủ công, nếu phải vẽ nhiều Leader thì pick điểm mất nhiều thời gian quá.  Do vậy nếu xác định được giao điểm của đường thẳng A-B với các đường thẳng kia thì tốt quá http://www.cadviet.com/upfiles/6/124641_lee.txt


  9. Chào các anh chị ạ.

    Em mới tập viết lisp, chỉ viết được cách dải Leader theo 1 đường thẳng, các leader dải theo 1 khoảng cách định sẵn thôi.

     Giờ em muốn nâng cấp nó - Hoặc cũng có thể phải viết 1 lisp mới hoàn toàn mà em thì chưa hiểu rõ lắm. 

     

    Mục tiêu của em như sau.

    -    Có 1 số đường thẳng như hình vẽ. Đường thẳng A-B giao cắt với các đường thẳng đó. 

    -    EM muốn vẽ n đường Leader, với điểm cuối là A, còn điểm đầu là giao điểm của đường thẳng A-B với các đường thẳng còn lại

     

    Mong các anh chị giúp đỡ. 124641_leader.png


  10. nếu đặt nhiều chữ ở điểm giao, rồi giải thích, e sợ rối. nên e đặt như vậy chỉ là tượng trưng.

    còn lisp của bác chủ topic kia, chỉ tạo được leader 1 đoạn thẳng, ko tạo được leader nhiều đoạn thẳng như e muốn

    Ừ nhỉ, mình chưa tạo được leader nhiều đoạn thẳng. Để vài ngày mình tìm hiểu rồi trả lời bạn nhé. Mình cũng mới tìm hiểu về lập trình lisp thôi. CHưa thành thạo cho lắm ^^


  11. Các bác nhiêt  tình quá. ^^

    Em chọn điểm đầu ý bản vẽ của em có đôi lúc phải chỉnh sửa, đặt lại vị trí của Leader cho thoáng bản vẽ, nếu chon từng cái Leader để đặt thì mệt lắm. 

    Có 1 số khoảng cách lại không đều nhau, nên ko thể dải leader theo lệnh Array được.

    Em cũng sửa được cái lisp của em rồi.  Lỗi của nó là em chưa thêm dòng lệnh để tắt chế độ bắt điểm khi thực hiện lisp. 

    Lúc trước chưa tắt, nên nó bắt lung tung vào các điểm khác anh ạ.

     

    Thêm dòng :

    (setq os (getvar "osmode"))
    (setvar "osmode" 0)
    ....
    (setvar "osmode" os)

    Thế là lại chạy được ngon lành.

     

    Nói chung là cám ơn các bác nhiều lắm ạ.http://www.cadviet.com/upfiles/6/124641_lea_1.lsp


  12. Em mới tập viết lisp nên ko hiểu được lỗi sai của lisp này ở đâu. Mong mọi người giúp đỡ.

    Ý muốn của em là: 

    Trên bản vẽ có 1 đoạn thẳng. Chiều dài D1, điểm đầu là A, điểm cuối là B.

     

    Em muốn vẽ n lần số lượng leader với đặc điểm là chung điểm cuối là B. Khoảng cách giữa các Leader là D2. 

    Mong mọi người giúp em sửa lại ạ. 

     

    (defun c:lea ()
    (setq b1 (getpoint "\nChon diem dau cua leader"))
    (setq b2 (getpoint b1 "\nChon diem cuoi cua leader"))
    (setq d1 (distance b1 b2))
    (setq e1 (getpoint "\nChon diem dau khoang cach chia"))
    (setq e2 (getpoint "\nChon diem cuoi khoang cach chia"))
    (setq d2 (distance e1 e2))
    (setq nn (fix (/ d1 d2)))
    (setq g (angle b1 b2))
     
    (repeat nn
                        (command "leader" b1 b2 "" "" "n")
                         (setq b1 (polar b1 g d2))
    )
    (princ))
     

     

     


  13. Có rất nhiều cách để thực hiện theo yêu cầu của bạn mà ko cần sự hỗ trợ của lisp  chứ nhỉ. Mình đa số dùng cách này.

    1. Chọn nhiều đối tượng bằng cách sử dụng lệnh "Fi" ... Dựa và lệnh này, bạn lọc ra được loại đường cần thay đổi Scale nét .

     

    2. Nếu bạn đa số vẽ trên Model và in trên Layout thì nên chỉnh thông số qua hộp thoại "Line Type". Gõ lệnh LineType là ra. Chỉnh thông số Global Scale Factor , cho giá trị 5. bạn in ra thì tất cả các nét thuộc loại nào đều in ra ngon lành hết :)


  14. Nếu lệnh DRA và DDi của bạn đo đường thẳng thì được , mà lại ko đo được đường tròn, cung ARC thì có lẽ bạn đã đổi tên lệnh phải không.

     

    Cách giải quyết: 1. cài lại cad.

    2. Bạn dùng cad đời nào thì xin thằng bạn bên cạnh cái bảng lệnh gốc ban đầu lúc chưa đổi lệnh.

     Còn cách thức đổi lệnh như thế nào thì vào menu "Tools" ---> "Customise" ---> "edit program parametter" . Paste lại mã lênh vào, khởi động lại cad là được.


  15. Chuẩn đoán lỗi của bạn có thể do đơn vị giữa 2 bản vẽ của bạn là khác nhau.

    Bạn gõ lệnh UN. Chuyển đổi đơn vị bản vẽ về cùng đơn vị.  Tốt nhất là nên để "mm". Sau đó thì cứ copy bình thường thôi.

     

    Còn nếu cùng đơn vị bản vẽ rồi,  mà copy hình lại nhỏ xíu. THì phải hỏi xem tỷ lệ thực 1:1 của bạn là cái gì. Cái này rắc rối. bạn tìm hiểu thêm ở diễn đàn.


  16. khi e vẽ 1 đoạn thẳng với kích thước  đúng bằng kích thước e đã đo được trong bản vẽ này thì thì nó lại dài gấp mấy lần đoạn trong bản vẽ gốc. 

    Nhờ các bác xem giúp e bản vẽ này người ta vẽ tỷ lệ gì, Cảm ơn mọi người đã đọc.

     

    https://drive.google.com/open?id=0B3vIkcB2lDV8OHhXb0pLZ1g3YjQ

    Chuyển về cad phiên bản nào thấp thấp tý bác ơi. Cad 2012 ko mở được :(

×