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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

5 phút trước, thanhduan2407 đã nói:

Giống như khi Z<2. lấy X của thằng đầu và Y của thằng Z>2

Đây nhé a:

(defun tachlist (lst / lst1 z x y l1)
  (setq lst1 (list) z 0 )
  (while (setq l1 (car lst))
    (setq lst (cdr lst))
    (if (< (caddr l1) 2.0) (if (= z 0) (setq x (car l1) y (cadr l1) z (caddr l1)) (setq y (cadr l1) z (+ z (caddr l1))))
		(if (= z 0) (Setq lst1 (append lst1 (list l1))) (if (< z 2) (Setq lst1 (append lst1 (list (list x (cadr l1) (+ z (caddr l1)) ))) z 0)
								     (Setq lst1 (append lst1 (list (list x y z) l1)) z 0))) )
    )
  lst1
  )

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
3 giờ trước, thanhduan2407 đã nói:

Giống như khi Z<2. lấy X của thằng đầu và Y của thằng Z>2

Mình viết cho đơn gain 1 chút.

(defun rr(lst / kq x)
  (foreach a lst
    (if (< (last a) 2)
      (setq x (If x (list (car x) (cadr a) (+ (caddr x) (caddr a))) a))
      (setq kq (append kq (if x (list x a) (list a)))
	    x nil)))
  (if x (append kq (list x)) kq))

 

  • Like 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
4 giờ trước, Doan Nguyen Van đã nói:

Đây nhé a:

  • cadvietlisp.lsp
    lisp help
  •  

(defun tachlist (lst / lst1 z x y l1)
  (setq lst1 (list) z 0 )
  (while (setq l1 (car lst))
    (setq lst (cdr lst))
    (if (< (caddr l1) 2.0) (if (= z 0) (setq x (car l1) y (cadr l1) z (caddr l1)) (setq y (cadr l1) z (+ z (caddr l1))))
		(if (= z 0) (Setq lst1 (append lst1 (list l1))) (if (< z 2) (Setq lst1 (append lst1 (list (list x (cadr l1) (+ z (caddr l1)) ))) z 0)
								     (Setq lst1 (append lst1 (list (list x y z) l1)) z 0))) )
    )
  lst1
  )

 

Bác còn 1 lỗi nhỏ là nếu (caddr(last l2)) <2 thì mất luôn giá trị cuối.

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

try this:

 

(defun foo (l / a b c d r)
   (reverse (progn (setq c 0.)
           (while l
              (setq a (car l)
                l (cdr l)
              )
              (cond ((< (caddr a) 2.0)
                 (or b (setq b a))
                 (setq c (+ c (caddr a))
                   d a
                 )
                )
                (t (and    b
                    (setq r    (cons (list (car b) (cadr d) c) r)
                          b    nil
                          d    nil
                          c    0.
                    )
                   )
                   (setq r (cons a r))
                )
              )
           )
           (if (and b d)
              (cons (list (car b) (cadr d) c) r)
              r
           )
        )
   )
)

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhờ các Bác hỗ trợ,  em muốn đổi Justify từng Text. em dùng Entmod mà ko như mong muốn.

(defun AT:Justify ( / Justify)
(setq Justify (cond (Justify) ("Left")))
(initget "Leff  Right TOPLeft TOPRight BOTTOMLeft BOTTOMCenter BOTTOMRight")
(setq Justify (cond ((getkword (strcat "\Ch\U+1ECDn T\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: [Leff/Right/TOPLeft/TOPRight/BOTTOMLeft/BOTTOMCenter/BOTTOMRight]<" Justify ">"))) (Justify)))
 )
