tannguyen291
-
Số lượng nội dung
467 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
44
Bài đăng được đăng bởi tannguyen291
-
-
Nhờ sửa lỗi LISP
trong AutoLisp
chèn block att nếu sử dụng entmake sẽ không tạo attribute trong block. (nếu muốn dùng cách này cần thêm lệnh attsync trong command.)
để tối ưu nên dùng vla:
(vla-InsertBlock Object<vla-object> InsertionPoint<variant:xyz> Name<string> Xscale?<double> Yscale?<double> Zscale?<double> Rotation?<double> Password?<variant>)
- 1
-
9 phút trước, cuongtk2 đã nói:@tannguyen291 Em làm rất đúng. Tặng em 1 hàm có thể có íchc
(defun CurveGetAngleAtDist (object dist / param VEC X Y) (setq param (vlax-curve-getParamAtDist object dist) vec (vlax-curve-getFirstDeriv object param) x (nth 0 vec) y (nth 1 vec)) (if (/= x 0) (atan (/ y x)) (if (> y 0) (* PI 0.5)(* PI -0.5) ) ) )
Tks bác. hàm này có thể giảm thiểu một số tính toán thừa của em.
-
chả bị lỗi gì. cad của bạn có vấn đề. nếu đã mở được file thử lưu về dạng dwt xem sao.
-
6 phút trước, cuongtk2 đã nói:@tannguyen291 Em phát biểu đúng về việc chia càng nhiều khoảng thì càng chính xác. Nhưng về bản chất spline và pline khác nhau về độ bẻ cong tại node, một bên là knode, một bên là bulge. Cho nên việc chia đều khoảng cách spline với 20 điểm có thể không chính xác bằng chia không đều với 5 điểm.
Lisp của em là chia không đều mà. space này chỉ đơn giản là timming để dò tìm thôi. :)) quan trọng còn có dòng này nữa: (equal ck2 0 0.02) tính toán gần đúng cho bulge. giảm xuống mới tạo ra nhiều điểm hơn.
-
9 giờ trước, Lee123 đã nói:lips bác này chỉ chạy được các đường spline đơn giản thôi, các đường phúc tạp thì nó xoay đến mùa quýt luôn.
Lisp của mình là ước tính. nên độ chính xác không cao. :)) ngoài ra nếu bạn biết về lisp thì có thể sửa variable space và giá trị so sánh bulge tại dòng 2 và dòng 9 để phù hợp với nhu cầu. (đây là giá trị đánh giá từng bước. càng nhỏ càng lâu càng chính xác, càng lớn các nhanh càng thiếu chính xác). như vậy sẽ đáp ứng được công việc của bạn.
-
Bạn có thể xem tại sao mọi người dùng block att:
qua bài viết của mình:
Ngoài ra nếu quan tâm có thể tải về tham khảo tại đây:
Tks.
-
Nếu để viết chương trình như vậy. đầu tiên nghĩ đến giải đố sudoku và giải mã password. thuật toán backtracking. nhưng sudoku chỉ có 9 số, giải mã password thì cũng chỉ có mấy chục ký tự được sắp xếp vào vị trí xác định (ô trống). còn chơi xếp hình này đã nhiều hình còn xoay. ví dụ loop xoay 1 độ thì cũng 360D x số lượng hình - ôi mẹ khiếp luôn. chưa kể vị trí ô trống cũng không xác định. tức là có vô số vị trí để xếp hình. đại khái random mấy ngàn lần không được thì dừng chứ thuật toán này không tìm được phương án tối ưu nhất đâu ạ. :))
-
Để viết được cái lisp này thì bạn xếp mấy cái hình bằng tay có lẽ sẽ nhanh hơn gấp 1.000 lần.
Tốt nhất là nên dùng phần mềm khác có sẵn tính năng như vậy
bạn có biết để kiểm tra point inside polygon đối với lisp đã là 1 cực hình rồi không. đây là một đối tượng đa giác. đã thế lại còn xoay để tìm kiếm vị trí phù hợp
Nếu thực sự muốn 1 lisp như vậy có lẽ cần phải trả phí. chứ viết chơi chơi cái này thì mất công đấy :))
- 1
-
6 phút trước, phuoc98 đã nói:Dạ bác e tập tành, không có tương tác với ai nên vẫn đang đọc thêm một số hàm trong các tài liệu và hỏi trên Ai. Còn trên diễn đàn thì e có gửi lên để xin ý kiến thêm để hiểu hơn ạ. E vẫn đang tập tành thôi bác, cảm ơn bác đã góp ý ạ
Nếu bạn muốn học về lisp nên học bài bản theo thứ tự
1. AutoLISP Core Functions: các lệnh căn bản
2. Express Tools Library: các lệnh có trong thư viện express tool.
3. ActiveX Library Functions: thư viện VLa, VLax.
Nếu muốn học linh tinh thì tùy vào độ thông minh của bạn.
- 1
-
21 giờ trước, phuoc98 đã nói:Chẳng là e có tập tành viết một em Lisp để dùng thử, nhưng khi load vào thì nhập lệnh trong cad lại không hiện. Em up lên nhờ các bác xem giúp em với ạ. Em cảm ơn.
cái này giống như AI viết lisp chứ không giống người viết. :))
chả có ai tập tành viết mà hiểu biết đến Vlax. đã biết đến vlax mà còn viết ra những hàm không có định nghĩa (vlax-put-text là cái gì). đã thế đóng ngoặc mở ngoặc lung tung bậy.
19 giờ trước, vietduc147258 đã nói:Hạn chế tiếng việt có dấu trong lisp.
cad 2021 trở lên đã hỗ trợ Unicode.
- 1
- 1
-
Em đã test lại với file của bác hà. thấy kết quả khác rất nhiều
Autocad 2025 - I7 9700
File cad không còn nên em tạo file cad mới 2394 point
Lisp run từ vscode: 6.1370 secs.
Load Lisp : 6.2790 secs.
Load FAS4: 1.0150 secs.
Load VLX - fas4: 1.0030 secs.
Load FAS5: 0.7090 secs.
Load VLX - fas5: 0.9620 secs.
Em thấy sẽ không thua gì VBA, .NET
-
-
Máy tính của bạn đời thấp quá rồi chạy chi chả giật.
Cpu nhiều nhân chỉ dùng để chạy đa nhiệm hoặc render. đối với hầu hết các tác vụ đều dùng đơn nhân. bây giời xung nhịp đã tầm 4-5ghz rồi cái cpu của bạn chỉ có 2.5ghz
Máy này h render cũng hơi yếu, để làm máy chủ cho công ty thôi chứ vẽ gì nữa.
-
thêm mấy lệnh này vào là ctrl z về đầu tiên ngay :))
vla-endundomark vla-startundomark
- 1
-
mã này có thể chạy được với các hình dạng giống bản vẽ. chữa rõ với các hình dạng khác hoạt động được đến đâu :((
(defun c:test (/ sel ss lst eng pt ntx ang lstss ) (setq sel (ssget '((0 . "LINE"))) ss (acet-ss-to-list sel) pt (getpoint "\nStart Point:") lst (mapcar '(lambda (x / a b) (setq a (cdr (assoc 10 (entget x))) b (cdr (assoc 11 (entget x))) ) (if (< (distance a pt) (distance b pt)) a b) ) ss ) ntx (car (vl-sort-i lst '(lambda (a b) (< (distance a pt) (distance b pt))))) ptx (if (eq (nth ntx lst) (cdr (assoc 10 (entget (nth ntx ss))))) (cdr (assoc 11 (entget (nth ntx ss)))) (cdr (assoc 10 (entget (nth ntx ss)))) ) ss (list (nth ntx ss)) lst (list (nth ntx lst)) ang (angle (car lst) ptx) ) (acet-ss-zoom-extents sel) (while (and (setq lstss (ssget "F" (list (car lst) ptx )'((0 . "LINE")))) (setq lstss (acet-ss-to-list lstss)) (setq lstss (vl-remove-if '(lambda (x) (member x ss)) lstss)) ) (setq eng (list (cdr (assoc 10 (entget (car lstss)))) (cdr (assoc 11 (entget (car lstss))))) ntx (inters ptx (car lst) (car eng) (cadr eng) nil) ss (cons (car lstss) ss) lst (cons ntx lst) ) (if (minusp (cos (- (angle ntx (car eng)) ang))) (setq ptx (cadr eng)) (setq ptx (car eng)) ) (setq ang (angle (car lst) ptx)) ) (setq lst (reverse (cons ptx lst))) (entmakex (append (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)) '(070 . 1) ) (mapcar '(lambda ( x ) (list 10 (car x)(cadr x) )) lst) ) ) (princ) )
- 1
-
tải lisp convexhull về rồi thêm đoạn mã này nữa mới chạy được
(defun c:test (/ ss lst ) (setq ss (acet-ss-to-list (ssget '((0 . "LINE")))) lst (mapcar '(lambda (x) (list (cdr (assoc 10 (entget x))) (cdr (assoc 11 (entget x)))) ) ss) lst (LM:ConvexHull (apply 'append lst)) ) (entmakex (append (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)) '(070 . 1) ) (mapcar '(lambda ( x ) (list 10 (car x)(cadr x) )) lst) ) ) )
-
Nếu từ nét LINE màu trắng thành nét bao màu đỏ thì có cái convexhull của lee mac. khá oke đó. nhưng lisp chạy hơi lâu.
- 1
-
48 phút trước, limfx đã nói:Cẩm ơn a tannguyen291 và amateurday: Thêm kiểm tra góc giữa 2 đường nữa là OK. Thanks!
Kiểm tra nhiều thế làm gì chỉ đơn giản là tính tan(alpha) bằng nhau là xong mà.
ngay từ đầu mình thấy bài đơn giản nên không định trả lời. không ngờ gây khó mọi người đến vậy.
từ p1 p2 thì có rất nhiều cách để tìm ra px1 và px2.
-
-
22 phút trước, NTHAHT đã nói:Theo mình biết, một số khách hàng họ có nhu cầu file cuối cùng ở dạng vector để đưa lên web (... có thể convert từ file *.dwg ), yêu cầu màu sắc cụ thể.
nếu theo nhu cầu đó thì viết 1 lisp convert index ra true. nhanh hơn đỡ phải chọn đi chọn lại nhiều lần. màu sắc tương tự, bác thấy sao. :)
-
13 giờ trước, Doan Van Ha đã nói:Sao bạn biết không đúng?
Em cũng không hiểu true color để làm gì vì mình quản lý nét in bằng index color.
việc màu gần nhau có thể hơi khác một chút nhưng với công nghệ máy in thông thường khi in ra cũng không nhận biết được.
không biết các ngành khác thế nào chứ ngành quy hoạch em đang làm thì có thông tư 04/2022 đã định rõ màu cho từng loại layer được sử dụng. nên cũng không nhất thiết phải true color làm gì.
-
Đã chọn được đối tượng rồi thì mở bảng properties ra mà đổi màu.
Những thứ không nhất thiết cần đến lisp thì bạn đừng nhờ kiểu như vậy.
tên bạn là chia sẻ học hỏi mà lên forum chỉ thấy nhờ.
- 1
-
6 phút trước, limfx đã nói:Ủa sao (dumpAllProperties (car (entsel)) 1) nó trả về nil anh?
dump luôn trả về nil. lệnh này chủ yếu để người dùng theo dõi các thông tin của đối tượng để nghiên cứu thôi. nó giống vlax-dump-object đó
-
3 phút trước, limfx đã nói:Excellent!
Sao anh tìm ra được cái AcDbDynBlockPropertyDistance?
Mình quên mất 2 hàm dumpallproperties và getpropertyvalue
tại ít dùng quá nên không nghĩ đến. không ngờ lại có tác dụng
Dùng dump là biết ename có các dữ liệu nào đi kèm thôi
- 1
[Nhờ viết lisp] Lisp lấy thuộc tính hatch có sẵn để làm thuộc tính hatch hiện hành
trong AutoLisp
Đã đăng · Trả lời báo cáo
CAD có sẵn chức năng này rồi.