mdchuyen
-
Số lượng nội dung
28 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
4
Bài đăng được đăng bởi mdchuyen
-
-
Do bạn không đưa bản vẽ và file excel nên mình chỉ đoán bản vẽ và file excel để làm thử, hướng tiếp cận của mình như sau:
B1: Xuất các text mã căn ra .csv có kèm nội dung text và tọa độ
B2: Dùng hàm Vlookup xử lý để chuyển các căn từ file excel của bạn đã có về cùng với file .csv mà cad xuất ra
B3: Lọc chỉ giữ lại các căn đã bán trên file excel này (mình đang ký hiệu là DB)
B4: xuất ngược lại cad (trước khi xuất xóa hết text mã căn đang có trên cad)
B5: Đổi tên lớp thành lớp DB như hình mình đính kèm
PS: Mình đã gửi tin nhắn để xin bản vẽ và file excel khi test không phải đoán để làm mà bạn không hồi trả lời
-
Vào lúc 25/3/2023 tại 21:35, VoHoan đã nói:Nhờ bác nào viết giúp hàm con mà đầu vào cho 1 điểm P nằm ngoài đường pline pl, tìm điểm N là chân đoạn thẳng vuông góc từ P đến pl, nếu có nhiều điểm N thì chọn điểm mà chiều dài đoạn PN là nhỏ nhất.
Xin cảm ơn!.
Bạn tham khảo nhé
-
6 phút trước, nhimret đã nói:Dùng lisp của bác Tien2005 từ phiên bản đầu tiên, đến phiên bản cuối cùng 2022 v1.1. Rất tốt, nhưng lại không có in layout. Muốn in hàng loạt layout thì phải tạo sheetset hoặc Publish.
Còn lisp của bác NTH2024 hôm nay vừa cài thử, thì về giao diện và tính năng tương tự như bác Biet ve cad, có in layout
Nói chung là nếu như các bác chỉ in ở Model, thì lisp mpl của bác tien2005 hoàn hảo. Nhưng nếu cần in layout nhanh thì bắt buộc phải mua lisp thôi.
P/s: vừa dùng lisp của bác NTH2024, tính năng in ấn đều ngon, nhưng hình như không lưu được setting in ấn (hoặc do mới dùng vài lần chưa mò được hết tính năng). Bác thêm được tự động lưu lại setting thì ổn áp
Bác dùng không đúng bản rồi. Lisp bác tiến có in layout mà
-
5 phút trước, tien2005 đã nói:Chọn theo fence vẫn được nhé, cái nào đầu fence thì in trước
Mình toàn chọn như vậy
-
30 phút trước, traichoi85 đã nói:Hi các bạn.
Nhờ các bạn giúp phát triển lisp có sẵn ( file kèm theo) để chọn được nhiều đối tượng cùng 1 lúc và xóa block bị trùng. có video đính kèm.
isb tha block att theo nut kem theo lenh attout va attin.lsp
Bạn rải block với mục đích làm gì (VD để lấy tọa độ hay sao?) với lisp rải đối tượng trên diễn đàn cũng rất nhiều rồi chỉ là bạn không chịu tìm kiếm thôi
-
45 phút trước, 7o7 đã nói:Có rồi thì có rồi nhiều, nhưng mỗi kiểu bản vẽ lại phải sửa lisp cho phù hợp. Như lisp của bác lấy điểm chèn của text làm điểm tính toán thì không đúng với bản vẽ của thớt là lấy giao điểm cùa 2 đg làm điểm tính toán. Mỗi lisp trên cv đều phải sửa lại cho từng trường hợp mới dùng đc bác @mdchuyenơi.
em nghĩ mình đang hiểu đúng ý của chủ thớt đấy ạ. Vì thỉnh thoảng em cũng cần nội suy như thế khi biết 2 cao độ mình nội suy cao độ nằm trên đường nối 2 text cao độ này bác ạ.
- 1
-
-
32 phút trước, ndtnv đã nói:Chọn Pline khép kín:
(ssget '((0 . "LWPOLYLINE")(-4 . "&")(70 . 129)))
lisp SICP (select in closed pline) chưa xét pline hở có điểm đầu trùng điểm cuối
quá ok rồi bác
-
1 phút trước, Doan Van Ha đã nói:Bạn nên mô tả rõ ràng chứ mở bản vẽ ra mà zoom qua lại hơi khổ
dạ : cụ thể bản vẽ có nhiều đường PL khép kín bên trong có chưa các đối tượng (text, mtext, block, pline hở, line ) và nhiều đối tượng khác nằm ngoài các PL khép kín đó. Giờ Cháu mong muốn có 1 lisp để quét toàn bộ dạng cửa sổ. Kết quả nó chọn các đối tượng chỉ trong các pl khép kín để mình có thể di chuyển hoặc copy ạ
-
-
9 giờ trước, vuhoach đã nói:Tọa độ XY em đánh ví dụ thôi bác. Còn yêu cầu có thể như bác mdchuyen đã nói. Xin lỗi vì topic em viết chưa được rõ ý.
Bài toán em cần giải quyết xin được trích dẫn lời bác mdchuyen "bản vẽ có 2 loại block ( block tĩnh và block thuộc tính ) tại mỗi vị trí bạn ấy cần lấy tọa độ điểm base point của block tĩnh và kèm tên của block att là ghi chú cho mỗi block tĩnh gần nó"
Để giải quyết bài toán đó nếu có 1 lisp mà trực tiếp giải quyết được bài toán thì tuyệt vời.
Còn nếu không thể giải quyết như trên thì như tiêu đề topic em xin nhờ các bác viết 1 lisp có thể move các block thuộc tính đến các point nằm gần đó (các point này thì được tạo ra bằng cách dùng 1 lisp khác (đã có) convert các block tĩnh kia mà thành)
Mình đã hiểu và biết hướng giải quyết đối với bản vẽ bạn gửi từ lisp bạn có đã gửi tin nhắn riêng cho bạn nhưng không thấy bạn trả lời
- 1
-
1 giờ} trướ}c, anti lazy đã nói:Đến lần thứ 5 thì cũng chưa rõ yêu cầu thế nào vì tọa độ XY trong bảng cũng không đúng với thực tế mà đánh bậy chứng tỏ chưa nghiêm túc. Do đối với bv giao thông X, Y hay hoán đổi cho nhau
Mình cố hiểu được là bản vẽ có 2 loại block ( block tĩnh và block thuộc tính ) tại mỗi vị trí bạn ấy cần lấy tọa độ điểm base point của block tĩnh và kèm tên của block att là ghi chú cho mỗi block tĩnh gần nó.
-
1 giờ} trướ}c, vuhoach đã nói:Vâng, nhưng đa số công việc mà em thực hiện em dùng block attribute để ghi tên chứ không dùng text (vì attribute xử lý số liệu trên excel dễ dàng hơn nhiều)
Tóm lại vẫn chưa hiểu bác muốn gì? block att thì cad có " Data extraction " rồi
-
9 phút trước, vuhoach đã nói:Đúng rồi bác, nhưng lisp xuất tọa độ thông thường phải ghi tên điểm thủ công, hoặc đánh stt tự động nhưng stt này không khớp với tên điểm đã có. Vì vậy mà em muốn trên để công việc tự động cao hơn
Vậy thì bản thân lisp bác đang có là thực hiện được rồi. bác move text về tâm block (chính là point ) sau đó bác xuất tọa độ block và xuất tọa độ text: sau đó bác xử lý trên excel là được mà
-
8 giờ trước, vuhoach đã nói:Chào các bác, bài toán của mình như này: Mình cần xuất tọa độ của các block đèn kèm tên của nó. Như hình bên dưới là các cột đèn kèm tên của nó (tên đèn là block attribute), mình đã có lisp chuyển các đèn kia thành point, và lisp move text tới point (đính kèm bên dưới cho anh em nào cần). Nhưng do block tên đèn của mình bên trong gồm cả text lẫn attribute, dùng lệnh burst của cad có thể chuyển các attribute trong block thành text nhưng sau khi thực hiện lệnh này thì bị lẫn cả text cần lấy tọa độ lẫn text rác. Mình có thể xử lý, lọc được để lấy tọa độ text mong muốn nhưng rất mất công. Vì vậy mình muốn có một lisp có thể move thẳng block tới point để thao tác nhanh gọn hơn. Khi đó bài toàn xuất tọa độ đối tượng kèm tên sẽ đơn giản hơn rất nhiều: dùng 1 lisp chuyển block đèn kia thành point (mình đã có) -> dùng lisp đang nhờ các bạn viết move block tên đèn vào các point vừa tạo(hoặc chỉnh sửa lisp mình đính kèm) -> xuất tọa độ các block atrribute tên đèn (lisp này cũng đã có).
PS: lisp move text to point đính kèm là của Lee-Mac
Vẫn không hiểu ý cụ lắm. Có phải cụ muốn xuất tọa độ (base point) của block kèm text nằm gần block ra bảng excel không?
-
20 giờ trước, traichoi85 đã nói:Chào các bạn.
Hiện nay mình có 1 dự án khoảng 500 lô nhà. file đã có số lô. mà mình muốn thêm trong mỗi lô là 1 block ( để mình làm block thuộc tính). nếu làm thủ công thì rất lâu, và phương án của mình thì sửa liên tục. Nên nhờ các bạn giúp dùm, nếu được các bạn có thể giúp thêm là xoay block theo hướng lô đất luôn. (có file đính kèm và video hỏi đính kèm)
file youtube: https://youtu.be/xZdQ5gw2coA
file
Gửi bạn bản vẽ mình đưa vào block att kèm theo các thông số Lô, số thự tự và diện tích mỗi ô đất
-
25 phút trước, traichoi85 đã nói:Hi các bác.
Cho em hỏi, em có 1 thư viện block thuộc tính. trong ruột thì đầy đủ các att: TENLODAT, DIENTICH, MATDO, MATCATDUONG, TENBLOCK. nhưng khi thể hiện thì chỉ có TENLODAT, DIENTICH, MATDO.
Vậy block này làm sao mình ẩn được 2 giá trị MATCATDUONG, TENBLOCK.
CÓ FILE ĐÍNH KÈM. MONG CÁC PHẢN HỒI CỦA CÁC BÁC, EM CÁM ƠNBạn kick chuột phải, chọn vào mục block editor sau đó bạn chọn tag cần ẩn rồi vào mục Misc trong propertis lựa chọn invisible chuyển "No" thành "yes". xong thoát khỏi block thực hiện lệnh batman chon sys là ok
- 1
-
6 phút trước, pdhuyxn2 đã nói:Thank You Bác ! Sử dụng Text Mask trên thanh công cụ Express không bo được khung quanh text , mtext Bác Ạ. .
Em muốn nhờ Các Bác sử dụng lisp khi chọn vào text, hoặc mtext thi bo luôn được khung.
bạn dùng lệnh wipeoutframe=1 chưa?
- 1
-
2 giờ trước, pdhuyxn2 đã nói:Nhờ Các Bác trên diễn đàn chuyển text, mtext sang bo khung như trong ví dụ trên
Bạn dùng text Mask trên công cụ Express là được mà, kết hợp biến wipeoutframe=1
-
Như bản vẽ em đính kèm này nó không chọn các block mà có 1 phần đè lên đường tham chiếu. Nếu thay đổi điểm chèn block thì em không muốn vì nó làm thay đổi lý trình đặt block ạ
-
Bác test trường hợp block có thể hình dạng nằm bên phải Pline nhưng điểm chèn block nằm bên trái đấy ạ. em muốn nó chọn theo điểm chèn block ạ.
-
Vào lúc 19/9/2022 tại 14:54, cuongtk2 đã nói:Mô tả : Lấy 1 đường pline tham chiếu, Offset thêm 1 đường pline về phía hướng chọn. Kiểu chọn sẽ là WindowPolygon cho tập hợp các đỉnh của 2 pline.
(defun c:seloffset ( / D ENT ENT1 ENT2 ENT3 OB OB1 OB2 PENT PT PT1 PT2 PTS PTS1 SS) (defun pline_points (e / pts) (setq pts (mapcar 'cdr (vl-remove-if-not (function (lambda (pt) (= (car pt) 10))) (entget e) ) ) ) ) (setq pent (entsel "\nPick pline") ent (car pent) pt (cadr pent) ) (setq ob (vlax-ename->vla-object ent) pt1 (vlax-curve-getclosestpointto ob pt t)) (setq pt2 (getpoint "\nHuong offset:" pt1) d (distance pt1 pt2)) (vla-Offset ob d) (setq ent1 (entlast)) (vla-Offset ob (- d)) (setq ent2 (entlast)) (setq ob1 (vlax-ename->vla-object ent1) ob2 (vlax-ename->vla-object ent2)) (setq ent3 (if (< (distance pt2 (vlax-curve-getclosestpointto ob1 pt2 t)) (distance pt2 (vlax-curve-getclosestpointto ob2 pt2 t)) ) ent1 ent2)) (setq pts (pline_points ent) pts1 (REVERSE(pline_points ent3)) pts (append pts pts1)) (setq ss (ssget "WP" pts)) (entdel ent1) (entdel ent2) (command "select" ss "") )
Bác có thể sửa nó nhận theo điểm tâm của block không ạ?
-
20 giờ trước, thiep đã nói:;| LISP FIELD SUM DIMENSIONS TO A TEXT|; (defun DXF (code en) (cdr (assoc code (entget en)))) (defun getIDobject (obj) (if (vlax-method-applicable-p *util* 'GetObjectIdString) (vla-GetObjectIdString *util* obj :vlax-false) (itoa (vla-get-ObjectId obj)) ) ) (defun c:fdt (/ ApCad ActDoc *Model* *util* ssdim ent_T Obj_Text tz po ent-lst len n Obj_DIM str rowtypes objTab acm prec ) (vl-load-com) (command "undo" "be") (defun *error* (msg) (and doc (_EndUndo doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (command "undo" "en") (princ) ) (if (< (substr (getvar "ACADVER") 1 2) "15") (progn (acet-ui-message (strcat "Lisp này ch\U+1EC9 ch\U+1EA1y \U+0111\U+01B0\U+1EE3c t\U+1EEB autoCad 2007 tr\U+1EDF lên." "\nB\U+1EA1n nên nâng c\U+1EA5p autoCad và có menu Express" ) "Warning" 4144 ) (exit) ) ) (acet-sysvar-set '("cmdecho" 0 "osmode" 0 "dimpost" ".")) (setq ApCad (vlax-get-acad-object) ActDoc (vla-get-ActiveDocument ApCad) *Model* (vla-get-ModelSpace ActDoc) *util* (vla-get-Utility ActDoc) ) (setq acm (vla-GetInterfaceObject ApCad (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2)) ) ) (acet-ui-status "Select DIMENSIONs" "Prompt") (setq ssdim (ssget '((0 . "DIMENSION")))) (acet-ui-status) (while (OR (NOT (setq ent_T (car (entsel "\nPick a Text object for set sum dimensions")) ) ) (NOT (eq (DXF 0 ent_T) "TEXT")) ) (prompt "\nPick not right TEXT object, please pick again") ) (setq Obj_Text (vlax-ename->vla-object ent_T)) (setq tz (dxf 40 ent_T)) (setq po (getvar "Extmin") po (list (- (car po) (* tz 20)) (cadr po) 0.0) ) (if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> " (itoa (getvar "useri1")) ) ) ) ) (setq prec (getvar "useri1")) ) (setvar "useri1" prec) (if ssdim (progn (setq ent-lst (acet-ss-to-list ssdim)) (setq len (length ent-lst)) (setq objTab (vla-AddTable *Model* (vlax-3D-point po) len 1 (* tz 3.5) (* tz 8) ) ) (vla-put-layer objTab (vla-get-layer Obj_Text)) (vla-setrgb acm 0 0 0) (vla-put-truecolor objTab acm) (setq n 0) (foreach entD ent-lst (setq Obj_DIM (vlax-ename->vla-object entD)) (if (eq (vla-get-TextOverride Obj_DIM) "") (vla-setText objTab n 0 (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%llu2%pr%2%\">%" (getIDobject Obj_DIM) (itoa prec) "Measurement" ) ) (vla-setText objTab n 0 (acet-str-format "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%" (getIDobject Obj_DIM) "TextOverride" ) ) ) (setq n (+ n 1)) ) (setq str (acet-str-format "%<\\AcExpr (Table(%<\\_ObjId %1>%).Evaluate(Sum(A1:A%2))) \\f \"%lu2%pr%3\">%" (getIDobject objTab) (itoa len) (itoa prec) ) ) (vla-put-TextString Obj_Text str) ) ) (vla-put-Visible objTab acfalse) (ACET-SYSVAR-RESTORE) (command "undo" "en") (princ "ok") (PRINC) )
Lisp tính tổng các text dimension, tạo field giá trị tổng đưa vào 1 đối tượng TEXT có sẵn. Text dimension có thể bị chỉnh sửa hay không bị chỉnh sửa cũng được cộng. Khi 1 hay nhiều dimension thay đổi thì text tổng cũng thay đổi.
Bác ơi em test với những dim sửa text rồi thì không được, Cũng bài toán như vậy bác có thể sửa thay đối tượng Dim bằng (text, length hoặc area) được không ạ
-
Nhờ các bác trong diễn đàn sửa giúp em lisp sau theo yêu cầu công việc
1. lisp hiện tại đang ở chế độ chọn điểm pic điểm để tính diện tích em muốn chuyển sang dạng chọn cửa sổ ( mong muốn gom nhiều đối tượng tính 1 thao tác)
2. Kết quả lisp tính ra rất nhiều số sau dấu phẩy, em muốn sửa thành có lựa chon 2,3 số (lưu ý chỉ khai báo thông số này 1 lần khi áp lisp)
3. Kết quả ghi ra trong mục thay thế text có sẵn trên bản vẽ thì tự đổi màu và đổi tên lớp text thay thế so với text gốc
Cần hỗ trợ: cách insert và phân loại dữ liệu từ Excel vào Autocad
trong Sử dụng AutoCAD
Đã đăng · Trả lời báo cáo
Mã căn đã bán ký hiệu khác với căn chưa bán ngay trên bản vẽ cad rồi ạ, Nếu thế thì dùng lệnh find của cad lọc xong đổi tên lớp là xong, mình đang hiểu là chỉ mới note trên excel giờ muốn đổi tên lớp trên cad (đổi lớp của khu đất bao quanh chứ không phải lớp của text)