huunhantvxdts 195 Báo cáo bài đăng Đã đăng Tháng 6 19, 2019 Mình có boclk Att có các tag bây giờ mình muốn lấy chiều cao chữ của các Tag Nhờ mọi người ai biết chỉ giùm, cám ơn mọi ngườ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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 19, 2019 23 phút trước, huunhantvxdts đã nói: Mình có boclk Att có các tag bây giờ mình muốn lấy chiều cao chữ của các Tag Nhờ mọi người ai biết chỉ giùm, cám ơn mọi người Cái này theo em thì bác lấy ScaleY của block trước rồi dùng vlax-for duyệt qua từng thành phần của Block, kiểm tra Objectname nếu là AcDbAttribute thì lấy thông tin tag, chiều cao rồi nhân với Scale Y để lấy chiều cao thực tế của Block đó. (vì chiều cao duyệt qua vlax-for là ở tỷ lệ 1-1) 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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 6 19, 2019 Dùng menthod GetAttributes để lấy danh sách att. Kiểm tra att nào có tag đúng theo ý bạn rồi lấy thôi mà. Vì chiều cao text này thay đổi dc nên lấy theo block ko đúng lắm. Test: (mapcar '(lambda(x) (list (vla-get-tagstring x) (vla-get-height x))) (vlax-invoke (vlax-ename->vla-object(car(entsel))) 'GetAttributes)) 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
huunhantvxdts 195 Báo cáo bài đăng Đã đăng Tháng 6 19, 2019 48 phút trước, ngokiet đã nói: Dùng menthod GetAttributes để lấy danh sách att. Kiểm tra att nào có tag đúng theo ý bạn rồi lấy thôi mà. Vì chiều cao text này thay đổi dc nên lấy theo block ko đúng lắm. Test: cadvietlisp.lsp [✎] (mapcar '(lambda(x) (list (vla-get-tagstring x) (vla-get-height x))) (vlax-invoke (vlax-ename->vla-object(car(entsel))) 'GetAttributes)) Cám ơn bạn 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 13 giờ trước, ngokiet đã nói: Dùng menthod GetAttributes để lấy danh sách att. Kiểm tra att nào có tag đúng theo ý bạn rồi lấy thôi mà. Vì chiều cao text này thay đổi dc nên lấy theo block ko đúng lắm. Test: cadvietlisp.lsp [✎] (mapcar '(lambda(x) (list (vla-get-tagstring x) (vla-get-height x))) (vlax-invoke (vlax-ename->vla-object(car(entsel))) 'GetAttributes)) Tiện bác cho em hỏi, có Method nào cho phép chọn đối tượng khác bên trong block không bác, giả sử lấy ra tọa độ Polyline trong 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
Doan Van Ha 3.202 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 Sao không dùng nentsel rồi lấ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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 8 phút trước, Doan Van Ha đã nói: Sao không dùng nentsel rồi lấy? Bác Hạ ơi, nếu dùng Nentsel thì chỉ lấy được của 1 block, và chỉ được 1 Polyline. Nếu lấy được nhiều Polyline trong Block giống dạng Vlax-for nhưng ở tọa độ của block trong Model để lấy tọa độ chuẩn thì cháu chưa biết (ngoài cách phá ra rồi ssget "W", sau đó insert lại) có vẻ không ổn lắm 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
Doan Van Ha 3.202 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 Tham khảo 2 hàm lấy các đối tượng bên trong các blocks chọn. Từ đó kiểm tra thằng nào Polyline để lấy thông tin. ;----- (defun GetBlockEntities (Blk / tStr) (if (tblsearch "BLOCK" Blk) (GetObj (tblobjname "BLOCK" Blk)))) (defun GetObj (bObj) (if (setq bObj (entnext bObj)) (cons bObj (GetObj bObj)))) ;----- (defun C:kk( / nfo items) (if (= (cdr (assoc 0 (setq nfo (entget (car (entsel)))))) "INSERT") (vlax-for item (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 nfo))) (setq items (cons (vlax-vla-object->ename item) items))))) 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 16 phút trước, Doan Van Ha đã nói: Tham khảo 2 hàm lấy các đối tượng bên trong các blocks chọn. Từ đó kiểm tra thằng nào Polyline để lấy thông tin. kk.lsp [✎] ;----- (defun GetBlockEntities (Blk / tStr) (if (tblsearch "BLOCK" Blk) (GetObj (tblobjname "BLOCK" Blk)))) (defun GetObj (bObj) (if (setq bObj (entnext bObj)) (cons bObj (GetObj bObj)))) ;----- (defun C:kk( / nfo items) (if (= (cdr (assoc 0 (setq nfo (entget (car (entsel)))))) "INSERT") (vlax-for item (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 nfo))) (setq items (cons (vlax-vla-object->ename item) items))))) Bác ơi, hàm này của bác như cháu nói ở trên, nó chỉ ra thông tin của các entity ở lúc tạo block, tỷ lệ 1-1, còn khi đã move hoặc ở tỷ lệ khác thì không lấy được tọa độ chuẩn 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
Doan Van Ha 3.202 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 14 phút trước, Doan Nguyen Van đã nói: Bác ơi, hàm này của bác như cháu nói ở trên, nó chỉ ra thông tin của các entity ở lúc tạo block, tỷ lệ 1-1, còn khi đã move hoặc ở tỷ lệ khác thì không lấy được tọa độ chuẩn Phát hiện được ý hay từ câu hỏi của cháu: té ra tọa độ điểm của các entity trong block là cố định dù đã move!!! Thanks. Trong trường hợp này bác sẽ dùng cách này: (command "undo" "begin") lấy (entlast) nổ block lấy các entity sinh ra sau entlast lấy thông tin chúng (command "undo" "end") (command "u") 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 2 phút trước, Doan Van Ha đã nói: Phát hiện được ý hay từ câu hỏi của cháu: té ra tọa độ điểm của các entity trong block là cố định dù đã move!!! Thanks. Trong trường hợp này bác sẽ dùng cách này: (command "undo" "begin") lấy (entlast) nổ block lấy các entity sinh ra sau entlast lấy thông tin chúng (command "undo" "end") (command "u") Ý tưởng của bác khá hay, có lẽ việc lấy entity sau entlast sẽ không bị chọn nhầm so với ssget "W", để cháu test thử xem, thank bá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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 1 giờ} trướ}c, Doan Nguyen Van đã nói: Tiện bác cho em hỏi, có Method nào cho phép chọn đối tượng khác bên trong block không bác, giả sử lấy ra tọa độ Polyline trong block Bác dùng Vlax-dump-object sẽ biết có menthod nào mà. - Menthod có thễ dùng để lấy polyline là Explore Tuy nhiên nó như lệnh explore của Cad. Là tạo ra các object explore. Nhưng nó trả về danh sách object cho bạn kiểm tra cần lấy cái nào. Và xóa cái không cần thiết. Thật ra lấy các attributes thì bạn cũng có thể dùng entnext Entnext block nó trả về att đầu tiên. entnext att dầu nó trả về att tiếp nếu không có thì nó tra về ent có tên là SEQEND. Vì các Att tồn tại là ent của CAD nên có thể chỉnh font, text, style ... như 1 text bình thường. Và khi getattributes thì nó trả về các vbaobject của các att đó. Còn các thành phần khác thì không có obj tương ứng nên ko dc. 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 13 phút trước, ngokiet đã nói: Bác dùng Vlax-dump-object sẽ biết có menthod nào mà. - Menthod có thễ dùng để lấy polyline là Explore Tuy nhiên nó như lệnh explore của Cad. Là tạo ra các object explore. Nhưng nó trả về danh sách object cho bạn kiểm tra cần lấy cái nào. Và xóa cái không cần thiết. Thật ra lấy các attributes thì bạn cũng có thể dùng entnext Entnext block nó trả về att đầu tiên. entnext att dầu nó trả về att tiếp nếu không có thì nó tra về ent có tên là SEQEND. Vì các Att tồn tại là ent của CAD nên có thể chỉnh font, text, style ... như 1 text bình thường. Và khi getattributes thì nó trả về các vbaobject của các att đó. Còn các thành phần khác thì không có obj tương ứng nên ko dc. Cảm ơn bác nhé, cái này e thấy giống vla-expode, mà có vẻ gọn hơn, thank bá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
ngokiet 169 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 17 phút trước, Doan Nguyen Van đã nói: Cảm ơn bác nhé, cái này e thấy giống vla-expode, mà có vẻ gọn hơn, thank bác Là 1 mà. vla vs vlax. Cái GetAttributes kia cũng vậy mà có vla-GetAttributes. 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 6 phút trước, ngokiet đã nói: Là 1 mà. vla vs vlax. Cái GetAttributes kia cũng vậy mà có vla-GetAttributes. Tại dùng Vla-explode thì nó chỉ nổ block thôi chứ không ra List vla như Vlax-invoke 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 169 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 11 phút trước, Doan Nguyen Van đã nói: Tại dùng Vla-explode thì nó chỉ nổ block thôi chứ không ra List vla như Vlax-invoke Có mà bác. Nó dạng variant thôi. (vlax-safearray->list (vlax-variant-value (vla-explode (vlax-ename->vla-object (car(entsel)))))) 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
Doan Nguyen Van 491 Báo cáo bài đăng Đã đăng Tháng 6 20, 2019 43 phút trước, ngokiet đã nói: Có mà bác. Nó dạng variant thôi. (vlax-safearray->list (vlax-variant-value (vla-explode (vlax-ename->vla-object (car(entsel)))))) ^^, thế nên e mới bảo cái Vlax-invoke nó gọn hơ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