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ác Tue_NV: Có cách nào 1 pick mà lấy được các đỉnh như chỉ địnhcủa chủ thớt không?

@VoHoan: Hình như phải dịch Pline thì mới tính được khối lượng, còn vẽ lại Pline mới thì không?

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ác Tue_NV: Có cách nào 1 pick mà lấy được các đỉnh như chỉ địnhcủa chủ thớt không?

@VoHoan: Hình như phải dịch Pline thì mới tính được khối lượng, còn vẽ lại Pline mới thì không?

 

Bạn tham khảo :

http://www.cadviet.com/forum/topic/15016-them-node-vao-duong-pline/page-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

Mình rất thích học lisp nhưng không biết học ở đâ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

Bạn có thể viết cụ thể ra với trường hợp tổng quát giúp mình được không. Hoặc cho mình một ví dụ cụ thể để tham khảo với.

Thế bài toán bạn đã giải quyết được chưa ? :)

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ủa em là thế này cơ:

Theo như TrCongSon: Các tọa độ "đã biết" của anh ở đây là biên dạng (dưới) của Block -> mà Lấy tọa độ cái này ngoài tầm với của e ^^

Theo như VoHoan: Việc lấy toạ độ đế cập nhật cho đường pline thi không khó.

Có nghĩa là Pick vào Block thì lấy được tọa độ các điểm nằm trên đường biên phía dưới của cái block (Block trong bản vẽ của chủ thớt).

P/S: Mà cũng khó, vì các điểm mới của chủ thớt không hoàn toàn nằm trên đường biên dưới của BLOCK.

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

Pick vào Block mà lấy được tọa độ các điểm nằm trên đường biên phía dưới của cái block bất kỳ thì khó nhưng Block cụ thể như trong bài này thì không khó vì kích thước hình học của mương (chiều rộng đáy, chiều dày, mái dốc) đã có, nếu không có block thì cũng tính được từ toạ độ đường thiết kế.

  • 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

Pick vào Block mà lấy được tọa độ các điểm nằm trên đường biên phía dưới của cái block bất kỳ thì khó nhưng Block cụ thể như trong bài này thì không khó vì kích thước hình học của mương (chiều rộng đáy, chiều dày, mái dốc) đã có, nếu không có block thì cũng tính được từ toạ độ đường thiết kế.

Cám ơn bác đã chỉ giáo, đúng là theo hướng này có thể giải quyết được vấn đề của chủ thớt. Chỉ có điều (+ - * / sin cos hơi loằng ngoằng), vả lại khi kích thước mương thay đổi thì phải thay đổi trong lisp 1 tý.

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ác Tue_NV: Có cách nào 1 pick mà lấy được các đỉnh như chỉ địnhcủa chủ thớt không?

@VoHoan: Hình như phải dịch Pline thì mới tính được khối lượng, còn vẽ lại Pline mới thì không?

Mình sẽ lấy tọa độ các đỉnh theo tọa độ của các đỉnh đường đáy rãnh, cái này làm được.

Mục đính của mình là để tính KL đào rãnh nên không được xóa các đường pline của khuôn rãnh.

Tue_NV xem lại giúp lisp "uppl" không cập nhật được tọa độ cho đường pline. khi chạy thì list "lst-dinh-des" nhận được giá trị dịch tọa độ 1 khoảng X=1.0 Y=1.0, hình như hàm "subst" chưa tác động vào biến ent thì phả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

Mình sẽ lấy tọa độ các đỉnh theo tọa độ của các đỉnh đường đáy rãnh, cái này làm được.

Mục đính của mình là để tính KL đào rãnh nên không được xóa các đường pline của khuôn rãnh.

Tue_NV xem lại giúp lisp "uppl" không cập nhật được tọa độ cho đường pline. khi chạy thì list "lst-dinh-des" nhận được giá trị dịch tọa độ 1 khoảng X=1.0 Y=1.0, hình như hàm "subst" chưa tác động vào biến ent thì phải?

 

Bạn thử lại xem nhé!

Nếu không được, bạn upload file mình xem

 

