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

phamthanhbinh

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

    5864
  • Đã tham gia

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

  • Ngày trúng

    184

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


  1. Chào các bạn, mình đang cần làm 1 cái lisp có tính năng là chọn 1 đối tượng, sau đó lisp sẽ chọn tất cả các đối tượng mà có cùng layer như đối tượng được chọn, sau đó tự động chuyển thành 1 layer mới mà mình định sẵn và đã có sẵn ở trong bản vẽ. Mình có mày mò, xem các bài viết trên diễn đàn nhưng không tìm thấy. Mình cũng biết lệnh LAYMRG, nhưng vì 1 vài lý do nên các bạn có thể giúp mình làm lisp như mình trình bày ở trên không ạ.

    Mình có xem qua các bài viết, xong viết 1 cái như thế này nhưng không chạy được ạ :)

    (defun c:qqq1 (/ targent)

      (setq TargEnt (car (entsel "\nSelect object on layer to select: ")))

      (Setq chuyen (sssetfirst nil (ssget "_X" (list (assoc 8 (entget TargEnt)))))

      (command "chprop" chuyen "" "la" "Hidden"  "")

      (princ)

    Mong các bạn giúp đỡ :)

    Hề hề hề,

    1/- Lisp của bạn không chạy vì có lỗi cơ bản như sau:

    - Hàm (sssetfirst .....) chỉ trả về hiển thị trên màn hình chứ không trả về biến trong lisp.

    - code thiếu hai ngoặc đóng

    2/ Để sửa lại bạn có thể làm như sau:

    - Xóa các ký tự sau :  (sssetfirst nil 

    - Thêm một dấu ngoặc đóng vào cuối code , dưới dòng (princ)

    3/- Bạn có thể test chức năng của hàm (sssetfirst ... ) bằng cách :

    - Thêm dòng code sau

    (sssetfirst nil chuyen)

    vào dươi dòng code

    (setq chuyen (ssget "_x" (list (assoc 8 (entget targent)))))

    - Thêm vái dấu ;;; vào trước dòng code (command ......)

     

    Sau đó load lại lisp và chạy lệnh qqq1 để thấy kết quả. Từ đó sẽ ngộ ra cái chưa đúng của bạn.


  2. P/s: Nội dung em có thay đổi, nhưng tiêu đề thì không sửa được.

    Em có lục lọi lại các bài thì thấy có 1 lisp do Anh #Nguyen Hoanh viết.

    Nội dung lisp sẽ nhận 2 text có chiều cao khác nhau ở gần nhau sẽ nhận làm 2 thuộc tính cho 1 đối tượng (tên điểm - cao độ).

    Cũng khá ấn tượng và e thấy lisp làm được nhiều điều hơn em nghĩ.

    Nên em muốn hỏi và cũng là nhờ các Anh xem lisp có thể làm điều thần kỳ giống như trên không ạ.

    Nội dung: đưa các đường thẳng song song (//) cách nhau một khoảng cho trước về Layer hiện hành.

    Tường minh ra thì:

    1. lisp hỏi: khoảng cách giữa 2 đường thẳng song song (//): điền giá trị khoảng dưới A, khoảng trên B.

    2. quét vùng muốn lựa chọn (Select object.).

    3. trong cặp đường thẳng song song (//) thỏa mãn điều kiện 1 thì lựa chọn đường thẳng có chiều dài ngắn hơn, và gán nó về Layer đang Current 

    4. Hình minh họa.

    FILE DWG

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

    ẢNH ĐỘNG

    https://goo.gl/photos/A2GwuRC7K2hubSbv8

    Nếu chưa thực sự tường minh thì nhờ mọi người chỉ bảo.

    Cảm ơn tất cả mọi người.

     

    Trân trọng!

    Hề hề hề,

    Đề bài chưa tường minh.

    Các đoạn thẳng (chứ không phải đường thẳng) của bạn là LINE hay LWPOLYLINE hay POLYLINE  hay tất cả ???

    Trường hợp có tới 3 hay 4 hay nhiều hơn các d9o5a5n thẳng // liền nhau với cùng khoảng cách giữa chúng thì chọn cái nào ???

    Các đoạn thẳng tuy // và có khoảng cách phù hợp với điều kiện chọn nhưng ở rời rạc mà không kế cận nhau thì sao ???

    • Vote tăng 1

  3. Em cũng xin được góp ý ạ: Nếu diễn đàn có thể mở 1 mục dành riêng cho việc viết Lisp tính phí thì khá tuyệt , nhưng em muốn những lisp đơn giản , không tốn nhiều thời gian thì mấy bác nhiều kinh nghiệm nhương cho những người trẻ cho tụi em viết, để rèn luyện thôi ạ.  Số tiền kiếm được thì em mong muốn ban quản trị của diễn đàn ủng hộ những em nhỏ, gia đình nghèo khó, vùng sâu vùng xa....

    Có được điều đó thì em thấy diễn đàn thực sự có ý nghĩa trong việc giúp đỡ mọi người ạ. :)

    Hề hề hề,

    Sáng kiến, sáng kiến, sáng kiến hay. Đề nghị ban quản trị nghiên cứu và sớm cho quyết định....

    • Vote tăng 1

  4. Vâng em cũng ủng hô ý kiến viết lisp tính tiền ạ. Đôi lúc anh em viết lisp hoặc sửa lisp vì đam mê không vụ lợi, nhưng nhiều cái lisp viết để đáp ứng được công việc của người yêu cầu đôi lúc rất tốn TIME.

    Hề hề hề,

    Quan điểm cá nhân tôi thì tiền là quá tốt và cũng hợp lý nếu như nó xuất phát từ nhu cầu thực tế của người dùng và người viết. Tuy nhiên đây là một diễn đàn mở nên mọi người tham gia đều cần tôn trọng quy định chung của diễn đàn. Hiện diễn đàn chưa có quy định cụ thể về vấn đề này nên thiết nghĩ các thành viên nếu có nhu cầu này thì nên trao đổi riêng sẽ tốt hơn và có lẽ sẽ hiệu quả hơn chăng. 

    Chừng nào diễn đàn có quy định cụ thể về vấn đề này thì ta cùng thực hiện. Như thế không khí chung của diễn đàn sẽ tốt hơn.

    Đây chỉ là ý kiến cá nhân và rất mong mọi người thể tất nếu nó chưa đúng với suy nghĩ của mỗi người.

    • Vote tăng 1

  5. Hic, mình đang cần gấp, vấn đề nghiêm túc mà. Trùm là sao vậy bạn? 

    Hề hề hề,

    Nếu bạn cần nghiêm túc thì hãy gửi bản vẽ và mô tả yêu cầu để mọi người có thể giúp bạn .... tiêu tiền. Còn nếu muốn đánh quả thì phải liên hệ cá nhân chớ tung lên diễn đàn e ..... phạm quy đó.


  6. em có bản vẽ máy phay nhưng các ký hiệu như H7/g6 hay các ký tự khác em không hiều, hay cùng lắp hở nhưng ký hiệu laij khác nhau.

    nhờ mây bác tư vấn nhiệt tình dùm em 

    Hề hề hề,

    Cái bản vẽ này cũng nhiều chữ ra phết đấy. Việc đọc nó không quá khó nhưng cũng không dễ chút nào. Muốn đọc nó bạn cần có các khái niệm cơ bản về bản vẽ lắp, về dung sai và lắp ghép. Đồng thời phải hiểu về nguyên lý hoạt động của cái máy phay này mới được.

    Dòm sơ sơ thì thấy những cái bạn chưa hiểu như sau:

    H7/g6 là ký hiệu cho mối lắp ghép có kich thước trục được lấy theo miền dung sai g6 còn kích thước lỗ được lấy theo miền dung sai H7.

    Cùng là lắp hở (hay lỏng) nhưng có thể có nhiều kiểu lắp khác nhau. Tỷ như ngày xưa gọi là L1, L2 ,....L...., Và do đó nó có thể có các miền dung sai khác nhau là chuyện thường ngày ở ..... làng cơ khí.

    Việc tư vấn nhiệt tình không thiếu mà là chả biết nên tư hay vấn cái chi.... Vấn vài điếu thuốc thì ngày nào chả có .

    Hề hề hề, chúc bạn vui.


  7. https://drive.google.com/open?id=0B7WLtwQdb47vRkpta0ZhYWcxVm8 Mình mới thiết kế kệ siêu thị, mong mọi người nhận xét giùm mình nhé, đặc biệt là những ai từng thiết kế. Cảm ơn mọi người nhiều

    Hề hề hề,

    Kệ cho siêu thị thường phải có tính linh động cao để có thể trưng bày nhiều chủng loại hàng hóa có kích thước không giống nhau. Do vậy nếu chỉ có mo65tca61u trúc duy nhất sẽ không thuận tiện.


  8. http://www.mediafire.com/file/1o99rqj2z5ufdjp/align+All_ala.lsp

     

    Đây là lisp align tất cả các đối tượng, nhưng nó đang bị hạn chế là chỉ chọn được từng đối tượng một, các bác giúp em thêm tính tăng chọn theo kiểu gom một lúc nhiều đối tượng nhé.

     

    Trân trọng!

    Hề hề hề,

    Không hiểu ý bạn hỏi???? Lisp này đã cho phép chọn các đối tượng cần săp xêp theo cả lố rồi cơ mà. Lisp sử dụng hàm ssget để tạo bộ chọn là tương đối toàn diện hết rồi. Không biết bạn định chọn kiểu chi nữa????

    • Vote tăng 1

  9. Bác Bình ơi sau khi xoay các text của mình bị lộn ngược thế này, bác có thể sửa lại dùm được ko, Lisp này có thêm tính năng như chọn được nhiều Text sau đó chọn được nhiều line và xoay song song theo Line đó nữa thì hay, cảm ơn bác

    http://www.cadviet.com/upfiles/6/154521_xoay_text.dwg

    Hề hề hề,

    Đơn giản nhất là bạn tạo lại polyline theo hướng ngược lại với hướng của polyline ban đầu là OK. Vì hướng xoay của text phụ thuộc vào hướng của polyline và không rõ các polyline  và các text của bạn ra sao nên khó có thể sửa theo ý bạn được.

    • Vote tăng 1

  10. Chào mọi người

    Mong mọi người có thể giúp mình viết lisp với những yêu cầu như thế này được không.

    Mình có trắc ngang như trên

    Ví dụ tên lệnh : tt

    Sau khi gõ tên thì sẽ hiện ra câu hỏi

    1.    bạn có muốn thay đổi tùy chỉnh đã cài đặt sẵn (Y,N)- mặc định N

    Nếu chọn Y thì sẽ hiện ra câu hỏi tiếp theo: còn N thì sẽ lấy những cài đặt mặc định bên dưới và chuyển sang bước 2

    +          Chọn vị trí để điền text cao độ- ví dụ ngay điểm (3)- cách điểm dưới cùng của đoạn thẳng được chọn 1 khoảng cách bao nhiêu đó (do mình nhập- nếu enter bỏ qua thì mặc định 20)

    +          Chọn vị trí để điền text khoảng cách điểm đo – ví dụ điểm (4) - cách điểm dưới cùng của đoạn thẳng được chọn 1 khoảng cách bao nhiêu đó (do mình nhập- nếu enter bỏ qua thì  mặc định 40) và nó sẽ nằm giữa 2 text cao độ ở bên trên

    +          Bạn có muốn thay đổi chiều cao Text (Y/N) - nếu enter bỏ qua thì mặc định 5

    +          Chọn góc xoay của text  chiều dài - nếu enter bỏ qua thì mặc định 90 độ thẳng đứng như trên

    +          Chọn góc xoay của text khoảng cách - nếu enter bỏ qua thì mặc định 90 độ thẳng đứng như trên

    2.    hiện gợi ý tiếp: hãy chọn các đoạn cần đo:

    và mình sẽ chọn 5 đoạn trên đó. (áp dụng cho LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLI

    3.    sau đó enter kết thúc lệnh và các số màu xanh bên trên sẽ hiện ra

    + trường hợp chọn >=2 đoạn thì sẽ xuất kết quả tương tự như trên

    + còn chỉ chọn 1 đoạn rồi kết thúc lệnh thì chỉ xuất con số (3)- không cần khoảng cách

    số (3) là chiều dài của đoạn thẳng (1)

    số (4) là khoảng cách giữa đoạn thẳng (1) và (2)

    tỷ lệ tính toán sẽ dựa theo tỷ lệ đang chọn.

    Nếu có thể mình xin thêm 1 trường hợp chiều đứng (ở trên theo chiều ngang)

    mong được sự giúp đỡ từ mọi người. để mình có thể làm nhanh công việc và thuận tiện cho việc xuất kết quả qua excel. (mình không rành về autolisp nên nếu có thể mong có thêm chú thích ở mỗi dòng lệnh để mình có thể tìm hiểu thêm)

    mấy con số mặc định mình cho đại, còn bao nhiêu mình xem lisp nếu hiểu mình sẽ sửa lại ch phù hợp.

    bản vẽ và nội dung mình muốn có trong file đính kèm

    http://www.cadviet.com/upfiles/6/152650_drawing1.dwghttp://www.cadviet.com/upfiles/6/152650_viet_lenh_autolisp.doc

    Hề hề hề,

    cái tỷ lệ mà bạn đang chọn là tỷ lệ nào vậy???? Nếu căn cứ theo bản vẽ bạn gửi thì có vẻ như tỷ lệ theo trục x khác với tỷ lệ theo trục y??? Khó quá.


  11. Chào các bác !!!

    Nhờ các bác viết dùm em cái Lisp: Dim khoảng cách giữa đỉnh liên tiếp trên pline (Pline bao gồm cả cung tròn)

    Nội dung và trình tự của Lisp:

    Bước 1: Chọn Pline.

    Bước 2: Chọn khoảng cách từ dim tới Pline

    Bước 3: Dim khoảng cách giữa các đỉnh liên tiếp trên pline (Pline bao gồm cả cung tròn). Dim thuộc dimstyle hiện hành và layer hiện hành. Chi tiết các bác xem thêm trong file cad em gửi kèm.

    Cảm ơn các bác đã quan tâm

    http://www.cadviet.com/upfiles/6/121521_viet_lisp_1.dwg

    Hề hề hề,

    Bạn dùng thử cái này, viết đã lâu và có sẵn trên diễn đàn mà bạn lười tìm kiếm . Mong bạn lần sau tìm kiếm kỹ trước khi post yêu cầu.

    http://www.cadviet.com/upfiles/6/5194_dimarclength.lsp

     

     

    (defun darl (/ e1 e2 ra an alen)
    ;;
    (command "dimradius" pause "")
    (setq e1 (entlast))
    (command "dimangular" pause (getpoint "\n Chon diem dat ") )
    (setq e2 (entlast))
    (setq Ra (cdr (assoc 42 (entget e1))))
    (setq an (cdr (assoc 42 (setq el (entget e2)))))
    (setq alen (* ra an))
    (entmod (subst (cons 1 (rtos alen 2 2)) (assoc 1 el) el))
    (command "erase" e1 "")
    )
    ;;;;;;;;;;;;;;;;;;;
    (defun c:dimpo (/ e verl els bulst k i p1 p2 )
    (vl-load-com)
    (setq e (car (entsel "\n Chon duong can do ")))
    (setq verl (acet-geom-vertex-list e)
              els (entget e)
              bulst (list)
              k 0  )
    (command "undo" "be")
    (foreach en els
             (if (= (car en) 42)
                 (setq bulst (append bulst (list (list (nth k verl) (cdr en))))  k (1+ k) )
             )         
    )
    (foreach bul bulst
          (setq i (vl-position bul bulst)
                   p1 (nth i verl)
                   p2 (nth (1+ i) verl)  )
                      
          (if (and p1 p2)
              (progn
                      (alert (strcat "\n Ban dang do phan doan thu " (rtos (1+ i) 2 0)))
                      (if (= (cadr bul) 0)  
                           (command "dimaligned" p1 p2 (getpoint "\n Chon diem dat "))
                           (darl)
                      )
              )
          )
                 
    )
    (command "undo" "e")
    )
    
    • Vote tăng 1

  12. Cảm ơn bác đã hồi âm, em muốn text đích là attribute. Mong bác ra tay giúp đỡ. Cảm ơn bác và anh em cộng đồng cadviet nhiều.

    Hề hề hề,

    Bạn dùng thủ cái này coi sao. Mình sửa lại một chút để có thể cả text nguồn và đích đều là các thuộc tính.

     

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/165503-nho-chinh-sua-lisp-replac-text/
    ;=========================================================================
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=18049
    (defun copy-add-text-content (mode / err oer sta res sel mtx dim chc chg
         hig sor rdw dec temp a b 
         sou data)
    ;;;; 
      (defun err(s)
        (if (and (/= s "Function cancelled")(/= s "quit / exit abort"))
          (princ (strcat "\n--->> Error: " s))
          )
        (res)
        )
    ;;;;; 
      (defun res()
        (if hig (setvar "HighLight" hig))
        (if sor (setvar "Sortents" sor))
        (if pst (setvar "Pickstyle" pst))
        (if rdw (chc 0))
        (command "_.Undo" "_End")
        (setq *error* oer)
        (setvar "Cmdecho" 1)
        (princ)
        )
    ;;;;; 
      (defun sta()
        (setq oer *error*
     *error* err
     hig (getvar "HighLight")
     sor (getvar "Sortents")
     pst (getvar "Pickstyle")
     dec (getvar "Dimdec")
     )
        (setvar "Cmdecho" 0)
        (command "_.Undo" "_Group")
        (setvar "HighLight" 1)
        (setvar "Sortents" 1)
        (setvar "Pickstyle" 0)
        (graphscr)
        )
    ;;;;; 
      (defun sel (/ loop lis typ intro)
        (if (null del-mode)(setq del-mode "0"))
        (if (null mat-mode)(setq mat-mode "0"))
        (setq loop T
     lis '("TEXT" "MTEXT" "DIMENSION" "ARCALIGNEDTEXT")
     )
        (if (= mode 0)
          (setq intro "\nSelect copy source text ")
          (setq intro "\nSelect additon source text ")
          )
        (while loop
          (initget "Exit Delete Match MD DM")
          ;(setq del T);;;
          (setq sou (nentsel (strcat intro "[Delete source("del-mode")/Match properties("mat-mode")]: ")))
          (cond
    ((= sou "Exit")(exit))
    ((null sou)(exit))
    ((= sou "Delete")
    (if (= del-mode "0")
      (setq del-mode "1")
      (setq del-mode "0")
      )
    )
    ((= sou "Match")
     (if (= mat-mode "0")
      (setq mat-mode "1")
      (setq mat-mode "0")
      )
     )
    ((or (= sou "MD")(= sou "DM"))
     (progn
       (if (= del-mode "0")
         (setq del-mode "1")
         (setq del-mode "0")
         )
       (if (= mat-mode "0")
         (setq mat-mode "1")
         (setq mat-mode "0")
         )
       )
     )
    ((progn
      (setq data (entget (car sou))
    typ (cdr (assoc 0 data))
    )
      (if (not (member typ lis))
        (princ "Invalid selection.")
        (progn
          (setq temp (assoc 1 data)
        loop nil
        )
          (cond
    ((= typ "MTEXT")(mtx))
    ((= typ "DIMENSION")(dim))
    )
          )
        ); if end
      ))
    ); cond end
          )
        (chc 1)
        (setq rdw T)
        )
    ;;;;; 
      (defun mtx(/ con test)
        (setq con (cdr temp)
     test (substr con 1 1)
     )
        (if (= test "\\")(setq temp (cons 1 (substr con 5))))
        )
    ;;;;; 
      (defun dim(/ con)
        (setq con (cdr temp))
        (if (or (= con "")(= con "<>"))
          (setq temp (cons 1 (rtos (cdr (assoc 42 data)) 2 dec)))
          )
        )
    ;;;;; 
      (defun chc(mode / col)
        (cond
          ((and (= del-mode "1") (= mat-mode "0"))(setq col "230"))
          ((and (= del-mode "0") (= mat-mode "1"))(setq col "110"))
          ((and (= del-mode "1") (= mat-mode "1"))(setq col "30"))
          ((setq col "140"))
          )
        (if (= mode 0)
          (progn
    (command "_.Chprop" sou "" "_Color" "BYLAYER" "")
    (redraw (car sou) 4)
    )
          (progn
    (command "_.Chprop" sou "" "_Color" col "")
    (redraw (car sou) 3)
    )
          )
        )
    ;;;;; 
      (defun chg(/ ss inc data-)
        (if (= mode 0)
          (princ "\nSelect destiantion texts to change: ")
          (princ "\nSelect destiantion texts to add: ")
          )
        (setq ss (ssget '((-4 . "<OR")
         (0 . "TEXT")(0 . "MTEXT")(0 . "DIMENSION")(0 . "ARCALIGNEDTEXT")(0 . "INSERT")
         (-4 . "OR>")
         )))
        (if (null ss)(exit))
        (setq inc 0)
        (repeat (sslength ss)
          (setq data- (entget (ssname ss inc))
       inc (1+ inc))
           (setq a (ssname ss (1- inc)))
          (if (= (cdr (assoc 0 data-)) "INSERT")
              (progn
                    
                     (alert "\n Doi tuong chon là block.")
                     (setq b (ssadd a))
                     (sssetfirst ss b)
                     (setq data- (entget (car (nentsel "\n  Ban hay pick lai thuoc tinh can thay doi"))))
               )
           )
          (if (= mode 1)
    (setq temp (cons 1 (strcat (cdr (assoc 1 data-)) "x" (cdr temp))))
    )
          (entmod (subst temp (assoc 1 data-) data-))
          (entupd a)
          )
        (if (= mat-mode "1")
          (progn
    (if rdw (chc 0))
    (command "_.MatchProp" sou ss "")
    )
          )
        (if (= del-mode "1")
          (progn
    (entdel (car sou))
    (setq rdw nil)
    )
          )
        )
    ;;;;; 
      (sta)
      (sel)
      (chg)
      (res)
      )
     
    (defun c:TC()(copy-add-text-content 0))
    (defun c:TD()(copy-add-text-content 1))
    (princ)
    
    • Vote tăng 1

  13. Hề hề, chắc các bác dạo này bận nên là chưa xem ngó qua được cái lisp cho em, hoặc lời văn của em tối nghĩa nên các bác chưa hiểu rõ yêu cầu, hì, em xin nói lại yêu cầu trợ giúp là: các bác có thể giúp em làm cho lisp có thể replace text của block att, yêu cầu của em nếu quá đáng thì các bác bỏ qua cho. Chúc các bác luôn mạnh khỏe, có nhiều cống hiến cho ngành kỹ thuật.

    Hề hề hề,

    Bạn đặt vấn đề không rõ ràng nên khó có kết quả. Bạn muốn text nguồn là attribute hay text đich là attribute???? Hay là cả nguồn và đích đều là attribute.???

    • Vote tăng 1

  14. Cám ơn bác ạ, đúng ý em rồi!

    Hề hề hề,

    Bạn có thể dùng cái này. Nó khác với cái của bạn tien2005 ở chỗ nó vẽ lần lượt từng đoạn khi bạn nhập số liệu rồi mới jonit, còn của bạn tien2005 thì nhập hết số liệu và nó vẽ một lần. Tùy bạn chọn lựa nhé.

     

    http://www.cadviet.com/upfiles/6/5194_veduongtimthucte_1.lsp

     

     

    (Defun c:vpl (/ p0 x0 y0 p1 x y p2 lst)
    (setq p0 (getpoint "\n Chon diem tim tuyen")
             x0 (car p0)
             y0 (cadr p0) 
             p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
    (while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
            (setq p2 (list (+ x0 x) (+ y0 y)))
            (command "pline" p1 p2 "")
            (setq lst (cons (entlast) lst))
            (setq p1 p2)
    )
    (command "pedit" (entlast) "j" (acet-list-to-ss lst) "" "")
    )
    
    • Vote tăng 1

  15. bác nói đúng, thừa rồi ạ ^^ Bác Bình giúp em với được không ạ!

    Hề hề hề,

    Bạn thử cái này coi đúng ý chưa nhé. Lưu ý khi nhập DeltaX và DeltaY có thể nhập số âm thoe đúng giá trị tương đối với điểm gốc.

     

    http://www.cadviet.com/upfiles/6/5194_veduongtimthucte.lsp

     

    (Defun c:vpl (/ p0 x0 y0 p1 x y p2)
    (setq p0 (getpoint "\n Chon diem tim tuyen")
             x0 (car p0)
             y0 (cadr p0) 
             p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
    (while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
            (setq p2 (list (+ x0 x) (+ y0 y)))
            (command "pline" p1 p2 "")
            (setq p1 p2)
    )
    )
    

  16. Hiện tại em đang phải vẽ lại mặt cắt ngang của tuyến dựa trên số liệu đo đạc thực tế, tuy nhiên số liệu đo đạc lại được ghi lại theo tọa độ tương đối với tim đường, tức là mỗi điểm đo đều có các tọa độ gồm : khoảng cách (ngang) tới tim, và chênh cao so với cao độ tim tuyến. Em muốn nhờ các bác viết giùm em lisp với nội dung như sau ạ:

    - Chọn điểm gốc (chính là vị trí tim tuyến tại mặt cắt ngang)

    - Chọn text cao độ điểm gốc

    - Nhập khoảng cách (ngang) điểm 1 tới điểm gốc (Nhập Delta X1)

    - Nhập chênh cao điểm 1 với điểm gốc (Nhập Delta Y1)

    - Tiếp tục nhập Delta X và Delta Y của các điểm tiếp theo đến khi Enter để kết thúc lệnh, khi đó Lisp sẽ vẽ ra một đương polyline bắt đầu từ điểm gốc được chọn rồi lần lượt đi qua các điểm vừa nhập tọa đô, nhập xong tọa độ điểm nào thì vẽ luôn PL đến điểm đấy.

    Đây là file mẫu ạ : http://www.cadviet.com/upfiles/6/148247_up.dwg

    Lần đầu viết bài có gì sai sót mong mọi người chỉ bảo thêm  ạ!

    Hề hề hề,

    Chưa hiểu cái việc chọn text cao độ điểm gốc của bạn phục vụ mục tiêu gì ????


  17. Hề hề hề,

    Thực ra bài toán khó nhất ở đây là dựng được các đường đồng mức dựa trên các điểm đã có. Nguyên tắc dựng các đường này ra sao , do mình không phải dân trắc địa , giao thông hay bản d962 gì đó nên chưa hiểu. Ai đó có thể giải thích điều này không???


  18. tk bác, e cũng rất rành topo và no va, n nhiều lúc nó ha bị lối, topo nội suy sai, có n lúc làm bên thi công người ta soi từng điểm nên cũng vất vả lắm bác

    Hề hề hề,

    Lisp chỉ là công cụ để thực hiện việc nội suy. Còn nguyên tắc nội suy thì bạn phải lựa chọn. Để có lisp phù hợp bạn cần nêu ra nguyên tắc nội suy mà bạn cần dùng, từ đó người làm lisp mới viết được chứ. Bạn cũng hiểu là có nhiều nguyên tăc nội suy khác nhau và cho các kết quả với độ chính xác khác nhau. Do đó nếu người làm lisp tự bịa ra một nguyên tắc nội suy nào đó có thể sẽ không phù hợp với điều bạn cần. Bạn hãy lưu ý điều này.


  19. Em dùng lệnh Sweep khi đường dẫn là một đường xiên trong không gian thì nó không nhận, khi kích vào đường dẫn đó thì nó tạo một hình khối với đường dẫn khác là hình chiều của nó.

    Có anh nào biết vấn đề này chỉ giáo em với? (EM CÓ ĐÍNH KÈM FILE MINH HỌA)http://www.cadviet.com/upfiles/6/154574_file_minh_hOa.dwg

    Cảm ơn nhiều nhiều!!!!!!!!!!!!

    Hề hề hề,

    Theo mình hiểu thì lện sweep yêu cầu profile phải vuông góc với đường dẫn.. Bạn hãy tạo lại profile cho hợp lý là OK.


  20. Gõ lệnh C1. Đổi màu layer.

    Mình làm 1 ví dụ thôi.

    Bạn xem có đúng ý bạn ko? Và điều nữa là bạn định đổi riêng "Layer" ,riêng  "màu" hay là muốn gộp luôn cả "Layer"+ "Màu"?http://www.cadviet.com/upfiles/6/124641_c1.lsp

    Hề hề hề,

    Hay, có thêm dòng code để nhập tên layer hay tên màu mà người dùng muốn sử dụng. Chủ thớt có thể ghép thêm vô cái lisp của mình.

    • Vote tăng 1

  21. Em có sưu tầm được 2 cái lisp thay đổi layer và đổi màu cho đối tượng như thế này. Nhưng nhược điểm là phải chọn hết các đối tượng rồi mới đổi được. Bây giờ em muốn sửa lại theo ý mình là pick đến đâu thay đổi đến đó (giống lệnh MA ý ạ) nhưng chưa biết làm thế nào nên đánh bạo lên đây nhờ các bác ạ!

    http://www.cadviet.com/upfiles/6/154272_cl_3.lsp

    http://www.cadviet.com/upfiles/6/154272_c1_chuyen_mau_doi_tuong_1.lsp

    Cám ơn các bác đã bỏ chút thời gian xem bài!

    Hề hề hề,

    Không biết ý bạn có phải thế này không???

    Lưu ý là biến tên màu và tên layer bạn phải nhập cho phù hợp với yêu cầu của bạn.

    (defun c:cla ()
    (while (setq e (car (entsel)))
           (command "change" e "" "p" "la" ten layer "" )
    )
    )
    (defun c:ccl ()
    (while (setq e (car(entsel)))
             (command "change" e "" "p" "c" ten mau "" )
    )
    )
    
    
    • Vote tăng 1
×