Duong Nhat Duy
-
Số lượng nội dung
550 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
101
Bài đăng được đăng bởi Duong Nhat Duy
-
-
TEXTLAYER thì mình thử cad18 lại không phải là 1 biến, tóm lại khi bạn khám phá ra 1 biến nào đấy bị thay đổi theo bản vẽ, thì việc sửa lại rất đơn giản, chỉ cần vào bản vẽ không lỗi xem giá trị biến đó là gì sau đó sang bản lỗi sửa lại là xong.
Lưu ý: 1 số biến ví dụ HPLAYER, sau khi nhập lệnh, cad nó thông báo là "use current", nhưng thực tế giá trị đúng nó lại là "." => Tổng quát nhất, hãy dùng lệnh: (getvar 'tenbien) (tenbien bất kỳ đặt sau dấu nháy đơn). Ngoài ra có thể đưa vào lisp theo ý muốn bằng cách dùng (setvar... như mình đã làm ở trên.
-
Dim với Hatch thì cài 2 biến bên dưới còn Textlayer thì mình chưa nghe bao giờ, tức là bạn tạo Text xong và layer Text vừa tạo lại không phải layer hiện hành ?
(defun C:se () (setvar 'DIMLAYER ".") (setvar 'HPLAYER ".") (princ) )
-
10 giờ trước, amateurday đã nói:Không dùng được bác ơi, bác add suỵt mã của ai đó rồi. Lại hộ mình với.
Có chút nhầm lẫn, mình đã sửa lại rồi nhé :v
- 1
-
3 giờ trước, tannguyen291 đã nói:Mình đang nghiên cứu ra rồi nhé. sử dụng hàm (getpropertyvalue [ename] [property])
property là string có dạng : "AcDbDynBlockProperty" + "distance..."
nếu có giá trị là hiện nếu error là ẩn.
đi kèm với cặp lệnh vl-catch-all-error-p vl-catch-all-apply thì ok luôn.
(defun c:test (/ ent lst lstcheck lstparavisible ) (setq ent (car (entsel)) lst (LM:getdynprops (vlax-ename->vla-object ent)) lst (vl-remove-if-not '(lambda (x) (eq 'REAL (type (cdr x)))) lst) lst (mapcar '(lambda (x) (strcat "AcDbDynBlockProperty" (car x)) ) lst) lstcheck (mapcar '(lambda (x) (vl-catch-all-apply 'getpropertyvalue (list ent x))) lst) lstparavisible (mapcar '(lambda (a b) (if (not (vl-catch-all-error-p b)) (cons (substr a 21) b) ) ) lst lstcheck ) ) (vl-remove nil lstparavisible) ) (defun LM:getdynprops (blk) (mapcar '(lambda (x) (cons (vla-get-propertyname x) (vlax-get x 'value)) ) (vlax-invoke blk 'getdynamicblockproperties) ) )
4 giờ trước, snowman.hms đã nói:blocreference(insert) -> blockrecord -> xdict -> acad_evaluation_graph -> blockvisibilityparameter (dxf 360) -> filter dxf 333 (*parameter)
tham khảo bài viết của Gile: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/get-list-of-parameters-being-used-in-block-without-vla-vlax/m-p/8461420#M378276
Tuyệt vời, cảm ơn các bác đã trợ giúp nhé !
-
-
-
54 phút trước, tannguyen291 đã nói:Mình không biết bạn DUY đang làm gì nhưng phải dùng đến lisp kiểu này cho thấy phải thực hiện trên rất nhiều đối tượng chứ không phải 1. bạn không thể nentsel liên tục được.
việc explode cũng chỉ làm với 1 block mẫu để lấy danh sách thông tin. sau đó cứ thế chạy lisp lấy độ dài.
Mình đang định thống kê các giá trị Parameters của nhiều Block ấy bạn, như lệnh ATTOUT của cad nhưng là cho block động á. Cơ bản dựa vào mấy hàm của Leemac thì thống kê được, nhưng nó sẽ thống kê hết Parameters của 1 Block, khi gặp Block có nhiều trạng thái, nó vẫn thống kê Parameters ẩn, cái này gây khó khăn cho các thao tác tính toán trong excel về sau.
-
15 giờ trước, limfx đã nói:Hy vọng lần này đúng ý anh!
(setq blk (vlax-ename->vla-object (car (entsel))))
(setq prptext "Distance")
(if
(and
(vlax-property-available-p blk 'effectivename)
(setq blkk (vla-item (vla-get-blocks (vla-get-document blk)) (vla-get-effectivename blk)))
(= :vlax-true (vla-get-isdynamicblock blk))
(= :vlax-true (vla-get-hasextensiondictionary blk))
(setq vis
(vl-some
'(lambda ( pair )
(if (and (= 360 (car pair)) (= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair)))))) (cdr pair)))
(dictsearch (vlax-vla-object->ename (vla-getextensiondictionary blkk)) "ACAD_ENHANCEDBLOCK")) )
)
(setq visibilityparametername (strcase (cdr (assoc 301 (entget vis)))))
)
(setq state (vl-some '(lambda ( x ) (if (= visibilityparametername (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties)))
(setq prp (strcase (strcat prptext (StringSliptLastNumber state))))(setq prpval (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties)))
(setq lst (list state prpval))(defun StringSliptLastNumber (str)
(setq num "")
(setq i (strlen str))
(while (and (> i 0) (member (substr str i 1) '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")))
(setq num (strcat (substr str i 1) num))
(setq i (1- i))
)
num
)Mình hỏi ý không phải chứ bạn đang code = chatGPT hả ??? Hàm này nó lấy cái số "1" trong cái tên "State1" rồi lắp vào chữ "Distance" mà bạn ???
-
4 giờ trước, limfx đã nói:Anh có thể gửi file cad chứa block dynamic em kiểm tra thử, có thể chưa hiểu ý anh lắm!
File Drawing1 mình gửi kèm ban đầu kìa bạn
-
3 giờ trước, limfx đã nói:Hy vọng cái hàm này hợp với ý của Anh!
(setq blo (vlax-ename->vla-object (car (entsel))))
(getdynamicblockproperties_limfx blo)
(defun getdynamicblockproperties_limfx (blo)
(setq props (vlax-invoke blo 'getdynamicblockproperties))
(mapcar
'(lambda (prop)
(print (cons (vla-get-propertyname prop) (vlax-get prop 'value)))
)
(vl-remove-if-not '(lambda (x) (and (vlax-get x 'show) (vlax-get x 'value))) props )
)
);endSao mình test thấy nó vẫn hiện cả 2 distance bạn ơi ?
-
Mọi người cho mình hỏi về Block động.
Mình có hàm thống kê Parameters của Leemac:
(defun LM:getdynprops (blk) (mapcar '(lambda (x) (cons (vla-get-propertyname x) (vlax-get x 'value)) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;(LM:getdynprops (vlax-ename->vla-object (car (entsel))))
Nhưng khi áp dụng cho Block có nhiều trạng thái, ví dụ: Drawing1.dwg: Distance1 nằm trong State1, Distance2 nằm trong State2, thì hàm trên vẫn thống kê cả 2 cái Distance.
Vậy cho mình hỏi có cách nào nhận biết Parameter nào đang hiển thị trong trạng thái nào không nhỉ ?
Cảm ơn các bạn !
-
6 giờ trước, mr.thanh2610 đã nói:Cảm ơn bài viết, mình có thể nhờ bạn chỉnh sửa tự tạo block điểm chèn tự động tại tâm của Block không ạ, không cần pick điểm, cảm ơn
- 1
-
23 phút trước, TIENTRIDATAIS2N4 đã nói:CỦA MÌNH NÓ HIỆN CÁI TAG LÚC DÙNG CHO BLOCK ATT NHỈ
Thì bạn muốn đánh số cho tag nào thì chọn tag đó
-
15 phút trước, Duyhai99 đã nói:Lệnh LMIN và LMAX nhé bạn !
- 1
-
Hàm lấy tên Block nên sửa thành: (vì có thể lỗi như bác Cường nói)
(setq BN (vla-get-effectivename (vlax-ename->vla-object (car (entsel "\nChon Block muon chen:")))))
Vì lisp dùng command insert nên cần thêm bật tắt bắt điểm
(setq snap (getvar "OSMODE")) (setq otho (getvar "ORTHOMODE")) (setvar "OSMODE" 0) (setvar "ORTHOMODE" 0) ;;; (command "INSERT" ......) ;;; (setvar "OSMODE" snap) (setvar "ORTHOMODE" otho)
-
45 phút trước, Trinh Tuan đã nói:Các bác ơi link down không còn khả dụng, bác cho e xin lại lisp với ạ. E cảm ơn bác nhiều.
mình đã up lên gg drive rồi nhé, bạn lên đầu topic mà lấy link
-
Lisp này mình sưu tầm được của Leemac, nó có thể dùng cho Pline hở hoặc kín, hoặc Pline có đường cong (nó tự sắt nhỏ ra để làm wipeout), và không bị lỗi độ dày.
- 2
-
17 phút trước, tuk45bn đã nói:Cái này thêm số 0 đằng trước những số từ 1-9 nữa thì hay anh ah
Option này nằm ở mục "Số chữ số tối thiểu" b nhé, b chịu khó đọc kỹ mấy dòng hướng dẫn nhé, mình đã đề cập đến rồi, b nhập 2 là ra 01 02 03, ... 09 10 11 12
-
4 giờ trước, amateurday đã nói:Tội lỗi, nhưng phải tranh thủ lúc bác ấy chưa thương mại hóa mà trải nghiệm. Hề hề.
WXP1AB89NYC5
Mà không biết mã máy tạo kiểu gì mà sao định dạng nó lại mỗi người mỗi khác nhau thế bác nhỉ?
Cảm ơn bác nhé.
Mình đã add mã của bạn r nhé.
Mã máy là số seri của ổ cứng đó b, cái này b phải hỏi mấy a làm ổ cứng chứ mình thì chịu :v
- 2
-
1 giờ} trướ}c, ronaldo2002 đã nói:Mở bát nào
5CD2_E482_3150_D040.
thanks bácMình add r nhé, b thử load lisp lại xem dùng được chưa ?
-
Gửi đến các bạn 1 lisp Dim tự động, có thể dim hàng loạt các đối tượng theo các yêu cầu đề bài khác nhau (ví dụ: dim qua giao cắt, block; dim bán kính, vát góc; ...)
Tên lệnh:
TL - Thiết lập (Dimstyle, layer, khoảng cách chữ đến chân dim, ...)
TLD - Thiết lập dim tự động theo layer
DA1 - Dim chiều dài các đối tượng riêng lẻ
DA2 - Dim chiều dài các đối tượng qua giao điểm, điểm đặt Block
DA3 - Dim chiều dài các đối tượng qua các điểm tùy chọn
DQ1 - Dim chiều dài giữa 2 đầu đối tượng (tổng chiều dài từng đối tượng)
DQ2 - Dim chiều dài giữa 2 đầu đối tượng (tổng chiều dài từng đối tượng)
DB1 - Dim khoảng cách giữa các Block
VG - Dim vát góc
DAR1 - Dim chiều dài cung
DRA1 - Dim bán kính cung
DLI1 - Dim Linear qua các giao điểm giữa 2 điểm chọn
DAL1 - Dim Aligned qua các giao điểm giữa 2 điểm chọn
DCD - Dim khoảng cách giữa 2 điểm chọn
?? - Hiển thị bảng tên lệnh
Hướng dẫn chi tiết các lệnh:
Ví dụ minh họa:
- TLD: Thiết lập dim tự động: style, layer, tiền tố, hậu tố của dim tùy biến theo layer của các đối tượng cần dim
- DA1: Dim chiều dài các đối tượng riêng lẻ (Line, Pline, Arc), cong dim cong, thẳng dim thẳng
- DA2: Dim chiều dài các đối tượng qua giao điểm, điểm đặt Block (ngoài ra dim tự động ngắt tại đỉnh pline)
- DA3: Dim chiều dài các đối tượng qua các điểm tùy chọn (vị trí ngắt dim có thể chọn 1 hoặc nhiều các option bên dưới)
- DQ1, DQ2: Dim chiều dài giữa 2 đầu đối tượng (tổng chiều dài từng đối tượng). Lưu ý: ở ví dụ bên dưới, kiểu dim hiện hành là dim không có "Dim line 2" nên trông giống như mũi tên, bản chất vẫn là dim bình thường. Lệnh DQ2 có tác dụng đảo ngược hướng mũi tên này. Ngoài ra, nếu dùng các kiểu dim thông thường thì 2 lệnh này cho ra 1 kết quả như nhau.
- DB1: Dim khoảng cách giữa các Block. Có thể lựa chọn thứ tự từ trên xuống dưới, phải qua trái, thứ tự pick chọn,...
- VG: Dim vát góc. Lưu ý nhập chiều dài vát góc tối đa trong lệnh TL, để tránh dim nhầm các vị trí không phải vát góc
- DAR1: Dim chiều dài cung (dùng cho cả Arc và Pline có chứa cung)
- DRA1: Dim bán kính cung (dùng cho cả Arc và Pline có chứa cung). Lưu ý khai báo bán kính tối thiểu, tối đa trong lệnh TL
- DLI1: Dim Linear qua các giao điểm giữa 2 điểm pick chọn
- DAL1: Dim Aligned qua các giao điểm giữa 2 điểm pick chọn. Lưu ý: ở ví dụ bên dưới, muốn dim theo phương vuông góc với các đường màu xanh, ta bắt điểm vuông góc với nó là được
- DCD: Dim khoảng cách giữa 2 điểm pick chọn. Lệnh này thì đơn giản không có gì để mô tả :)). Lưu ý: có thể nhập khoảng cách điểm thứ 2 so với điểm thứ nhất tùy ý.
Lưu ý:
Lisp khá đồ sộ nên mình không share mã nguồn.
Để sử dụng lisp các bạn vui lòng gửi Mã máy (thông báo hiện lên ngay sau khi load lisp), có thể gửi trên forum hoặc qua zalo mình: 0922161194.
Mã máy mình add lên server là có thể dùng được ngay, ai gửi mã mà chưa thấy mình phản hồi thì thỉnh thoảng cứ load thử lại lisp, dùng được nghĩa là mình đã add rồi.
Lisp cũng mới viết nên nhờ các bạn dùng và góp ý, mai kia hoàn chỉnh mới tính đến chuyện mua bán sau.
File lisp:
- v1.02 (29/04/2024): https://drive.google.com/drive/u/1/folders/1tAt7uRmllwFAd0UJf6hf-5FnzAI55IDA
Chúc các bạn thành công :)))
- 6
- 3
-
Bây giờ có 2 trường phái: 1 là những con người của quá khứ trung thành với cad07, 2 là những người đến từ tương lai, đầu năm 23 24 nhưng đã dùng cad 24 25 rồi :))).
Mình thì ở giữa, từ khi cad nó lên đời xong tự nhiên thêm mấy cái biến ngớ ngẩn ví như TRIMSEXTENDMODE (mặc định là 1 chứ ko phải 0) thì mình ko còn quá hào hứng với cad nữa rồi, vẫn trung thành với cad18 và 20.
- 1
-
15 giờ trước, quanghapham đã nói:ok bạn ơi, mình đang dùng cad 22 với 24 đều không được, thôi dùng cái đánh stt theo thứ tự tự chọn cũng được nhưng hơi lâu chút :V
Theo các tiền bối mách bảo thì bạn hãy thử dùng lệnh LISPSYS, nhập 0, r khởi động lại cad xem có chạy được ko nhé. Cảm ơn các tiền bối nhé !
-
Lisp tính chiều dài, diện tích hàng loạt
trong AutoLisp
Đã đăng · Trả lời báo cáo
1 là bạn khai báo phần thập phân trong lệnh TL, 2 là bạn sửa trực tiếp code như hướng dẫn (sửa trực tiếp thì load lên nó mặc định là 3 số theo ý bạn)