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ị

Bạn thêm (cons 11 p) nữa. Vì chỉ có align Left là dùng dxf code 10 thôi (code 11 khi đó là '(0 0 0))

còn các align khác thì code 11 là chính còn 10 là phụ.

Bạn cứ cho cả 2 code 10 và 11 bằng p hết đi, cad sẽ tự động tính lại code 10.

Cảm ơn q288. Tue_NV đã hiểu rồi. Bây giờ mình có thể giúp cho bạn xuantran hoàn thành 1 đoạn Lisp đo góc bên Topic Viết Lisp theo yêu cầu rồi

Một lần nữa cảm ơn bạn q288 :lol2:

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
Bạn dùng kiểu như sau:

 

(command "pline")

(foreach i lstdiem (command i))

(command "")

 

Cách này nhìn không có vẻ "bác học" lắm như kết quả thì ok.

Cám ơn bác q288 đã hướng dẫn. Nhờ bác trả lời vế sau của e luôn được chứ?

E đã thử lấy giá trị của hàm (entget doituong) để thử tạo ra 1 đổi tượng mới nhưng ko thành công.

Cụ thể như sau: lấy "entget" của đường Pline (4 điểm) được:

((-1 . ) (0 . LWPOLYLINE) (330 .

) (5 . 189800) (100 . AcDbEntity) (67 . 0) (410 . Model)

(8 . 2) (100 . AcDbPolyline) (90 . 4) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)

(10 233.688 -392.403) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 258.958 -374.806)

(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 269.721 -385.148) (40 . 0.0) (41 . 0.0)

(42 . 0.0) (10 285.425 -375.227) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0

1.0))

Từ đây e thử tạo tại Pline này bằng lệnh entmake nhưng ko được.Bác q288 xem ý tưởng vậy có gì sai?

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ám ơn bác q288 đã hướng dẫn. Nhờ bác trả lời vế sau của e luôn được chứ?

E đã thử lấy giá trị của hàm (entget doituong) để thử tạo ra 1 đổi tượng mới nhưng ko thành công.

Cụ thể như sau: lấy "entget" của đường Pline (4 điểm) được:

((-1 . ) (0 . LWPOLYLINE) (330 .

) (5 . 189800) (100 . AcDbEntity) (67 . 0) (410 . Model)

(8 . 2) (100 . AcDbPolyline) (90 . 4) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)

(10 233.688 -392.403) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 258.958 -374.806)

(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 269.721 -385.148) (40 . 0.0) (41 . 0.0)

(42 . 0.0) (10 285.425 -375.227) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0

1.0))

Từ đây e thử tạo tại Pline này bằng lệnh entmake nhưng ko được.Bác q288 xem ý tưởng vậy có gì sai?

Bạn chú ý có một số mã DXF chỉ duy nhất với 1 đối tượng (giống như mã sinh viên thì không được phép của ai trùng của ai dù là anh em sinh đôi giống nhau như đúc). Ví dụ như mã Handle (-5) , ... bạn đọc lại sách xem

  • 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
Cám ơn bác q288 đã hướng dẫn. Nhờ bác trả lời vế sau của e luôn được chứ?

E đã thử lấy giá trị của hàm (entget doituong) để thử tạo ra 1 đổi tượng mới nhưng ko thành công.

Cụ thể như sau: lấy "entget" của đường Pline (4 điểm) được:

((-1 . ) (0 . LWPOLYLINE) (330 .

) (5 . 189800) (100 . AcDbEntity) (67 . 0) (410 . Model)

(8 . 2) (100 . AcDbPolyline) (90 . 4) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)

(10 233.688 -392.403) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 258.958 -374.806)

(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 269.721 -385.148) (40 . 0.0) (41 . 0.0)

(42 . 0.0) (10 285.425 -375.227) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0

1.0))

Từ đây e thử tạo tại Pline này bằng lệnh entmake nhưng ko được.Bác q288 xem ý tưởng vậy có gì sai?

 

Bạn dùng entmake thì vất vả đấy, vì phải hiểu rõ các code của nó mới làm đc.

Bạn viết lại như sau:

 

(entmake '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline")

(90 . 4) (70 . 0)

(10 233.688 -392.403)

(42 . 0) (10 258.958 -374.806)

(42 . 0) (10 269.721 -385.148)

(42 . 0) (10 285.425 -375.227)

))

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ó những code cad chỉ cho bạn "ngó" thôi chứ không cho bạn đụng tới như code -1, 330, 5 .Do đó bạn không thể bê