(defun c:00 ( / e1 en)
(setq e1 (car(entsel "Ch\U+1ECDn Text c\U+1EA7n \U+0111\U+1ED5i Justify: "))) 
(setq en (entget e1))
(setq Justify (AT:Justify))    ;(princ Justify)
      (if(eq Justify "Leff")(entmod (subst (list (cons 72  0)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "Center")       (progn  (entmod (subst (cons 72  1) (assoc 72 en) en))
;;;                                (entmod (subst (cons 73  0) (assoc 73 en) en)) ) )
      (if(eq Justify "Right")        (entmod (subst (list (cons 72  2)(cons 73  0)) (list(assoc 72 en)(assoc 72 en)) en)))
;;;      (if(eq Justify "Aligned")      (entmod (subst (list (cons 72  3)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))                                       
;;;      (if(eq Justify "Middle")       (entmod (subst (list (cons 72  4)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "Fit")          (entmod (subst (list (cons 72  5)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
     (if(eq Justify "TOPLeft")      (entmod (subst (list (cons 72  0)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "TOPCenter")    (entmod (subst (list (cons 72  1)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "TOPRight")     (entmod (subst (list (cons 72  2)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "MIDDLELeft")   (entmod (subst (list (cons 72  0)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "MIDDLECenter") (entmod (subst (list (cons 72  1)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "MIDDLERight")  (entmod (subst (list (cons 72  2)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMLeft")   (entmod (subst (list (cons 72  0)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMCenter") (entmod (subst (list (cons 72  1)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMRight")  (entmod (subst (list (cons 72  2)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
      )

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, anhGeodesy đã nói:

Nhờ các Bác hỗ trợ,  em muốn đổi Justify từng Text. em dùng Entmod mà ko như mong muốn.


(defun AT:Justify ( / Justify)
(setq Justify (cond (Justify) ("Left")))
(initget "Leff  Right TOPLeft TOPRight BOTTOMLeft BOTTOMCenter BOTTOMRight")
(setq Justify (cond ((getkword (strcat "\Ch\U+1ECDn T\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: [Leff/Right/TOPLeft/TOPRight/BOTTOMLeft/BOTTOMCenter/BOTTOMRight]<" Justify ">"))) (Justify)))
 )
(defun c:00 ( / e1 en)
(setq e1 (car(entsel "Ch\U+1ECDn Text c\U+1EA7n \U+0111\U+1ED5i Justify: "))) 
(setq en (entget e1))
(setq Justify (AT:Justify))    ;(princ Justify)
      (if(eq Justify "Leff")(entmod (subst (list (cons 72  0)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "Center")       (progn  (entmod (subst (cons 72  1) (assoc 72 en) en))
;;                                (entmod (subst (cons 73  0) (assoc 73 en) en)) ) )
      (if(eq Justify "Right")        (entmod (subst (list (cons 72  2)(cons 73  0)) (list(assoc 72 en)(assoc 72 en)) en)))
;;;      (if(eq Justify "Aligned")      (entmod (subst (list (cons 72  3)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))                                       
;;      (if(eq Justify "Middle")       (entmod (subst (list (cons 72  4)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "Fit")          (entmod (subst (list (cons 72  5)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
     (if(eq Justify "TOPLeft")      (entmod (subst (list (cons 72  0)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "TOPCenter")    (entmod (subst (list (cons 72  1)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "TOPRight")     (entmod (subst (list (cons 72  2)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "MIDDLELeft")   (entmod (subst (list (cons 72  0)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "MIDDLECenter") (entmod (subst (list (cons 72  1)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "MIDDLERight")  (entmod (subst (list (cons 72  2)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMLeft")   (entmod (subst (list (cons 72  0)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMCenter") (entmod (subst (list (cons 72  1)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMRight")  (entmod (subst (list (cons 72  2)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
      )

 

Bác xem lại lệnh subst. Nó thay đổi 1 lần 1 giá trị thôi

(entmod (subst ‘(72 . 2) (assoc 72 én) (subst ‘(73 . 0) (assoc 73 én) én)))

 

Tuy nhiên chỉnh sửa nó còn ảnh hưởng assoc 10, 11 nữa nếu không thì text nhảy lung tung nên phải xét nhiều trường hợp khó chịu.

 

Bạn nên sài lệnh CAD có sẵn cho đơn giản JUSTIFYTEXT

 

 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ} trướ}c, anhGeodesy đã nói:

Nhờ các Bác hỗ trợ,  em muốn đổi Justify từng Text. em dùng Entmod mà ko như mong muốn.


(defun AT:Justify ( / Justify)
(setq Justify (cond (Justify) ("Left")))
(initget "Leff  Right TOPLeft TOPRight BOTTOMLeft BOTTOMCenter BOTTOMRight")
(setq Justify (cond ((getkword (strcat "\Ch\U+1ECDn T\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: [Leff/Right/TOPLeft/TOPRight/BOTTOMLeft/BOTTOMCenter/BOTTOMRight]<" Justify ">"))) (Justify)))
 )
(defun c:00 ( / e1 en)
(setq e1 (car(entsel "Ch\U+1ECDn Text c\U+1EA7n \U+0111\U+1ED5i Justify: "))) 
(setq en (entget e1))
(setq Justify (AT:Justify))    ;(princ Justify)
      (if(eq Justify "Leff")(entmod (subst (list (cons 72  0)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "Center")       (progn  (entmod (subst (cons 72  1) (assoc 72 en) en))
;;                                (entmod (subst (cons 73  0) (assoc 73 en) en)) ) )
      (if(eq Justify "Right")        (entmod (subst (list (cons 72  2)(cons 73  0)) (list(assoc 72 en)(assoc 72 en)) en)))
;;;      (if(eq Justify "Aligned")      (entmod (subst (list (cons 72  3)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))                                       
;;      (if(eq Justify "Middle")       (entmod (subst (list (cons 72  4)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "Fit")          (entmod (subst (list (cons 72  5)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
     (if(eq Justify "TOPLeft")      (entmod (subst (list (cons 72  0)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "TOPCenter")    (entmod (subst (list (cons 72  1)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "TOPRight")     (entmod (subst (list (cons 72  2)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en)))
;;;      (if(eq Justify "MIDDLELeft")   (entmod (subst (list (cons 72  0)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "MIDDLECenter") (entmod (subst (list (cons 72  1)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
;;      (if(eq Justify "MIDDLERight")  (entmod (subst (list (cons 72  2)(cons 73  2)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMLeft")   (entmod (subst (list (cons 72  0)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMCenter") (entmod (subst (list (cons 72  1)(cons 73  1)) (list (assoc 72 en)(assoc 73 en)) en)))
      (if(eq Justify "BOTTOMRight")  (entmod (subst (list (cons 72  2)(cons 73  0)) (list (assoc 72 en)(assoc 73 en)) en)))
      )

+ Lỗi ở (subst (list (cons 72  2)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en) ??  Vì hàm Subst chỉ thay thế cho 1 phần tử chứ ko phải list nhiều phần tử.

+ Mà ở mục này bạn nên áp dụng Vlax cho đơn giản : Ví dụ: 

(if(eq Justify "TOPLeft")      (entmod (vla-put-alignment (vlax-ename->vla-object e1) 6)))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
14 giờ trước, Danh Cong đã nói:

+ Lỗi ở (subst (list (cons 72  2)(cons 73  3)) (list (assoc 72 en)(assoc 73 en)) en) ??  Vì hàm Subst chỉ thay thế cho 1 phần tử chứ ko phải list nhiều phần tử.

+ Mà ở mục này bạn nên áp dụng Vlax cho đơn giản : Ví dụ: 

(if(eq Justify "TOPLeft")      (entmod (vla-put-alignment (vlax-ename->vla-object e1) 6)))

 

14 giờ trước, ngokiet đã nói:

Bác xem lại lệnh subst. Nó thay đổi 1 lần 1 giá trị thôi

(entmod (subst ‘(72 . 2) (assoc 72 én) (subst ‘(73 . 0) (assoc 73 én) én)))

 

Tuy nhiên chỉnh sửa nó còn ảnh hưởng assoc 10, 11 nữa nếu không thì text nhảy lung tung nên phải xét nhiều trường hợp khó chịu.

 

Bạn nên sài lệnh CAD có sẵn cho đơn giản JUSTIFYTEXT

 

 

Cảm ơn 2 Bác @ngokiet @Danh Cong  Đã hiểu thêm về hàm entmod. 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
6 giờ trước, anhGeodesy đã nói:

 

Cảm ơn 2 Bác @ngokiet @Danh Cong  Đã hiểu thêm về hàm entmod. 

Hình như bạn hiểu sai lệnh subst mà. :-)

Còn bác @Danh Cong mình không hiểu vla-put-alignment thì trả về T/nil thì entmod cái gì?

 

Còn entmod thì có chiêu khác vui hơn nữa là không cần subst

thừ lệnh này

(entmod (list (cons -1 (car(entsel))) '(72 . 4) '(73 . 0)))

Nó sẽ chuyển text về Middle. Lưu ý Text gốc là left thì nó sẽ chạy về tọa độ '(0 0 0). Vì assoc 11 là '(11 0.0 0.0 0.0)

 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:))) 

24 phút trước, ngokiet đã nói:

Còn bác @Danh Cong mình không hiểu vla-put-alignment thì trả về T/nil thì entmod cái gì?

+ Đúng là không cần phải Entmod gì trong trường hợp này @@.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
6 giờ trước, ngokiet đã nói:

Hình như bạn hiểu sai lệnh subst mà. :-)

Còn bác @Danh Cong mình không hiểu vla-put-alignment thì trả về T/nil thì entmod cái gì?

 

Còn entmod thì có chiêu khác vui hơn nữa là không cần subst

thừ lệnh này

(entmod (list (cons -1 (car(entsel))) '(72 . 4) '(73 . 0)))

Nó sẽ chuyển text về Middle. Lưu ý Text gốc là left thì nó sẽ chạy về tọa độ '(0 0 0). Vì assoc 11 là '(11 0.0 0.0 0.0)

 

Bác @ngokiet @Danh Cong Hình như hàm entmod vẫn khó áp dụng cho bài toán đổi Justify của text.

em viết thế này mong các bác thông não thêm.

(defun TD:JustifyType (ent / dxf71 dxf72 X11)
  (setq dxf10 (cdr (assoc 10 (entget ent))))
  (setq dxf11 (cdr (assoc 11 (entget ent))))
  (setq X11 (car dxf11))
  (setq dxf71 (cdr (assoc 71 (entget ent))))
  (setq dxf72 (cdr (assoc 72 (entget ent))))
  (if (or (and (eq dxf71 0) (eq dxf72 0) (eq X11 0))
      (and (eq dxf71 0) (eq dxf72 3))
      (and (eq dxf71 0) (eq dxf72 5))
      )
;;;    dxf10
;;;    dxf11
    (setq dxf "Dxf10")
    (setq dxf "Dxf11")
  )
)
(defun TD:Text-Base (ent / dxf71 dxf72 X11)
  (setq dxf10 (cdr (assoc 10 (entget ent))))
  (setq dxf11 (cdr (assoc 11 (entget ent))))
  (setq X11 (car dxf11))
  (setq dxf71 (cdr (assoc 71 (entget ent))))
  (setq dxf72 (cdr (assoc 72 (entget ent))))
  (if (or (and (eq dxf71 0) (eq dxf72 0) (eq X11 0))
      (and (eq dxf71 0) (eq dxf72 3))
      (and (eq dxf71 0) (eq dxf72 5))
      )
    dxf10
    dxf11
;;;    (setq dxf "Dxf10")
;;;    (setq dxf "Dxf11")
  )
)
;-----------------------------------------------
(defun c:jt (/ Justify e1 Lst dxf10 dxf11)
(setq    e1
     (car
       (LM:SelectIf
         "\nCh\U+1ECDn Text c\U+1EA7n \U+0111\U+1ED5i Justify: "
         (lambda (x)
           (eq "TEXT"
           (cdr (assoc 0 (entget (car x))))
           )
         )
         entsel
         nil
       )
     )
  )
  (setq Pnt (TD:Text-Base e1))
  (setq dxf (TD:JustifyType e1))
  (setq Lst (entget e1))
  (setq Justify (AT:Justify))
  (princ Justify)
;----------------------------------------------------------------
;Dua dang khac ve dang: Left / Fit / Aligned (3 thang nay su dung: dxf10)
  (if (and (eq Justify "Left")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "L" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "Center")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "C" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "Right")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "R" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "TOPLeft")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TL" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "TOPCenter")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TC" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "TOPRight")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TR" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMLeft")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BL" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMCenter")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BC" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMRight")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BR" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (princ)
)
;[Left/Center/Right/Align/Middle/Fit/TL/TC/TR/ML/MC/MR/BL/BC/BR]
;----------------------------------------------------------------     
(defun AT:Justify (/ *Justify* Justify)
  (initget
    2
    "Left Center Right TOPLeft TOPCenter TOPRight BOTTOMLeft BOTTOMCenter BOTTOMRight"
  )
  (or *Justify* (setq *Justify* "Left"))
  (setq    Justify
     (cond
       ((getkword
          (strcat
        "\nCh\U+1ECDn T\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: [Left / Center / Right  / TOPLeft / TOPCenter / TOPRight / BOTTOMLeft / BOTTOMCenter / BOTTOMRight ] ? <"
        *Justify*
        ">: "
          )
        )
       )
       (*Justify*)
     )
  )
  (if (not Justify)
    (setq Justify *Justify*)
    (setq *Justify* Justify)
  )
)
(defun LM:SelectIf (msg pred func keyw / sel)
  (setq pred (eval pred))
  (while
    (progn
      (setvar 'ERRNO 0)
      (if keyw
    (apply 'initget keyw)
      )
      (setq sel (func msg))
      (cond
    ((= 7 (getvar 'ERRNO))
     (princ
       "\nB\U+1EA1n ch\U+1ECDn sai r\U+1ED3i! H\U+00E3y ch\U+1ECDn l\U+1EA1i."
     )
    )
    ((eq 'STR (type sel))
     nil
    )
    ((vl-consp sel)
     (if (and pred (not (pred sel)))
       (princ "")
     )
    )
      )
    )
  )
  sel
)

 

Chỉnh sửa theo anhGeodesy
Chuyển dạng mã lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
12 giờ trước, anhGeodesy đã nói:

Bác @ngokiet @Danh Cong Hình như hàm entmod vẫn khó áp dụng cho bài toán đổi Justify của text.

em viết thế này mong các bác thông não thêm.


(defun TD:JustifyType (ent / dxf71 dxf72 X11)
  (setq dxf10 (cdr (assoc 10 (entget ent))))
  (setq dxf11 (cdr (assoc 11 (entget ent))))
  (setq X11 (car dxf11))
  (setq dxf71 (cdr (assoc 71 (entget ent))))
  (setq dxf72 (cdr (assoc 72 (entget ent))))
  (if (or (and (eq dxf71 0) (eq dxf72 0) (eq X11 0))
      (and (eq dxf71 0) (eq dxf72 3))
      (and (eq dxf71 0) (eq dxf72 5))
      )
;;;    dxf10
;;    dxf11
    (setq dxf "Dxf10")
    (setq dxf "Dxf11")
  )
)
(defun TD:Text-Base (ent / dxf71 dxf72 X11)
  (setq dxf10 (cdr (assoc 10 (entget ent))))
  (setq dxf11 (cdr (assoc 11 (entget ent))))
  (setq X11 (car dxf11))
  (setq dxf71 (cdr (assoc 71 (entget ent))))
  (setq dxf72 (cdr (assoc 72 (entget ent))))
  (if (or (and (eq dxf71 0) (eq dxf72 0) (eq X11 0))
      (and (eq dxf71 0) (eq dxf72 3))
      (and (eq dxf71 0) (eq dxf72 5))
      )
    dxf10
    dxf11
;;;    (setq dxf "Dxf10")
;;    (setq dxf "Dxf11")
  )
)
;-----------------------------------------------
(defun c:jt (/ Justify e1 Lst dxf10 dxf11)
(setq    e1
     (car
       (LM:SelectIf
         "\nCh\U+1ECDn Text c\U+1EA7n \U+0111\U+1ED5i Justify: "
         (lambda (x)
           (eq "TEXT"
           (cdr (assoc 0 (entget (car x))))
           )
         )
         entsel
         nil
       )
     )
  )
  (setq Pnt (TD:Text-Base e1))
  (setq dxf (TD:JustifyType e1))
  (setq Lst (entget e1))
  (setq Justify (AT:Justify))
  (princ Justify)
;----------------------------------------------------------------
;Dua dang khac ve dang: Left / Fit / Aligned (3 thang nay su dung: dxf10)
  (if (and (eq Justify "Left")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "L" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "Center")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "C" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "Right")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "R" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
(if (and (eq Justify "TOPLeft")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TL" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "TOPCenter")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TC" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "TOPRight")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "TR" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMLeft")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BL" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMCenter")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BC" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (if (and (eq Justify "BOTTOMRight")) ;ok
      (Progn
    (setq txt_h (cdr (assoc 40 Lst)))
    (setq txt_val (cdr (assoc 1 Lst)))
    (command "text" "BR" Pnt txt_h 0 txt_val)
    (command "erase" e1 "")
      )
    )
  (princ)
)
;[Left/Center/Right/Align/Middle/Fit/TL/TC/TR/ML/MC/MR/BL/BC/BR]
;----------------------------------------------------------------     
(defun AT:Justify (/ *Justify* Justify)
  (initget
    2
    "Left Center Right TOPLeft TOPCenter TOPRight BOTTOMLeft BOTTOMCenter BOTTOMRight"
  )
  (or *Justify* (setq *Justify* "Left"))
  (setq    Justify
     (cond
       ((getkword
          (strcat
        "\nCh\U+1ECDn T\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: [Left / Center / Right  / TOPLeft / TOPCenter / TOPRight / BOTTOMLeft / BOTTOMCenter / BOTTOMRight ] ? <"
        *Justify*
        ">: "
          )
        )
       )
       (*Justify*)
     )
  )
  (if (not Justify)
    (setq Justify *Justify*)
    (setq *Justify* Justify)
  )
)
(defun LM:SelectIf (msg pred func keyw / sel)
  (setq pred (eval pred))
  (while
    (progn
      (setvar 'ERRNO 0)
      (if keyw
    (apply 'initget keyw)
      )
      (setq sel (func msg))
      (cond
    ((= 7 (getvar 'ERRNO))
     (princ
       "\nB\U+1EA1n ch\U+1ECDn sai r\U+1ED3i! H\U+00E3y ch\U+1ECDn l\U+1EA1i."
     )
    )
    ((eq 'STR (type sel))
     nil
    )
    ((vl-consp sel)
     (if (and pred (not (pred sel)))
       (princ "")
     )
    )
      )
    )
  )
  sel
)

 

Bác viết hơi rối. Nên mình cũng chỉ đọc sơ.

- Vế hàm AT:Justify của bạn thì *Justify* là biến cục bộ nên nó sẽ không lưu biến cho cac lần sử dụng sau.

- Dxf code của Justify là 72 vả 73. Tham khảo https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2017/ENU/AutoCAD-DXF/files/GUID-62E5383D-8A14-47B4-BFC4-35824CAE8363-htm.html

- Bạn xem dxf code 10 và 11 thì khi dxf72=dxf73=0 thì textalignmentpoint là insertpoint. 

- Khi entmod thì chủ yếu nó lấy theo align point nên cần set lại nó cho đúng yêu cầu mình.

 

Nhưng có lệnh justifytext sao không sài mà viết cho mệt vậy.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@ngokiet : Bạn có thể tham khảo code tôi viết sắp xếp Text :   :))



(defun c:SXT ( / #HUONG_XEP_TEXT #TEXT_ALIGHT DXF DXF10_Y DXF11_X DXF11_Y OBJECT PT DXF10_ DXF10_X OBJECT-SELECT)
  (setq #HUONG_XEP_TEXT "Ver")
  (initget "Ver Hor")
  (setq #HUONG_XEP_TEXT (cond ((getkword (strcat "\nText Align : [Ver/Hor] <" #HUONG_XEP_TEXT ">"))) (#HUONG_XEP_TEXT)))

  (setq #TEXT_ALIGHT "L")
  (initget "L C R A M F TL TC TR ML MC MR BL BC BR")
  (setq #TEXT_ALIGHT (cond ((getkword (strcat "\nJustify Text : [L/C/R/A/M/F/TL/TC/TR/ML/MC/MR/BL/BC/BR] <" #TEXT_ALIGHT ">"))) (#TEXT_ALIGHT)))
  
  (setq object (acet-ss-to-list (ssget '((0 . "*TEXT"))))
    object-select (ACET-LIST-TO-SS object)
    pt (getpoint "\nPick Point"))

  (cond ((= #TEXT_ALIGHT "L") (command "JUSTIFYTEXT" object-select ""  "Left"))
    ((= #TEXT_ALIGHT "C") (command "JUSTIFYTEXT" object-select ""  "Center"))
    ((= #TEXT_ALIGHT "R") (command "JUSTIFYTEXT" object-select ""  "Right"))
    ((= #TEXT_ALIGHT "A") (command "JUSTIFYTEXT" object-select ""  "Aligned"))
    ((= #TEXT_ALIGHT "M") (command "JUSTIFYTEXT" object-select ""  "Middle"))
    ((= #TEXT_ALIGHT "F") (command "JUSTIFYTEXT" object-select ""  "Fit"))
    ((= #TEXT_ALIGHT "TL") (command "JUSTIFYTEXT" object-select "" "TL"))
    ((= #TEXT_ALIGHT "TC") (command "JUSTIFYTEXT" object-select "" "TC"))
    ((= #TEXT_ALIGHT "TR") (command "JUSTIFYTEXT" object-select "" "TR"))
    ((= #TEXT_ALIGHT "ML") (command "JUSTIFYTEXT" object-select "" "ML"))
    ((= #TEXT_ALIGHT "MC") (command "JUSTIFYTEXT" object-select "" "MC"))
    ((= #TEXT_ALIGHT "MR") (command "JUSTIFYTEXT" object-select "" "MR"))
    ((= #TEXT_ALIGHT "BL") (command "JUSTIFYTEXT" object-select "" "BL"))
    ((= #TEXT_ALIGHT "BC") (command "JUSTIFYTEXT" object-select "" "BC"))
    ((= #TEXT_ALIGHT "BR") (command "JUSTIFYTEXT" object-select "" "BR"))
    )
    
  (cond ((and (= #HUONG_XEP_TEXT "Ver") (= #TEXT_ALIGHT "L"))
       (foreach ss object
            (progn
            (setq dxf (entget ss)
              dxf10_y (caddr (assoc 10 dxf)))
            (setq dxf (subst (cons 10 (list (car pt) dxf10_y )) (assoc 10 dxf) dxf))
            (entmod dxf)
            ); end progn
            ); end foreach
     )
    ((= #HUONG_XEP_TEXT "Ver")
       (foreach ss object
            (progn
            (setq dxf (entget ss)
              dxf11_y (caddr (assoc 11 dxf)))
            (setq dxf (subst (cons 11 (list (car pt) dxf11_y )) (assoc 11 dxf) dxf))
            (entmod dxf)
            ); end progn
            ); end foreach
     )

      ((and (= #HUONG_XEP_TEXT "Hor")(= #TEXT_ALIGHT "L"))
       (foreach ss object
            (progn
            (setq dxf (entget ss)
              dxf10_x (cadr (assoc 10 dxf)))
            (setq dxf (subst (cons 10 (list dxf10_x (cadr pt) )) (assoc 10 dxf) dxf))
            (entmod dxf)
            ); end progn
            ); end foreach
     )
    ((= #HUONG_XEP_TEXT "Hor")
       (foreach ss object
            (progn
            (setq dxf (entget ss)
              dxf11_x (cadr (assoc 11 dxf)))
            (setq dxf (subst (cons 11 (list dxf11_x (cadr pt) )) (assoc 11 dxf) dxf))
            (entmod dxf)
            ); end progn
            ); end foreach
     )
    ); end cond
  (princ))
 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
5 giờ trước, Danh Cong đã nói:

@ngokiet

 : Bạn có thể tham khảo code tôi viết sắp xếp Text :   :))

 





	(defun c:SXT ( / #HUONG_XEP_TEXT #TEXT_ALIGHT DXF DXF10_Y DXF11_X DXF11_Y OBJECT PT DXF10_ DXF10_X OBJECT-SELECT)
	  (setq #HUONG_XEP_TEXT "Ver")
	  (initget "Ver Hor")
	  (setq #HUONG_XEP_TEXT (cond ((getkword (strcat "\nText Align : [Ver/Hor] <" #HUONG_XEP_TEXT ">"))) (#HUONG_XEP_TEXT)))



	  (setq #TEXT_ALIGHT "L")
	  (initget "L C R A M F TL TC TR ML MC MR BL BC BR")
	  (setq #TEXT_ALIGHT (cond ((getkword (strcat "\nJustify Text : [L/C/R/A/M/F/TL/TC/TR/ML/MC/MR/BL/BC/BR] <" #TEXT_ALIGHT ">"))) (#TEXT_ALIGHT)))
	  
	  (setq object (acet-ss-to-list (ssget '((0 . "*TEXT"))))
	    object-select (ACET-LIST-TO-SS object)
	    pt (getpoint "\nPick Point"))



	  (cond ((= #TEXT_ALIGHT "L") (command "JUSTIFYTEXT" object-select ""  "Left"))
	    ((= #TEXT_ALIGHT "C") (command "JUSTIFYTEXT" object-select ""  "Center"))
	    ((= #TEXT_ALIGHT "R") (command "JUSTIFYTEXT" object-select ""  "Right"))
	    ((= #TEXT_ALIGHT "A") (command "JUSTIFYTEXT" object-select ""  "Aligned"))
	    ((= #TEXT_ALIGHT "M") (command "JUSTIFYTEXT" object-select ""  "Middle"))
	    ((= #TEXT_ALIGHT "F") (command "JUSTIFYTEXT" object-select ""  "Fit"))
	    ((= #TEXT_ALIGHT "TL") (command "JUSTIFYTEXT" object-select "" "TL"))
	    ((= #TEXT_ALIGHT "TC") (command "JUSTIFYTEXT" object-select "" "TC"))
	    ((= #TEXT_ALIGHT "TR") (command "JUSTIFYTEXT" object-select "" "TR"))
	    ((= #TEXT_ALIGHT "ML") (command "JUSTIFYTEXT" object-select "" "ML"))
	    ((= #TEXT_ALIGHT "MC") (command "JUSTIFYTEXT" object-select "" "MC"))
	    ((= #TEXT_ALIGHT "MR") (command "JUSTIFYTEXT" object-select "" "MR"))
	    ((= #TEXT_ALIGHT "BL") (command "JUSTIFYTEXT" object-select "" "BL"))
	    ((= #TEXT_ALIGHT "BC") (command "JUSTIFYTEXT" object-select "" "BC"))
	    ((= #TEXT_ALIGHT "BR") (command "JUSTIFYTEXT" object-select "" "BR"))
	    )
	    
	  (cond ((and (= #HUONG_XEP_TEXT "Ver") (= #TEXT_ALIGHT "L"))
	       (foreach ss object
	            (progn
	            (setq dxf (entget ss)
	              dxf10_y (caddr (assoc 10 dxf)))
	            (setq dxf (subst (cons 10 (list (car pt) dxf10_y )) (assoc 10 dxf) dxf))
	            (entmod dxf)
	            ); end progn
	            ); end foreach
	     )
	    ((= #HUONG_XEP_TEXT "Ver")
	       (foreach ss object
	            (progn
	            (setq dxf (entget ss)
	              dxf11_y (caddr (assoc 11 dxf)))
	            (setq dxf (subst (cons 11 (list (car pt) dxf11_y )) (assoc 11 dxf) dxf))
	            (entmod dxf)
	            ); end progn
	            ); end foreach
	     )



	      ((and (= #HUONG_XEP_TEXT "Hor")(= #TEXT_ALIGHT "L"))
	       (foreach ss object
	            (progn
	            (setq dxf (entget ss)
	              dxf10_x (cadr (assoc 10 dxf)))
	            (setq dxf (subst (cons 10 (list dxf10_x (cadr pt) )) (assoc 10 dxf) dxf))
	            (entmod dxf)
	            ); end progn
	            ); end foreach
	     )
	    ((= #HUONG_XEP_TEXT "Hor")
	       (foreach ss object
	            (progn
	            (setq dxf (entget ss)
	              dxf11_x (cadr (assoc 11 dxf)))
	            (setq dxf (subst (cons 11 (list dxf11_x (cadr pt) )) (assoc 11 dxf) dxf))
	            (entmod dxf)
	            ); end progn
	            ); end foreach
	     )
	    ); end cond
	  (princ))
	 

Bác viết bình thường theo sài command justifytext chứ đâu phải entmod- Trong lệnh cond của bác để xét #TEXT_ ALI GH T  thì bác có thể dùng

(command "JUSTIFYTEXT" object-select ""  #TEXT_ ALI GH T) )cho nó gọn và tránh phài so sánh nhiều lần.-

Về lệnh entmod Thì ngoài giá trị đầu chỉ ent cần sửa thì các giá trị sau cần sủa giá trị dxf nào thì sửa cái đó thôi.Ví dụ như lisp bas mình sửa lại như sau

;; free lisp from cadviet.com
;;; this lisp was downloaded from https://www.cadviet.com/forum/topic/14210-h%E1%BB%8Fi-v%E1%BB%81-lisp-thu%E1%BA%ADt-to%C3%A1n-%C3%BD-t%C6%B0%E1%BB%9Fng-coding/?page=130
(defun c:SXT ( / #HUONG_XEP_TEXT #TEXT_ALIGHT DXF DXF10_Y DXF11_X DXF11_Y OBJECT PT DXF10_ DXF10_X OBJECT-SELECT n)
	  (setq #HUONG_XEP_TEXT "Ver")
	  (initget "Ver Hor")
	  (setq #HUONG_XEP_TEXT (cond ((getkword (strcat "\nText Align : [Ver/Hor] <" #HUONG_XEP_TEXT ">"))) (#HUONG_XEP_TEXT)))



	  (setq #TEXT_ALIGHT "L")
	  (initget "L C R A M F TL TC TR ML MC MR BL BC BR")
	  (setq #TEXT_ALIGHT (cond ((getkword (strcat "\nJustify Text : [L/C/R/A/M/F/TL/TC/TR/ML/MC/MR/BL/BC/BR] <" #TEXT_ALIGHT ">"))) (#TEXT_ALIGHT)))
	  
	  (setq object (acet-ss-to-list (ssget '((0 . "*TEXT"))))
	    object-select (ACET-LIST-TO-SS object)
	    pt (getpoint "\nPick Point"))


	  (command "JUSTIFYTEXT" object-select ""  #TEXT_ALIGHT)
	  
	  
	  (setq n (if (= #TEXT_ALIGHT "L") 10 11))

	  
	  (if (= #HUONG_XEP_TEXT "Ver")
	      (foreach ss object
	            (setq dxf (entget ss)
	              dxf10_y (caddr (assoc n dxf)))
		    (entmod (list (car dxf) (list n (car pt) dxf10_y)))   
	            )
	      (foreach ss object
	            (setq dxf (entget ss)
	              dxf10_x (cadr (assoc n dxf)))
		    (entmod (list (car dxf) (list n dxf10_y (cadr pt))))   
	            )
	    );end if
	  (princ))


      Mình không thích sài command trong lisp cho lắm. Nếu mình viết thường sửa thẳng 1 lần trong entmod luôn.

Mình chỉ sửa lisp của bạn để chạy giống y lisp cũ thôi.

Chứ lisp đó khi xắp xép text khi gặp mtext thì có thể lỗi vì dxf mtext khác text.

Với trường hợp justify là fit, align thì text có thể bị kéo giãn hay thay đỗi chiếu cao. 2 trường hợp này phải thay đổi cả dxf 10 và 11.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trước em có tìm thấy lisp chia cung theo khoảng cách or số đoạn trên diễn đàn mình như đính kèm.

Tuy nhiên lisp hiện tại chỉ cho phép thực hiện trên từng đối tượng, không thể chọn được nhiều đối tượng cùng lúc.

VD: Em muốn chia 3 cung khác nhau, mỗi khung chia thành 4 đoạn chẳng hạn thì phải chạy lisp 3 lần cho 3 cung này.

Nhờ các bác chỉ cách or bổ sung code để có thể chia cùng lúc nhiều cung khác nhau với ạ!

Em cảm ơn ^T^

dc.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
16 giờ trước, NgTheChien.37 đã nói:

Trước em có tìm thấy lisp chia cung theo khoảng cách or số đoạn trên diễn đàn mình như đính kèm.

Tuy nhiên lisp hiện tại chỉ cho phép thực hiện trên từng đối tượng, không thể chọn được nhiều đối tượng cùng lúc.

VD: Em muốn chia 3 cung khác nhau, mỗi khung chia thành 4 đoạn chẳng hạn thì phải chạy lisp 3 lần cho 3 cung này.

Nhờ các bác chỉ cách or bổ sung code để có thể chia cùng lúc nhiều cung khác nhau với ạ!

Em cảm ơn ^T^

dc.lsp

Vì lisp có tùy chọn chia theo khoảng cách, trong đó có việc pick điểm khởi đầu, nên chọn 1 đống không giải quyết được tùy chọn này.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mọi người cho mình hỏi, làm thế nào để lấy được cái selection set như ví dụ trong hình: các đối tượng trong hình mới chỉ đang chọn thủ công, và không nằm trong previous selection set.

Mình xin cảm ơn !

Screenshot_1.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Pha

14 phút trước, Duong Nhat Duy đã nói:

Mọi người cho mình hỏi, làm thế nào để lấy được cái selection set như ví dụ trong hình: các đối tượng trong hình mới chỉ đang chọn thủ công, và không nằm trong previous selection set.

Mình xin cảm ơn !

 

Có phải ý muốn hỏi này không?

(setq ss (ssget "I"))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

 

Vào lúc 23/11/2019 tại 23:06, Doan Van Ha đã nói:

Because lisp has the option of dividing by distance, including starting point selection, choosing a heap does not solve this option.

 

Đồng ý chỉ heap không giải quyết tùy chọn này. Hơn nữa, tôi đang xem xét các nghiên cứu khác nhau và biên soạn một hướng dẫn cho trang web này khi tôi đang làm việc như một tác giả ở đây https://www.reviewsed.com/ Hy vọng các bạn đặt đầu vào của bạn sau khi tôi hoàn thành nó

  • Like 1
  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bạn cho mình hỏi chút:

Mình có 1 nested entity dạng như này:

(setq nent (car (nentsel)))

(có thể là entity bình thường, ko nằm trong block, xref, hoặc entity trong block, hoặc trong block của block)

Bây giờ mình muốn lấy cái layer của block ngoài cùng chứa cái entity kia thì làm ntn nhỉ ?

Mình xin cảm ơn !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
13 phút trước, Duong Nhat Duy đã nói:

Các bạn cho mình hỏi chút:

Mình có 1 nested entity dạng như này:

  • cadvietlisp.lsp
    lisp help
  •  

(setq nent (car (nentsel)))

(có thể là entity bình thường, ko nằm trong block, xref, hoặc entity trong block, hoặc trong block của block)

Bây giờ mình muốn lấy cái layer của block ngoài cùng chứa cái entity kia thì làm ntn nhỉ ?

Mình xin cảm ơn !

(cdr (assoc 8 (entget (last (last (nentsel))))))

Bác dùng cái này để lấy layer block ngoài cùng, còn đối với đối tượng không nằm trong block thì kết hợp vs hàm if

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ trước, Doan Nguyen Van đã nói:
  • cadvietlisp.lsp
    lisp help
  •  

(cdr (assoc 8 (entget (last (last (nentsel))))))

Bác dùng cái này để lấy layer block ngoài cùng, còn đối với đối tượng không nằm trong block thì kết hợp vs hàm if

Ủa hay nhỉ, cảm ơn bạn nhé !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×