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

tung89gt

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

    13
  • Đã tham gia

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

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


  1.  

    17 giờ trước, Hoanghung97 đã nói:

    b đặt (command "_.vplayer" "n" "tenlayer" "") trước các dòng (command......) trong lisp trên là được

    (DEFUN C:tla() 
    (setvar "cmdecho" 0)
     (command "_.vplayer" "n" "tenlayer" "")
     (command "_.vplayer" "n" "1. TIM" "")

     (COMMAND "LAYER" "M" "1. TIM" "C" "1" "" "L" "DASHDOT" "" "");
     (COMMAND "LAYER" "M" "2. KHUAT" "C" "8" "" "L" "HIDDEN" "" "")
     (COMMAND "LAYER" "M" "3. Text" "C" "255" "" "")
     (COMMAND "LAYER" "M" "4. Ghichu" "C" "2" "" "")
     (COMMAND "LAYER" "M" "5. Ghichu2" "C" "4" "" "")
     (COMMAND "LAYER" "M" "0000" "C" "4" "" "")
     (COMMAND "LAYER" "M" "6. dim" "C" "9" "" "")
     (COMMAND "LAYER" "M" "7. thep" "C" "1" "" "")
     (COMMAND "LAYER" "M" "8. dai" "C" "6" "" "")
     (COMMAND "LAYER" "M" "9. Dien tich trac ngang" "C" "2" "" "")
     (COMMAND "LAYER" "M" "10. hatch" "C" "8" "" "")
     (COMMAND "LAYER" "M" "11. Bao chinh" "C" "4" "" "")
     (COMMAND "LAYER" "M" "Nhap" "C" "4" "" "")
     (COMMAND "LAYER" "M" "Khung in" "C" "4" "" "")
     (COMMAND "LAYER" "M" "12. Net chinh" "C" "6" "" "")
     (setvar "cmdecho" 1)
    )
     

    Mình Cảm ơn bạn nhiều nha! 


  2. Vào lúc 11/9/2022 tại 08:08, vietduc147258 đã nói:

    Lỗi do bạn đặt tên:

    lúc đầu là : HVC - VIN - E - 005 (có khoảng cách giữa số và dấu -)

    sau là: E-01 (Viết liền không có khoảng cách)

    Bạn viết có cách ra là được.

    Tiện thể cho em hỏi các bác là nếu ATT chỉ đơn thuần là 01,02,03... thôi thì thể sửa lisp ở chỗ nào để xuất được không?

    image.thumb.png.3b8f0f128f01571be2bec7e94ccb76c6.png

    Bạn cho mình hỏi thêm chút là : khi mình tạo block ATT mình có tích vào ô Multiple lines như trên hình thì lisp không thể xuất ra được text trong bản danh mục. Có thể sửa lại để có thể xuất được ra danh mục khi mình tích vào ô multiple lines được không bạn?


  3. 1 giờ} trướ}c, NTHAHT đã nói:

    Bạn thử chạy trường hợp lọc mline Layer hoặc Style xem sao.

    Em đã chạy thử trường hợp lọc theo layer và style thì thấy đều báo lỗi. nhưng nhu cầu hiện tại thì em chỉ chủ yếu dùng lọc theo scale thôi bác ạ. bác có thể chỉnh thêm giúp em là sau khi ấn lệnh thì lisp sẽ bỏ qua phần lựa chọn thuộc tính đi và chạy thẳng vào phần chọn đối tượng mẫu ( theo scale) xong rồi quét chọn vùng chứa các đối tượng được không bác.


  4. 10 giờ trước, huunhantvxdts đã nói:

    Chỉnh lại cho bạn nhé:

    
    (defun c:LL ( / txt)
    
     (initget "ST LA SA")
     (setq txt (getkword "\nLoc MLINE theo [STyle/LAyer/SAcle] <LA>: "))
     (cond
       ((not txt)
       (setq kieu " thuoc STYLE: <") (setq mdxf 2))
       ((= "ST" txt)
       (setq kieu " thuoc STYLE: <") (setq mdxf 2))
       ((= "LA" txt)
       (setq kieu " thuoc LAYER: <") (setq mdxf 8))
       ((= "SA" txt)
       (setq kieu " co SCALE: <") (setq mdxf 40))
     )
    
    (setq ketqua (cdr (assoc mdxf (entget (car (chonmotmline))))))
    (setq ss (ssget (list (cons 0 "MLINE") (cons -4 "<OR") (cons mdxf ketqua) (cons mdxf (* ketqua -1) ) (cons -4 "OR>"))))
      (setq tot_len 0.0)
      (setq sml (sslength ss))
    
      (while (> (sslength ss) 0)
        (setq e_name (ssname ss 0))
        (setq e_record (entget e_name))
        (setq e_type (cdr (assoc '0 e_record)))
        (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
    	   (command "lengthen" e_name "")
    	   (setq tot_len (+ tot_len (getvar "PERIMETER")))
    	   (ssdel e_name ss)
    	  )
    	  ((wcmatch e_type "MLINE") (add_mline))
    	  (e_type (ssdel e_name ss))
        )
      )
    
      (cond ((= "SA" txt) (setq ketqua (rtos ketqua 2 2)) ))
      (prompt (strcat "\nTim thay: " (itoa sml) " doi tuong MLINE" kieu ketqua "> tong chieu dai=" (rtos tot_len 2 2)))
    
    
    (princ))
    ;;;;;;;;;;;;;;
    (defun chonmotmline ( / dchon)
    (setq dchon (entsel "\nChon Mline chuan:"))
    (while
    (or
    (null (car dchon))
    (and (/= "MLINE" (cdr (assoc 0 (entget (car dchon)))))
    )
    )
    (princ "\nDoi tuong khong phai MLINE. Chon lai !")
    (setq dchon (entsel))
    )
    dchon)
    ;;;;;;;;;;;;;;
    (defun add_mline ()
      (foreach e_record_sub	e_record
        (cond ((= 10 (car e_record_sub))
    	   (setq pt1	   (cdr e_record_sub)
    		 mline_len 0.0
    	   )
    	  )
    	  ((= 11 (car e_record_sub))
    	   (setq pt2	   (cdr e_record_sub)
    		 mline_len (+ mline_len (distance pt2 pt1))
    		 pt1	   pt2
    	   )
    	  )
        )
      )
      (setq tot_len (+ tot_len mline_len))
      (ssdel e_name ss)
    )

     

    Tuyệt vời! Lisp chạy ngon rồi bác ạ, Em cảm ơn bác rất nhiều.


  5. Em chào các bác!

    Em có sưu tập được 1 lisp tính khối lượng mline trên diễn đàn. không nhớ là của bác nào.

    hiện tại em đang vướng mắc một chút là khi sử dụng lisp để tính khối lượng ở lệnh scale thì lisp chỉ quyét được các mline (cùng tỉ lệ scale) chưa lấy đối xứng. nhờ các bác sửa lisp quyét được cả các mline đã bị lấy đối xứng rồi giúp em với!

    Em cảm ơn các bác!

    Drawing1.dwg

    LL.lsp

×