nguyên xi cái entget của đối tượng này để entmake đtg khác đc.

Những code mình đưa ra ở trên là những code tối thiểu đủ để tạo đtg pline. (code 70 bỏ cũng đc)

  • 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
Cám ơn bác q288 đã hướng dẫn. Nhờ bác trả lời vế sau của e luôn được chứ?

E đã thử lấy giá trị của hàm (entget doituong) để thử tạo ra 1 đổi tượng mới nhưng ko thành công.

Cụ thể như sau: lấy "entget" của đường Pline (4 điểm) được:

......................

Từ đây e thử tạo tại Pline này bằng lệnh entmake nhưng ko được.Bác q288 xem ý tưởng vậy có gì sai?

Chào VoHoan

hàm tạo Pline hở từ danh sách điểm :

(defun makePLINE(lst-pt)

(entmakex

(apply

(function append)

(cons

(list

'(0 . "LWPOLYLINE")

'(100 . "AcDbEntity")

'(100 . "AcDbPolyline")

'(62 . 3) ; color

(cons 90 (length lst-pt))

'(70 . 0)

)

(mapcar

(function list)

(mapcar (function (lambda (a) (cons 10 a))) lst-pt)

) ;_ mapcar

) ;_ cons

) ;_ apply

)

)

 

Minh họa việc "copy" 1 PLINE (chỉ lấy danh sách điểm, bỏ qua chiều rộng và cung tròn nếu có)

(defun c:test(/ en lst-pt sp delta)
 (defun makePLINE(lst-pt)
 (entmakex
(apply
  (function append)
  (cons
    (list
      '(0 . "LWPOLYLINE")
      '(100 . "AcDbEntity")
      '(100 . "AcDbPolyline")
      '(62 . 3) ; color	      
      (cons 90 (length lst-pt))
      '(70 . 0)
      )
    (mapcar
      (function list)
      (mapcar (function (lambda (a) (cons 10 a))) lst-pt)
      ) ;_  mapcar
    ) ;_  cons
  ) ;_  apply
)
 )
 (if (and (setq en (car (entsel)))
   (= (cdr (assoc 0 (entget en))) "LWPOLYLINE")
   )
   (progn
     (setq lst-pt (mapcar (function cdr)
		   (vl-remove-if-not (function (lambda (a) (= (car a) 10))) (entget en))
		   )
    sp (vlax-curve-getStartPoint en)
    delta (mapcar '- sp (getpoint sp "\nDiem dat :"))
    delta (list (car delta) (cadr delta))
    lst-pt (mapcar (function (lambda (a) (mapcar '- a delta))) lst-pt)
    )
     (makePLINE lst-pt)
     )
   )
 )

  • 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

Xin chào mọi người

Tue_NV có một vấn đề khúc mắc mà chưa giải quyết được.

Vấn đề đó như sau :

Mình có list L như sau :

 

Command: (setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))))

((A D) (C D) (E F) (F G) (H K))

 

Vấn đề mà Tue_NV muốn hỏi ở đây là từ list L đã thiết lập đó

=> Làm sao để tạo một list LI như sau :

((C D) (E F) (F G))

 

Ví dụ : như hàm append để nối list con thành 1 list mẹ

Còn sử dụng hàm gì để tách 1 list con ra khỏi List mẹ đó mà

 

Tue_NV chưa biết cách làm. Xin mọi người chỉ giúp

Cảm ơn thật nhiều

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
Xin chào mọi người

Tue_NV có một vấn đề khúc mắc mà chưa giải quyết được.

Vấn đề đó như sau :

Mình có list L như sau :

 

Command: (setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))))

((A D) (C D) (E F) (F G) (H K))

 

Vấn đề mà Tue_NV muốn hỏi ở đây là từ list L đã thiết lập đó

=> Làm sao để tạo một list LI như sau :

((C D) (E F) (F G))

 

Ví dụ : như hàm append để nối list con thành 1 list mẹ

Còn sử dụng hàm gì để tách 1 list con ra khỏi List mẹ đó mà

 

Tue_NV chưa biết cách làm. Xin mọi người chỉ giúp

Cảm ơn thật nhiều

 

Cái đó ko có hàm sẵn đâu bạn, bạn phải tự làm thôi.

Mình đề nghị hai cái hàm này:

 

Cái này lấy list con từ phần tử a tới ptử b cua L:

(defun sublist(a b L)

(reverse (member b (reverse (member a L))))

)

 

