-
Số lượng nội dung
514 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
48
Bài đăng được đăng bởi thiep
-
-
23 giờ trước, 7o7 đã nói:Bác nói đúng nhưng dùng hình tượng “lông lá” có vẻ không được mỹ quan cho lắm!!
Chắc bác @thiep chưa hiểu yêu cầu của bác @lanvientkh nên thay vì viết 1 lisp đơn giản đếm đtg theo màu, bác lại “phóng đại” thành đếm mọi loại đối tượng!! Haizz!!
Vào lúc 22/9/2012 tại 23:04, CUONG20051982 đã nói:Mình nhờ các bạn viết hộ lisp như thế này:
Đếm số đối tượng trong bản vẽ như: line, pline, spline, circle, acr. rectangle, pollygon, elipse,...
với điều kiện các đối tượng trên phải giống nhau về kích thước và hình dạng(tính cả các đối tượng đã xoay đi một góc bất kỳ nào đó như rectangle,squae,polygon mà vẫn đảm bảo về kích thước và hình dạng), các đối tượng giống hệt nhau mà nằm đè lên nhau thì xóa bỏ.
Lisp có thể theo trình tự sau:
- Nhập lệnh.
- Chọn vùng tìm kiếm đối tượng.
- Kết thúc lệnh
- Hiển thị kết quả của đối tượng được chọn: "Số lượng đối tượng là: x"
P/s: Nếu có thể thì phát triển giúp mình lisp chọn đếm cả đối tượng là block(các block này cũng là giống nhau tính cả block đã quay trừ những block đã scale)
Ý của @CUONG20051982 đâu có nói về đối tượng màu, còn ý của @lanvientkh thì khác, đơn giản hơn.
Giờ Thiep cũng đang viết cho 1 dự án lớn: thống kê đối tượng, nó chiếm hết thời gian nên không giúp được.
Đầu bài của @CUONG20051982 là 1 bài toán hay đó chứ, có thể rất giúp ích cho các bạn làm thống kê đối tượng như điện nước, trang trí nội thất... ví dụ thống kê gạch (rectangle, triangle), ống pipe (line, mline, polyline), diện tích bồn hoa (hatch, polyline),... thống kê các block...
Đôi khi con gái cũng phải biết sủi thẳng tóc cho dễ coi hơn, dễ thương hơn. he he.
-
Vẽ trắc dọc
trong Sử dụng AutoCAD
3 giờ trước, Duong Nhat Duy đã nói:Bạn ơi nhân tiện mình hỏi bình thường dịch mấy cái đó ở đâu cho tiện vậy ?
https://www.facebook.com/groups/1383249052044317
Bạn vào trang này để tải lisp chuyển font xượt về dùng.
- 2
-
Vào lúc 24/6/2021 tại 11:45, lanvientkh đã nói:chưa có cao nhân nào giúp mình, buồn quá
Hôm nay mới đọc được topic này. Lisp cần chia ra rất nhiều trường hợp gọi là các đối tượng 2D "giống nhau" theo ý của chủ topic từ dễ đến khó:
- Line : cùng chiều dài
- Circle : cùng bán kính
- Ellipse : cùng độ dài trục lớn và độ dài trục nhỏ
- Polyline hở (có > 2 node) : khi quay (Align) cho vecto điểu đầu điểm cuối của mỗi đa giác cùng hướng thì vecto cho từng cặp node, phải bằng nhau
- Polyine kín (có > 2 node) : khi quay (Align) cho vecto điểu đầu điểm gần cuối của mỗi đa giác cùng hướng thì vecto cho từng cặp node, phải bằng nhau.
- Spline hở hoặc kín : thuật toán làm giống như Polyline hở hay polyline kín
- Hatch : cùng diện tích, truy tìm các node đường bao (nếu có) của hatch, thuật toán cũng làm như polyine kín. nếu không có node đường bao như hatch của 1 circle, 1 ellipse, thì thuật toán so sánh đường bao giống như circle hoặc ellipse.
- Block thường : cùng tên block, cùng tỷ lệ chèn
- BlockATT : cùng tên block, cùng tỷ lệ chèn, các cặp att (cùng tên tag) có giá trị chuỗi giống nhau,
- Block không Att, dynamic : cùng tên block, cùng tỷ lệ chèn X, Y, Z, các cặp giá trị thuộc tính động cùng tên giống nhau
- Block có Att, dynamic : cùng tên block, cùng tỷ lệ chèn X, Y, Z, các cặp att (cùng tên tag) có giá trị chuỗi giống nhau, các cặp giá trị thuộc tính động cùng tên giống nhau.
Sơ sơ đã là 12 trường hợp để so sánh các đối tượng 2D "giống nhau".
Mình viết được lisp này, nhưng mất rất nhiều thời gian.
- 2
-
nhờ vả viết lisp
trong AutoLisp
-
4 giờ trước, 7o7 đã nói:Dư lày nè các bác. Còn dư lày là dư lào thì phải hỏi thớt thôi, chứ chỉ 1 cái hình nhỏ xíu thì chẳng biết gì để làm.
ứng tiền mua hoạt huyết nhất nhất uống trước, sau đó viết lisp bù lại. Tel: 0918841230.
-
22 giờ trước, Huy Phương đã nói:Bác nào nhận viết lisp theo yêu cầu ko ạ.
Nếu dễ viết thì miễn phí, khó hơn thì vài ly cafe nhâm nhi. Hê he.
- 2
-
19 giờ trước, thgbao đã nói:Là sao bác chỉ rõ giúp chứ em cũng newbie mấy cái này ?
Link file thì đã kèm theo ngay dòng 2.
Bạn vào cad của máy khác "vẫn chạy được" lisp này, tìm file ll.dcl trong thư mục Support. Thư mục Support nằm ở 2 vị trí như sau:
- thư mục Support nằm trong thư mục cài đặt Autocad,
- thư mục Support nằm trong đường dẫn: (ví dụ, trên cad 2014, là ở đây: C:\Users\ADMIN\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\enu\Support)
Bằng cách: gõ lệnh PLOTTERMANAGER, cad sẽ mở 1 trình quản lý File explorer, pick vào thư mục Enu, sau đó pick vào thư mục Support,
tìm và copy file ll.dcl này về 1 trong 2 thư mục Support của cad (như trên) vào máy mà bạn muốn chạy.
Nhân tiện bạn tìm được file ll.dcl , bạn share lên diễn đàn cho mọi người được sử dụng.Chúc bạn thành công.
- 1
-
Vào lúc 4/3/2022 tại 12:27, trancongphuc2002 đã nói:như ví dụ 1 trên hàm LOAD bị thiếu dấu nháy kép đúng không bác
Ngoài ra, bạn đọc "Lập trình thiết kế với Autolisp..." của 2 tác giả Nguyễn Hữu Lộc -Nguyễn Thanh Trung, có những lỗi tôi thấy sau:
Tập 1:
-trang 167, dòng 20: ";Kết thúc đối số COND thứ nhất" đúng phải là ;Kết thúc đối số COND thứ hai
dòng 25: argument đúng phải là không có chữ này
Tập 2:
- trang 32, dòng thứ 4, 5, 7, 8: "Hàm ENTMODE" đúng phải là ENTMOD
-trang 160, dòng 21: (gread) đúng phải là (grread)
- trang 174, dòng 21: err_tile đúng phải là errtile
Nhờ các bạn kiểm chứng thêm...
- 2
-
19 giờ trước, 7o7 đã nói:Vậy chắc bạn viết sai hoặc sách in sai chứ thầy Lộc sao sai được.
Sách của thầy Nguyễn Hữu Lộc cũng bị sai vài chỗ đó bạn.
-
4 giờ trước, cuongtk2 đã nói:Cơ bản như thế này
(defun c:test ( / D E I N OBJ PT SS) (setq ss (ACET-SS-TO-LIST (ssget '((0 . "INSERT"))))) (setq n (length ss) i 0) (vl-sort ss '(lambda (e1 e2) (> (cadr (acet-dxf 10 (entget e1))) (cadr (acet-dxf 10 (entget e2))) )) ) (setq pt (getpoint "\nVi tri moi") d (getdist "\nKhoang dan dong" pt)) (while (< i n) (progn (setq e (nth i ss) obj (vlax-ename->vla-object e)) (vla-put-InsertionPoint obj (vlax-3d-point(polar pt (* pi 1.5) (* d i)))) ) (setq i (1+ i)) ) (princ) )
He he, đây là các block động chứ có phải block thường đâu mà mà viết vậy @cuongtk2
Đề bài đặt ra cũng hay, mong @cuongtk2 viết nốt phần còn lại khi xử lý các block động.
- 1
-
Thiệp đã viết lisp nội suy điểm cao độ từ 2 điểm mốc trên curve hoặc gần nằm trên curve, không cần thiết phải là điểm đầu hay điểm cuối của curve, có 2 tùy chọn:
- nội suy các điểm chia đều trên tuyến (chia đều N điểm)
- nội suy từng điểm pick trên tuyến
- 1
-
11 giờ trước, Doan Van Ha đã nói:Công nhận mọi người hiểu đề bài nhanh thiệt!
Tui đọc hoài cũng không hiểu 1234 là string hay integer, hoặc a/b/c/d là gì? Và chúng nằm ở đâu?Lâu rồi cũng quen với những kiểu đặt đề bài lưng lửng. Thời đại 4.0 mà @Doan Van Ha
- 1
- 1
-
23 giờ trước, anhGeodesy đã nói:Các bác cho em hỏi cách tách số 1234 gán vào các biến a=1, b=2, c=3, d=4 . cảm ơn các bác!
(defun setq_split_strnum (str / n m ls) (setq n -1 m 96) (setq ls (mapcar 'chr (vl-string->list str))) (repeat (length ls) (set (read (chr (setq m (1+ m)))) (atoi (nth (setq n (1+ n)) ls))) ) )
Bạn dùng hàm này với biến str là một chuỗi số. Hàm gán giá trị từng con số trong biến str vào các biến
a = ...
b=...
c=...
....
z=...
Có thể gán giá trị đến 26 biến a, b, c,...z như ý muốn của bạn.
- 1
-
Các toạ độ tâm CIRCLE, ARC trong bản vẽ được quy chiếu theo 2 trục line màu đỏ nét CENTER2, hai đường này song song với trục tung và trục hoành nên có thể nói UCS đã chuyển đến điểm gốc quy chiếu này và không xoay. Bản vẽ gửi lên cũng đang là WCS, các điểm (dxf 10) của các dimordinate này đều quy về 1 điểm gốc quy chiếu này.
Đây là bản vẽ cơ khí có nhiều hệ lỗ, những dữ liệu toạ độ CIRCLE, ARC này có thể là đầu vào cho máy CNC chạy.
-
3 giờ trước, cuongtk2 đã nói:Viết thế này cho gọn @thiep
(setq ent (entsel)
cent (acet-dxf 10 (entget (car ent)))
pick (cadr ent)
r (distance cent pick)
ang (angle cent pick)
phantu (* pi 0.25)
ang (fix (/ ang phantu)
ang (* ang phantu) ; p13_1, p14_1
ang1 (+ ang phantu) ; p13_2, p14_2
)
Đầu tiên là Thiệp tranh thủ nghĩ ra viết liền, không kịp nghĩ dùng thuật toán (fix 1/4pi) để xác định điểm pick ở góc nào của đường tròn . Cảm ơn @cuongtk2
-
59 phút trước, quocmanh04tt đã nói:@thiepCó vẻ chưa ổn trong UCS bác ạ!
Cũng có thể @quocmanh, bới vậy khi BV đang ở UCS, Thiệp đưa về WCS, sau khi chạy lisp thì trả về UCS cũ. Tuy nhiên, cũng chưa biết có ổn không, Thiệp thử ở cad 2007 thấy ok.
-
-
Lệnh po0: tạo điểm quy chiếu, (giống như dời điểm gốc hệ toạ độ (0 0 0) về điểm này)
Lệnh TDT: tạo DimOrdinate cho CIRCLE, ARC
;;;Lisp AdddimOrdinate cho tâm CIRCLE, ARC by Trân Thiêp 10/2021, tel 0918841230 (defun c:po0 (/) (setq po0 (getpoint '(0 0 0) "\nPick 1 \U+0111i\U+1EC3m to\U+1EA1 \U+0111\U+1ED9 quy chi\U+1EBFu" ) ) ) (defun c:tdt (/ doc *model ucs_old po13_1 po14_1 po13_2 po14_2 90d 270d 360d ent centpo eng ang R obdX obdY engX engY entodimX entodimY sel popick ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) *model (vla-get-modelspace doc) ) (defun *error* (msg) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) (acet-sysvar-restore) (vla-EndUndoMark doc) (princ) ) (vla-StartUndoMark doc) (acet-sysvar-set (list "cmdecho" 0 "osmode" 33)) (setq ucs_old (acet-ucs-get nil)) (acet-ucs-cmd '("w")) (setq 90d (/ pi 2) 360d (* pi 2) 270d (* 90d 3) ) (or po0 (setq po0 (getpoint "\nPick 1 \U+0111i\U+1EC3m to\U+1EA1 \U+0111\U+1ED9 quy chi\U+1EBFu"))) (setvar "osmode" 0) (while (OR (NOT (setq sel (entsel "\nPick a CIRCLE, ARC"))) (NOT (wcmatch (acet-dxf 0 (setq eng (entget (setq ent (car sel))))) "CIRCLE,ARC" ) ) ) (prompt "\nPick ch\U+01B0a Ðúng CIRCLE, ARC vui lòng pick l\U+1EA1i") ) (setq popick (cadr sel)) (setq centpo (trans (acet-dxf 10 eng) 0 1) R (acet-dxf 40 eng) ) (setq ang (angle centpo popick)) (cond ((< 0 ang 90d) (setq po13_1 (polar centpo 0 R) po14_1 (polar po13_1 0 10) po13_2 (polar centpo 90d R) po14_2 (polar po13_2 90d 10) ) ) ((< 90d ang pi) (setq po13_1 (polar centpo pi R) po14_1 (polar po13_1 pi 10) po13_2 (polar centpo 90d R) po14_2 (polar po13_2 90d 10) ) ) ((< pi ang 270d) (setq po13_1 (polar centpo pi R) po14_1 (polar po13_1 pi 10) po13_2 (polar centpo 270d R) po14_2 (polar po13_2 270d 10) ) ) ((< 270d ang 360d) (setq po13_1 (polar centpo 0 R) po14_1 (polar po13_1 0 10) po13_2 (polar centpo 270d R) po14_2 (polar po13_2 270d 10) ) ) ) (setq obdX (vla-AddDimOrdinate *model (vlax-3d-point (trans po13_1 1 0)) (vlax-3d-point (trans po14_1 1 0)) :vlax-false ) ) (setq obdY (vla-AddDimOrdinate *model (vlax-3d-point (trans po13_2 1 0)) (vlax-3d-point (trans po14_2 1 0)) :vlax-true ) ) (setq engX (entget (setq entodimX (vlax-vla-object->ename obdX)))) (entmod (subst (cons 10 po0) (assoc 10 engX) engX)) (entupd entodimX) (setq engY (entget (setq entodimY (vlax-vla-object->ename obdY)))) (entmod (subst (cons 10 po0) (assoc 10 engY) engY)) (entupd entodimY) (acet-sysvar-restore) (acet-ucs-set ucs_old) (vla-EndUndoMark doc) (princ "\nOk") (princ) )
Chúc vui vẻ. Thiep
- 1
-
15 giờ trước, alisp đã nói:Bác gỡ lỗi xong chưa mà không thấy đưa code lên? Còn pick chọn circle thì nên quét chọn rồi suy ra điểm cần lấy toạ độ thì hay hơn là pick từng circle một. Hy vọng bác làm xong và đưa lên cho mọi người tham khảo.
Ui, cơm áo gạo tiền, nó thúc mông chạy trối chết. Lisp đã fix xong, đang chạy rô đa,
Cái điều "quét chọn" các circle như @alisp nói mình cũng muốn lắm, nhưng nó liên quan đến thuật toán "chật chội", mà viết thuật toán này lâu lắm. Mục đích là để lisp hiểu chỗ nào chật chội th ì không tạo dimordinate, tìm chỗ rộng để tạo dimordinate. Như hình dưới đây thì tìm chỗ rộng, và bẻ khúc dim nữa thì thật khó chịu.
-
1 giờ trước, cuongtk2 đã nói:Dim dưới và phải.
(defun c:test ( / CENT ENT P1 P1A P2 P2A RAD) (setq ent (entget (car (entsel)))) (setq cent (acet-dxf 10 ent) rad (acet-dxf 40 ent) p1 (polar cent 0 rad) p1a (polar cent 0 ( * rad 1.2)) p2 (polar cent (* pi 1.5) rad) p2a (polar cent (* pi 1.5) ( * rad 1.2)) ) (command "dimordinate" p1 p1a) (command "dimordinate" p2 p2a) )
@cuongtk2Thiệp đã viết lisp, nhưng không dùng hàm "command" chỉ dùng hàm entmake, và đang rắc rối 1 chút về UCS và WCS, nhưng có thể gỡ lỗi được. 1 ý nữa là chỉ cần pick chọn đường tròn, từ điểm pick, lisp hiểu sẽ tạo 2 dimordinate ở 2 điểm quadrant nào, không nên cứng nhắc chỉ là tạo 2 dimordinate dưới và phải.
- 1
- 2
-
Vào lúc 22/10/2021 tại 15:42, thiep đã nói:Nhìn hình vẽ rất rối, bạn có thể tinh giản lại hình ảnh hoặc 1 file dwg nhỏ thôi, trước và sau khi dùng lisp . Có thể tôi hay ai đó trên diễn đàn này giúp bạn.
Ba ngày sau chủ thớt mới trả lời, chắc đợi ba ngày nữa quá.
- 1
-
11 phút trước, cuongtk2 đã nói:DIMORDINATE là dim cho tọa độ X, Y của 1 điểm bất kỳ, nó không liên quan gì đến đường tròn.
Vậy bạn cần là đặt lại chế độ bắt điểm cho phù hợp vào node 1/4 đường tròn là được.
Ở bản vẽ này, bắt điểm Quadrant để tạo dim_ordinate cũng không đúng. Thiệp vừa tạo dim_ordinate (màu vàng) nó khác xa với dim_ordinate màu cyan trong bản vẽ?
- 1
- 1
-
11 giờ trước, vietnam1 đã nói:http://adaucogit.blogspot.com/2010/09/automatic-ordinate-dimensioning.html#more
Dim giống trong bài này ở dòng số 7 bác ah. dim từ cạnh của đường tròn chứ không phải từ tâm của đường tròn. Em thấy nhiều lisp dim từ tâm của đường tròn ra. Còn lisp từ cạnh của đường tròn lại không có.
Trong bản vẽ test dimordinate.dwg này, không thấy toạ độ tâm đường tròn được dim_ordinate. Bạn phải nói rõ hơn về các dim màu cyan được tạo như trong hình, bắt điểm từ đâu để tạo dim_ordinate?
- 1
- 1
-
Lisp Dim tự động
trong AutoLisp
Đã đăng · Trả lời báo cáo
Thiết nghĩ, hai bạn đã suy tầm lisp của Stefan M. (10.11.2015 - KimProjects.com) đó thì cũng nên tôn trọng nêu tên tác giả của lisp một chút.