(defun c:uppl(/ e ent lst-dinh-res lst-dinh-des)
  (setq e (car(entsel "\nChon PLINE :")))
  (setq ent (entget e))
  (setq lst-dinh-res (vl-remove-if-not '(lambda(x) (= (car x) 10)) ent))
  (setq lst-dinh-des (mapcar '(lambda(x) (list (car x) (+ (cadr x) 1.0) (+ (caddr x) 1.0) 0.0)) lst-dinh-res))
  (mapcar '(lambda(x y) (setq ent (subst x y ent)))  lst-dinh-des lst-dinh-res)
  (entmod ent)
)

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 đã chỉ giáo, đúng là theo hướng này có thể giải quyết được vấn đề của chủ thớt. Chỉ có điều (+ - * / sin cos hơi loằng ngoằng), vả lại khi kích thước mương thay đổi thì phải thay đổi trong lisp 1 tý.

 

Đường biên nó là 1 Pline (màu số 8) nằm trong Block đó 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

 

Bạn thử lại xem nhé!

Nếu không được, bạn upload file mình xem

 

Mình chỉ thử với 1 pline bất kỳ thôi nhưng lisp không thực hiện được

Tue_NV mới chỉ sửa đoạn này thôi thì phải: (defun c:uppl(/ e ent lst-dinh-res lst-dinh-des)

Mình nghĩ là do đoạn này không thực hiện được: (mapcar '(lambda(x y) (setq ent (subst x y ent))) lst-dinh-des lst-dinh-res)

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 sửa lại lisp của Tue_NV như thế này thì chạy được rồi

 

(defun c:uppl( / e ent lst-dinh-res lst-dinh-des)

  (setq e (car(entsel "\nChon PLINE :")))
  (setq ent (entget e))
  ;(setq lst-dinh-res (vl-remove-if-not '(lambda(x) (= (car x) 10)) ent))
  ;(setq lst-dinh-des (mapcar '(lambda(x) (list (car x) (+ (cadr x) 1.0) (+ (caddr x) 1.0) 0.0)) lst-dinh-res))
  ;(mapcar '(lambda(x y) (setq ent (subst x y ent)))  lst-dinh-des lst-dinh-res)
  (foreach x ent 
(if (= (car x) 10)
(progn (setq lstTD (list (car x) (+ (cadr x) 1.0) (+ (caddr x) 1.0) 0.0))
(setq ent (subst lstTD x ent)))
)
)
  (entmod ent)
)
 

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

Đường biên nó là 1 Pline (màu số 8) nằm trong Block đó bạn

Điều này thì em biết, nhưng chưa đáp ứng được nhu cầu của bài toán vì các đỉnh của Pline màu số 8 đó chưa đủ để phục vụ cho đường màu 5.

 

 

Mình sẽ lấy tọa độ các đỉnh theo tọa độ của các đỉnh đường đáy rãnh, cái này làm được.

Mục đính của mình là để tính KL đào rãnh nên không được xóa các đường pline của khuôn rãnh.

Tue_NV xem lại giúp lisp "uppl" không cập nhật được tọa độ cho đường pline. khi chạy thì list "lst-dinh-des" nhận được giá trị dịch tọa độ 1 khoảng X=1.0 Y=1.0, hình như hàm "subst" chưa tác động vào biến ent thì phải?

Theo mình đoán: đường pline của khuôn rãnh đó chỉ khác với pline bình thường là có xdata (liên quan đến tính khối lượng).

Nếu vậy một cách khác là vẽ pline mới và sao chép xdata từ cũ sang mới rồi xóa cũ.

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 không biết cơ chế tính toán khối lượng của phần mềm bạn có.  Đây là lisp vẽ lại Pline (có sao chép, gán xdata), bạn thử chạy lisp, rồi chạy phần mềm của bạn xem nó có tính được khối lượng không nhé!

(defun c:ppl (/ get_xdata LM:SubstNth set_xdata ent hna i lsp lst n npl p0 p1 p1a p2 p2a p3 p3a p4 p4a p5 p5a p6 p6a ss xdata)

(vl-load-com)

(defun get_xdata (ent / typ val)

(vla-getxdata (vlax-ename->vla-object ent) "" 'typ 'val)

(if (and typ val)

(apply 'mapcar

(cons 'cons

(list (vlax-safearray->list typ) (mapcar 'vlax-variant-value (vlax-safearray->list val)))))))

(defun LM:SubstNth (a n l / i)

(setq i -1)

(mapcar '(lambda (x)

(if (= (setq i (1+ i)) n)

a

x))

l))

(defun set_xdata (obj lst / xtyp xval DxfListToVariants)

(defun DxfListToVariants (lst typeSymbol valueSymbol)

(set typeSymbol

(vlax-make-variant

(vlax-safearray-fill (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length lst))))

(mapcar 'car lst))))

(set valueSymbol

(vlax-make-variant

(vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length lst))))

(mapcar '(lambda (x)

(if (listp (setq x (cdr x)))

(vlax-3d-point x)

(vlax-make-variant x)))

lst)))))

(DxfListToVariants lst 'xtyp 'xval)

(vla-SetXdata obj xtyp xval))

;; Main ---

(princ "\Chon block ranh: ")

(if (setq ss (ssget "_+.:E:S" (list (cons 0 "INSERT") (cons 2 "`*U*,Ranh BT"))))

(progn (setq p0 (cdr (assoc 10 (entget (ssname ss 0)))))

(setq p1 (list (- (car p0) 0.6) (+ (cadr p0) 0.4) 0)

p1a (polar p1 (/ (* 5 pi) 4) 0.07)

p6 (list (+ (car p0) 0.6) (+ (cadr p0) 0.4) 0)

p6a (polar p6 (/ (* 7 pi) 4) 0.07)

p2a (polar p6 (/ (* 7 pi) 4) 0.09)

p2 (polar p1 (/ (* 5 pi) 4) 0.09)

p2a (polar p6 (/ (* 7 pi) 4) 0.09)

p3 (polar p2 (/ (* 7 pi) 4) (* (- 0.49 (/ 0.09 (sqrt 2))) (sqrt 2)))

p3a (polar p1a (/ (* 7 pi) 4) (* (- 0.47 (/ 0.07 (sqrt 2))) (sqrt 2)))

p4 (polar p2a (/ (* 5 pi) 4) (* (- 0.49 (/ 0.09 (sqrt 2))) (sqrt 2)))

p4a (polar p6a (/ (* 5 pi) 4) (* (- 0.47 (/ 0.07 (sqrt 2))) (sqrt 2)))

p5 (polar p6 (/ (* 3 pi) 2) (* 0.09 (sqrt 2)))

p5a (polar p6 (/ (* 3 pi) 2) (* 0.07 (sqrt 2))))

(while (setq ent (car (entsel "\nChon Pline: ")))

(setq lst (vl-remove-if-not '(lambda (x) (member (car x) '(0 100 8 6 48 62))) (cdr (entget ent)))

xdata (get_xdata ent))

(if (eq (cdr (nth 10 xdata)) "Cat")

(setq lsp (list p1 p2 p3 p4 p5 p6))

(setq lsp (list p1a p3a p4a p5a)))

(setq lst (append lst (list (cons 90 (length lsp))))

lst (append lst (mapcar '(lambda (x) (cons 10 x)) lsp))

npl (entmakex Lst)

hna (cdr (assoc 5 (entget npl)))

xdata (LM:SubstNth (cons 1000 hna) 4 xdata))

(if xdata

(Set_Xdata (vlax-ename->vla-object npl) xdata))

(entdel ent))))

(princ))

Bổ sung: Pick Block trước rồi pick lần lượt các pline (Blue, red).

Chỉnh sửa theo quocmanh04tt
  • 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

Mình sửa lại lisp của Tue_NV như thế này thì chạy được rồi

Bạn thử Lisp này xem, Pick chọn các pline theo yêu cầu 4 lần là Ok :)

(defun c:Plnew (/ doc ms e1 ob1 pb pn obj lp pk e2 ob2 lay pd pc px obl e3 ob3 
obk lk p1 p2 e4 ob4 layy tmp plObj tmk plObk) 
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-StartUndoMark doc) (setq ms (vla-get-modelspace doc))
(setq e1 (entsel "\nPick chon Pline White trong Block : "))
(setq ob1 (vlax-ename->vla-object (car (nentselp (cadr e1)))))
(setq pb (cdr (assoc 10 (entget (car e1)))) pn (polar pb (* pi 1.5) 0.09))
(setq obj (vla-copy ob1)) (vla-move obj  (vlax-3d-point 0 -0.09 0) (vlax-3d-point pn))
(setq lp (vlax-get obj 'Coordinates) lp (cddddr lp) pk (polar pb (* pi 1.5) 0.07))
(setq e2 (car (entsel "\nPick chon Pline Blue : ")))
(setq ob2 (vlax-ename->vla-object e2) lay (vla-get-layer ob2))
(setq pd (vlax-curve-getStartPoint ob2) pc (vlax-curve-getEndPoint ob2)
px (polar pc (* pi 1.5) 5) obl (vla-AddLine ms (vlax-3d-point pc) (vlax-3d-point px)))
(setq e3 (entsel "\nPick chon Pline Yellow trong Block : "))
(setq ob3 (vlax-ename->vla-object (car (nentselp (cadr e3)))))
(setq obk (vla-copy ob3)) (vla-move obk  (vlax-3d-point 0 -0.07 0) (vlax-3d-point pk))
(setq p1 (car (Giao obl obj)) p2 (cadr (Giao obl obk)))
(setq lk (vlax-get obk 'Coordinates) lk (reverse (cddr (reverse (cddddr lk)))))
(setq e4 (car (entsel "\nPick chon Pline Red : ")))
(setq ob4 (vlax-ename->vla-object e4))
(setq lp (append (list (car pc) (cadr pc)) (list (car p2) (cadr p2)) (list (car p1) (cadr p1)) lp 
(list (car pd) (cadr pd))))
(setq tmp (vlax-make-safearray vlax-vbDouble (cons 0 (- (length lp) 1))))
(vlax-safearray-fill tmp lp) (setq plObj (vla-AddLightWeightPolyline ms tmp))
(setq lk (append (list (car p2) (cadr p2)) lk))
(setq tmk (vlax-make-safearray vlax-vbDouble (cons 0 (- (length lk) 1))))
(vlax-safearray-fill tmk lk) (setq plObk (vla-AddLightWeightPolyline ms tmk))
(vla-put-layer plObj lay) (vla-put-layer plObk "Taluy") (vla-delete obj) (vla-delete ob2)
(vla-delete obl) (vla-delete ob4) (vla-delete obk) (vla-EndUndoMark doc) (princ))
(defun Giao (o1 o2 / l0 l)
(setq l (vlax-invoke o1 'IntersectWith o2 0)) 
(while l (setq l0 (append l0 (list (list (car l) (cadr l) (caddr l)))) l (cdddr l))	) l0) 

PS : Lisp chỉ đáp ứng theo yêu câu bản vẽ của bạn, xài bản vẽ khác ko đảm bảo :D

  • 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ác bác cho em hỏi : em có một danh sách tên lst (mã đối tượng hatch):

Code:((-1 . <Entity name: 7ef96030>) (0 . HATCH) (330 . <Entity name: 7ef9e6e8>) (5 . 1DE7E) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 002) (62 . 4) (6 . Continuous) (370 . 0) (100 . AcDbHatch) (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . SOLID) (70 . 1) (71 . 0) (91 . 1) (92 . 1) (93 . 1) (72 . 2) (10 -183701.0 1320.67 0.0) (40 . 7.0) (50 . 0.0) (51 . 6.28319) (73 . 1) (97 . 0) (75 . 0) (76 . 1) (98 . 1) (10 0.0 0.0 0.0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 0) (462 . 0.0) (453 . 0) (470 . ))
 
  em muốn lấy tâm của đối tượng này là (-183701.0 1320.76 0.0) em sử dụng hàm: (cdr (ssoc 10 lst))
nhưng kết quả dc đoạn list ( 0.0 0.0 0.0) tức là đoạn list (10 0.0 0.0 0.0) ở trên.
các bác giúp em lấy đoạn tâm với ( mà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ác bác cho em hỏi : em có một danh sách tên lst (mã đối tượng hatch):

Code:((-1 . <Entity name: 7ef96030>) (0 . HATCH) (330 . <Entity name: 7ef9e6e8>) (5 . 1DE7E) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 002) (62 . 4) (6 . Continuous) (370 . 0) (100 . AcDbHatch) (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . SOLID) (70 . 1) (71 . 0) (91 . 1) (92 . 1) (93 . 1) (72 . 2) (10 -183701.0 1320.67 0.0) (40 . 7.0) (50 . 0.0) (51 . 6.28319) (73 . 1) (97 . 0) (75 . 0) (76 . 1) (98 . 1) (10 0.0 0.0 0.0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 0) (462 . 0.0) (453 . 0) (470 . ))
 
  em muốn lấy tâm của đối tượng này là (-183701.0 1320.76 0.0) em sử dụng hàm: (cdr (ssoc 10 lst))
nhưng kết quả dc đoạn list ( 0.0 0.0 0.0) tức là đoạn list (10 0.0 0.0 0.0) ở trên.
các bác giúp em lấy đoạn tâm với ( màu đỏ)

 

Bạn phải hiểu là hàm assoc nó duyệt qua lst khi nó phát hiện thằng nào có (assoc 10 lst) thì dừng lại và trả kết quả . Bạn có thể dùng lấy nó bằng nhiều cách :)

Chẳng hạn như dùng : (vl-remove-if-not '(lambda (x) (= 10 (car x))) lst) rồi lấy tâm :)

  • 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ác bác cho em hỏi : em có một danh sách tên lst (mã đối tượng hatch):

Code:((-1 . <Entity name: 7ef96030>) (0 . HATCH) (330 . <Entity name: 7ef9e6e8>) (5 . 1DE7E) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 002) (62 . 4) (6 . Continuous) (370 . 0) (100 . AcDbHatch) (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . SOLID) (70 . 1) (71 . 0) (91 . 1) (92 . 1) (93 . 1) (72 . 2) (10 -183701.0 1320.67 0.0) (40 . 7.0) (50 . 0.0) (51 . 6.28319) (73 . 1) (97 . 0) (75 . 0) (76 . 1) (98 . 1) (10 0.0 0.0 0.0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 0) (462 . 0.0) (453 . 0) (470 . ))
 
  em muốn lấy tâm của đối tượng này là (-183701.0 1320.76 0.0) em sử dụng hàm: (cdr (ssoc 10 lst))
nhưng kết quả dc đoạn list ( 0.0 0.0 0.0) tức là đoạn list (10 0.0 0.0 0.0) ở trên.
các bác giúp em lấy đoạn tâm với ( màu đỏ)

 

 

Bạn có thể sử  dụng: 

(cdr (assoc 10 (member (assoc 2 lst) lst)))

  • 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ác bạn thân mến.

Mình muốn viết một hàm tăng hay giảm 1 đơn vị trong hệ 16 (dữ liệu vào và ra đều ở hệ 16) nhưng chưa biết làm cách nào. Bạn nào biết giúp mình với.

Cám ơn các 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

Ở đây có các hàm tổng quát để đổi từ hexa sang decimal và ngược lại:

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/decimal-to-hexadecimal/td-p/2873916

Tuy nhiên, tôi đã đọc 1 bài của ThuyLinh313 có thuật toán rất hay để tăng hay giảm 1 đơn vị trong hệ 16, bạn search hay hỏi bạn ấy 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

Ở đây có các hàm tổng quát để đổi từ hexa sang decimal và ngược lại:

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/decimal-to-hexadecimal/td-p/2873916

Tuy nhiên, tôi đã đọc 1 bài của ThuyLinh313 có thuật toán rất hay để tăng hay giảm 1 đơn vị trong hệ 16, bạn search hay hỏi bạn ấy xem

Hy vọng bạn ấy vào đây hay các bạn khác sẽ thấy và giúp 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

Ở đây có các hàm tổng quát để đổi từ hexa sang decimal và ngược lại:

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/decimal-to-hexadecimal/td-p/2873916

Tuy nhiên, tôi đã đọc 1 bài của ThuyLinh313 có thuật toán rất hay để tăng hay giảm 1 đơn vị trong hệ 16, bạn search hay hỏi bạn ấy xem

 

Bạn từng là thành viên của nhóm CADMagic à? Nó nằm trong lệnh fakedim của mình chia sẻ trong nhóm CADMagic chứ chưa có chia sẻ lên Cadviet.

 

Bạn TRUNGNGAMY: bạn tải code này nhé, mình viết nó để đếm dữ đối tượng tạo ra trong bản vẽ theo handle

(defun handent-next (hex / lt id str)
 (setq str (vl-string-right-trim "F" hex) id (strlen str))
 (setq lt '(("0" . "1") ("1" . "2") ("2" . "3") ("3" . "4")
            ("4" . "5") ("5" . "6") ("6" . "7") ("7" . "8")
            ("8" . "9") ("9" . "A") ("A" . "B") ("B" . "C")
            ("C" . "D") ("D" . "E") ("E" . "F")))
 (cond ((= str "") (substr "1000000" 1 (1+ (strlen hex))))
       ((= str hex) (strcat (substr str 1 (1- id)) (cdr (assoc (substr str id) lt))))
       (t (strcat (substr str 1 (1- id)) (cdr (assoc (substr str id) lt)) (substr "000000" 1 (- (strlen hex) id))))))
  • 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

 

Bạn từng là thành viên của nhóm CADMagic à? Nó nằm trong lệnh fakedim của mình chia sẻ trong nhóm CADMagic chứ chưa có chia sẻ lên Cadviet.

 

 

Tôi không phải thành viên của nhóm CADMagic nhưng thấy trong cadviet có 1 số mem xuất sắc nằm trong nhóm này nên có search trang web của nhóm nhưng chưa tìm ra. Còn bài này là do ketxu share ở topic này http://www.cadviet.com/forum/topic/81316-xin-lisp-scale-hinh-ve-thi-block-att-text-dim-hatch-khong-doi/ nhưng hôm qua không nhớ key nên tìm không thấ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

 

Bạn từng là thành viên của nhóm CADMagic à? Nó nằm trong lệnh fakedim của mình chia sẻ trong nhóm CADMagic chứ chưa có chia sẻ lên Cadviet.

 

Bạn TRUNGNGAMY: bạn tải code này nhé, mình viết nó để đếm dữ đối tượng tạo ra trong bản vẽ theo handle

(defun handent-next (hex / lt id str)
 (setq str (vl-string-right-trim "F" hex) id (strlen str))
 (setq lt '(("0" . "1") ("1" . "2") ("2" . "3") ("3" . "4")
            ("4" . "5") ("5" . "6") ("6" . "7") ("7" . "8")
            ("8" . "9") ("9" . "A") ("A" . "B") ("B" . "C")
            ("C" . "D") ("D" . "E") ("E" . "F")))
 (cond ((= str "") (substr "1000000" 1 (1+ (strlen hex))))
       ((= str hex) (strcat (substr str 1 (1- id)) (cdr (assoc (substr str id) lt))))
       (t (strcat (substr str 1 (1- id)) (cdr (assoc (substr str id) lt)) (substr "000000" 1 (- (strlen hex) id))))))

Mấy hôm nay có việc đi xa nên kg vào CV. Cám ơn bạn đã giúp. Nhưng đó là hàm tăng, bạn viết nốt giúp hàm giảm nhé. Mình dùng để đi tới đi lui các đối tượng của cad và kiểm soát xem các đối tượng đang quan tâm có cái nào bị xoá kg

Một lần nữa 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

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

×