Cái này lấy list con từ phần tử thứ n tới ptử thứ m của L (ptử đầu là 0):

(defun subNlist(n m L)

(reverse (member (nth m L) (reverse (member (nth n L) L))))

)

 

Test:

(setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))))

(sublist '(c d) '(f g) L)

(subNlist 1 3 L)

  • 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
Cái đó ko có hàm sẵn đâu bạn, bạn phải tự làm thôi.

Mình đề nghị hai cái hàm này:

 

Cái này lấy list con từ phần tử a tới ptử b cua L:

(defun sublist(a b L)

(reverse (member b (reverse (member a L))))

)

 

Cái này lấy list con từ phần tử thứ n tới ptử thứ m của L (ptử đầu là 0):

(defun subNlist(n m L)

(reverse (member (nth m L) (reverse (member (nth n L) L))))

)

 

Test:

(setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))))

(sublist '(c d) '(f g) L)

(subNlist 1 3 L)

Cảm ơn q288. Tue_NV đã hiểu rồi. Bạn cho mình hỏi thêm chút nữa là ví dụ tách một List con nó không đi theo thứ tự từ phần tử a tới phần tử b của List mẹ L

Ví dụ trên :

từ list L đã thiết lập đó

Command: (setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))(list '(m n))))

((A D) (C D) (E F) (F G) (H K) (M N)

=> Làm sao để tạo một list LI như sau :

((C D) (F G) (M N))

Trường hợp này, thiệt tình mình nghĩ chưa ra. Mong bạn q288 và mọi người bỏ chút thời gian giúp Tue_NV

Xin cảm ơn thật nhiều

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ảm ơn q288. Tue_NV đã hiểu rồi. Bạn cho mình hỏi thêm chút nữa là ví dụ tách một List con nó không đi theo thứ tự từ phần tử a tới phần tử b của List mẹ L

Ví dụ trên :

từ list L đã thiết lập đó

Command: (setq L (append (list '(a d)) (list '(c d)) (list '(e f)) (list '(f g)) (list '(h k))(list '(m n))))

((A D) (C D) (E F) (F G) (H K) (M N)

=> Làm sao để tạo một list LI như sau :

((C D) (F G) (M N))

Trường hợp này, thiệt tình mình nghĩ chưa ra. Mong bạn q288 và mọi người bỏ chút thời gian giúp Tue_NV

Xin cảm ơn thật nhiều

 

Nếu lấy không theo thứ tự nào như vậy thì chỉ có cách dùng assoc:

(list (assoc 'c L) (assoc 'f L) (assoc 'm L))

bạn xem như vậy có đc ko?

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
Nếu lấy không theo thứ tự nào như vậy thì chỉ có cách dùng assoc:

(list (assoc 'c L) (assoc 'f L) (assoc 'm L))

bạn xem như vậy có đc ko?

Rất cảm ơn bạn q288 đã nhiệt tình giúp đỡ. Tue_NV cảm ơn bạn rất nhiều

Mình cũng đã nghĩ tới việc dùng hàm assoc và hàm List để tạo một List con từ một List mẹ

Tuy nhiên sử dụng cách này hơi lâu.

Với List mẹ có số phần tử tương đối ít. -> thì việc dùng hàm assoc và hàm List để tạo một List con từ một List mẹ : ta có thể sử dụng

Nhưng với List mẹ chứa số phần tử lớn mà mình chỉ muốn khai trừ một ít phần tử trong list mẹ thì việc này rất lâu và tốn nhiều thời gian.

 

Mình chưa nghĩ được phương án tối ưu.

Mong mọi người giúp đỡ.

Cảm ơn bạn q288 thật nhiều

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
Rất cảm ơn bạn q288 đã nhiệt tình giúp đỡ. Tue_NV cảm ơn bạn rất nhiều

Mình cũng đã nghĩ tới việc dùng hàm assoc và hàm List để tạo một List con từ một List mẹ

Tuy nhiên sử dụng cách này hơi lâu.

Với List mẹ có số phần tử tương đối ít. -> thì việc dùng hàm assoc và hàm List để tạo một List con từ một List mẹ : ta có thể sử dụng

Nhưng với List mẹ chứa số phần tử lớn mà mình chỉ muốn khai trừ một ít phần tử trong list mẹ thì việc này rất lâu và tốn nhiều thời gian.

 

Mình chưa nghĩ được phương án tối ưu.

Mong mọi người giúp đỡ.

Cảm ơn bạn q288 thật nhiều

 

Vậy bạn thử dùng các hàm vl-remove hay vl-remove-if xem sao

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ả tuần nay bân việc quá không có thời gian ghé thăm CadViet.Hôm nay vào thấy câu hỏi em đặt ra đã có nhiều người giúp mà chưa kịp cám ơn, giờ tiện đây cám ơn toàn thể mọi người đã giúp đỡ.

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
Bạn dùng entmake thì vất vả đấy, vì phải hiểu rõ các code của nó mới làm đc.

Bạn viết lại như sau:

 

(entmake '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline")

(90 . 4) (70 . 0)

(10 233.688 -392.403)

(42 . 0) (10 258.958 -374.806)

(42 . 0) (10 269.721 -385.148)

(42 . 0) (10 285.425 -375.227)

))

Mình nhớ là code 100 không có cũng đc, nhưng tại bạn vẫn dùng (100 . "AcDbEntity") (100 . "AcDbPolyline").

Thật ra có ý nghĩa gì vậy bạn q288.

Mình thấy trong cad có nhiều loại POLYLINE. Lúc thì POLYLINE, lúc thì LWPOLYLINE, có lúc lại phân biệt 2D và 3D. Bạn có thể phân tích sự khác nhau và cách tạo POLYLINE, LWPOLYLINE 2D, POLYLINE 3D bằng Lisp cho mình hiểu đc 0? Cám ơn bạ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
Rất cảm ơn bạn q288 đã nhiệt tình giúp đỡ. Tue_NV cảm ơn bạn rất nhiều

Mình cũng đã nghĩ tới việc dùng hàm assoc và hàm List để tạo một List con từ một List mẹ

.............................

Chào Tue_NV

Gửi bạn 1 số hàm Remove phần tử trong danh sách.

;;; Some list manipulation tools
;;;
;;; (vl-remove-last list): input list, removes last element from list
;;; (remove atom list): similar to (vl-remove) but only removes first occurance of atom in list
;;; (nth-remove nth list): removes nth element from list
;;; (remlist start length list): removes a number of elements after start position from a list

(defun vl-remove-last (f_l) ;removes last element from a list
 (setq f_l (reverse (cdr (reverse f_l))))
)
;eg (setq a (vl-remove-last '(1 2 3))) = (1 2)

(defun remove (f_new f_newlist / f_test) ;removes first occurance of an element from a list
 (if (member f_new f_newlist)		;is value present in list
   (progn
     (setq f_test nil)			;test to see if element removed
     (repeat (length f_newlist)	;loop through list
(progn
  (if (not (and (= f_test nil) (= (car f_newlist) f_new)))
				;test if element removed or element is to be removed
    (setq f_newlist
	   (cdr (append f_newlist (list (car f_newlist))))
    )				;swaps moves first element to end of list
    (progn
      (setq f_test t)		;element has been removed
      (setq f_newlist (cdr f_newlist))
				;remove first element from list
    )
  )
)
     )
   )
 )
)
;eg (remove 1 '(1 1 2 1)) = (1 2 1)

(defun nth-remove (f_n f_list / ) ;removes nth element from a list
 (if (and (numberp f_n) (listp f_list))
   (if (and (>= f_n 0) (< f_n (length f_list)))
   (progn
     (repeat f_n
(setq f_list (append (cdr f_list) (list (car f_list))))
)
     (setq f_list (cdr f_list))
     (repeat (- (length f_list) f_n)
(setq f_list (append (cdr f_list) (list (car f_list))))
)
     )
   )
   )
 f_list
 )
;eg (nth-remove (0 '(1 2 3))) = (2 3)

(defun remlist (f_n f_m f_newlist / f_loop f_x) ;removes number of elemts from list
 (if (>= (length f_newlist) f_n)	;test range
   (progn
     (setq f_loop -1)			;initialize counter
     (setq f_m (+ f_n (- f_m 1)))	;set end element
     (foreach f_x f_newlist		;loop through list
(progn
  (setq f_loop (1+ f_loop))	;increment counter
  (if (and (<= f_n f_loop) (>= f_m f_loop)) ;check within range
    (setq f_newlist (cdr f_newlist))
				;remove first element from list
    (setq f_newlist (cdr (append f_newlist (list f_x))))
				;move first element to end of list
  )
)
     )
   )
 )
)
;eg (remlist 1 2 '(1 2 3 4 5)) = (1 4 5)

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ình nhớ là code 100 không có cũng đc, nhưng tại bạn vẫn dùng (100 . "AcDbEntity") (100 . "AcDbPolyline").

Thật ra có ý nghĩa gì vậy bạn q288.

Mình thấy trong cad có nhiều loại POLYLINE. Lúc thì POLYLINE, lúc thì LWPOLYLINE, có lúc lại phân biệt 2D và 3D. Bạn có thể phân tích sự khác nhau và cách tạo POLYLINE, LWPOLYLINE 2D, POLYLINE 3D bằng Lisp cho mình hiểu đc 0? Cám ơn bạn

 

mình đã thử bỏ code 100 nhưng ko tạo đc polyline.

 

polyline là dùng cho cad cũ (R14 chẳng hạn) có thể gọi là polyline 2d.

Còn lwpolyline (lineweight Polyline) có 2 loại 2d và 3d.

2d thì các đỉnh có cùng elevation như nhau (cùng cao độ)

3d thì mỗi đỉnh có thể có elevation khác nhau.

 

Có thể dùng lệnh convert để chuyển polyline sang lwpolyline .

Hoặc dùng biến PLINETYPE để định pline tạo ra thuộc loại nào.

PLINETYPE=0 (POLYLINE)

PLINETYPE=1 hay 2 (LWPOLYLINE)

  • Vote tăng 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

Nhờ mọi người chỉ giúp cách ghép 1 lệnh vào 1 lệnh khác. Ví dụ Lísp1 dùng để chuyển tẽxt sang màu đỏ. Lísp 2 dùng tạo tẽxt, sau đó kết hợp Lísp 1 để chuyển sang màu đỏ luôn. 2 ví dụ dưới mục đích để tìm hiểu cách sử dụng 1 lệnh trong 1 lệnh khác.

 

Lísp1 :

(defun c:chuyen ( / ent )

(setq dt (car(entsel)))

(command "chprop" dt "" "c" 1 "" "")

)

 

Lísp2 :

(defun c:taotext ( / ent )

(setq diemtext (getpoint))

(command ".style" "original" "extfont2.shx" "0" "0.8" "0" "n" "n" "n")

(command "text" "bc" diemtext 200 0 "abc")

(setq chu (entlast))

(chuyen chu)

)

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ờ mọi người chỉ giúp cách ghép 1 lệnh vào 1 lệnh khác. Ví dụ Lísp1 dùng để chuyển tẽxt sang màu đỏ. Lísp 2 dùng tạo tẽxt, sau đó kết hợp Lísp 1 để chuyển sang màu đỏ luôn. 2 ví dụ dưới mục đích để tìm hiểu cách sử dụng 1 lệnh trong 1 lệnh khác.

 

Lísp1 :

(defun c:chuyen ( / ent )

(setq dt (car(entsel)))

(command "chprop" dt "" "c" 1 "" "")

)

 

Lísp2 :

(defun c:taotext ( / ent )

(setq diemtext (getpoint))

(command ".style" "original" "extfont2.shx" "0" "0.8" "0" "n" "n" "n")

(command "text" "bc" diemtext 200 0 "abc")

(setq chu (entlast))

(chuyen chu)

)

Chào bạn Tuan_thiêtkedien,

Để có thể chạy môt lisp trong một lisp khác như bạn mô tả, bạn chỉ cần đặt đoạn lisp thứ nhất vào trong một function con (trong ví dụ của bạn, hãy thay dòng (defun C:chuyen (/ent) bằng dòng (defun chuyenchu (/ent) Chú ý là tên function viet liền không có khoảng trắng). Sau đó trong lisp thứ hai bạn nhập tên function vào chỗ bạn muốn là xong. Khi chạy lisp đến dòng này thì lisp sẽ tự động chạy function con đó giùm bạn.

Bạn lưu ý cái dòng chữ đỏ của bạn chưa phải tên function đâu nhé, tên function trong lisp không cho dùng khoảng trắng đâu bạn ạ.

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

  • 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
Nhờ mọi người chỉ giúp cách ghép 1 lệnh vào 1 lệnh khác. Ví dụ Lísp1 dùng để chuyển tẽxt sang màu đỏ. Lísp 2 dùng tạo tẽxt, sau đó kết hợp Lísp 1 để chuyển sang màu đỏ luôn. 2 ví dụ dưới mục đích để tìm hiểu cách sử dụng 1 lệnh trong 1 lệnh khác.

 

Lísp1 :

(defun c:chuyen ( / ent )

(setq dt (car(entsel)))

(command "chprop" dt "" "c" 1 "" "")

)

 

Lísp2 :

(defun c:taotext ( / ent )

(setq diemtext (getpoint))

(command ".style" "original" "extfont2.shx" "0" "0.8" "0" "n" "n" "n")

(command "text" "bc" diemtext 200 0 "abc")

(setq chu (entlast))

(chuyen chu)

)

Chào bạn Tuanthietkedien

Code trên sẽ được Tue_NV viết lại như sau :

(defun c:taotext ( / ent )
(setq diemtext (getpoint))
(command ".style" "original" "extfont2.shx" "0" "0.8" "0" "n" "n" "n")
(command "text" "bc" diemtext 200 0 "abc")
(setq chu (entlast))
(chuyen chu)
)
;
(defun chuyen (dt / ent )
(command "chprop" dt "" "c" 1 "" "")
)

 

@PhamthanhBinh : Theo Tue_NV hiểu là bạn Tuan định nghĩa hàm chuyen với tham biến là chu đấy

Vậy Cú pháp khi gọi chương trình con là (chuyen chu) và lúc này (chuyen chu) là 1 function phải không bạn?

  • Vote tăng 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
Có ai biết cách tùy biến Menu của Autocad 2007 không xin chỉ với. Tôi muốn sửa (thêm hoặc bớt chức năng) flie ACAD.cui nhưng không biết phải làm sao.

ACad.CUI là file dịch rồi, không tuỳ biến được. Muốn thêm bớt sửa đổi bạn phải tìm file *.mns.

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
Chào bạn Tuanthietkedien

Code trên sẽ được Tue_NV viết lại như sau :

(defun c:taotext ( / ent )
(setq diemtext (getpoint))
(command ".style" "original" "extfont2.shx" "0" "0.8" "0" "n" "n" "n")
(command "text" "bc" diemtext 200 0 "abc")
(setq chu (entlast))
(chuyen chu)
)
;
(defun chuyen (dt / ent )
(command "chprop" dt "" "c" 1 "" "")
)

 

@PhamthanhBinh : Theo Tue_NV hiểu là bạn Tuan định nghĩa hàm chuyen với tham biến là chu đấy

Vậy Cú pháp khi gọi chương trình con là (chuyen chu) và lúc này (chuyen chu) là 1 function phải không bạn?

 

Chào bạn Tue_NV, bạn Phamthanhbinh

Mình thấy các bác hay dùng kiểu (function biến) để ghép vào 1 lệnh khác mà mình chưa hiểu rõ cách dùng thế nào nên muốn học.

Ý của mình là bất kỳ các lisp nào mà mình muốn chuyển màu chữ thì mình không cần dùng lại lệnh CHPROP nữa mà chỉ cần gọi hàm chuyen mà thôi.

Cho mình hỏi là

1. Nếu chỉ muốn chuyển màu chữ thì làm sao gọi hàm chuyển được?

2. Có phải hàm (defun chuyen (dt / ent ) (command "chprop" dt "" "c" 1 "" "") , chỉ cần khai báo 1 lần là có thể ghép vào tất cả các hàm khác không , hay phải khai báo lại?

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
2. Có phải hàm (defun chuyen (dt / ent ) (command "chprop" dt "" "c" 1 "" "") , chỉ cần khai báo 1 lần là có thể ghép vào tất cả các hàm khác không , hay phải khai báo lại?

Đúng rồi.

Bạn hãy thử đi sẽ rút ra câu trả lời cho mì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

-Cho mình hỏi. Trong lisp ham nào lấy được tọa độ điểm của hình chữ nhật trong block. VD: mình có khung bản vẽ là 1 block hình chữ nhật, khi chọn block thì lấy được điểm 1 và điểm 2 của đường chéo hình chữ nhật. Xin chỉ dùm 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
-Cho mình hỏi. Trong lisp ham nào lấy được tọa độ điểm của hình chữ nhật trong block. VD: mình có khung bản vẽ là 1 block hình chữ nhật, khi chọn block thì lấy được điểm 1 và điểm 2 của đường chéo hình chữ nhật. Xin chỉ dùm cám ơn.

Nếu đối tượng chọn là 1 block thì phức tạp lắm tại vì nó là 1 đối tượng đa thực thể nên để thâm nhập vào được 1 đối tượng nào trong block thì người dùng cần phải có block đó thì mới có thể thâm nhập được, do đó bạn có thể upload bản vẽ chứa block đó lên được không để mình cùng tham khảo.

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

×