-
Số lượng nội dung
1.161 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
26
Bài đăng được đăng bởi thanhduan2407
-
-
-
Vào lúc 21/3/2019 tại 08:24, Doan Van Ha đã nói:Không hiểu ý rồi. Nhiều nghiệm nhưng vẫn là 1 đống. Tức là có nhiều cách gom tập điểm trong chỉ 1 đường bao, các đường bao này đều thỏa đề bài.
Xem ví dụ:
Mấy nay cháu bận đi làm quá nên chưa trả lời bác được. Có thể cháu nói chưa hết ý và mục đích của mình. Cảm ơn bác đã quan tâm ạ.
-
3 giờ trước, Doan Van Ha đã nói:Thanhduan2407 ơi! Bài toán này có thể có nhiều nghiệm nhé!
Dạ. Có nhiều nghiệm thì sẽ tách thành nhiều đường bao sao cho thỏa mãn đầu bài. Giống như co cụm từng đống rơm ạ.
-
Link download như kia thì sao download được?
-
Hãy nghiên cứu Global Mapper nhé! Xuất các kiểu con đà điểu. Dùng như thế nào thì cứ vào Youtube gõ
Link download cho bản 64b.
-
9 giờ trước, Doan Van Ha đã nói:Nếu tôi nhớ không nhầm thì cách vẽ lưới tam giác TIN của tay người Nga đã xét yếu tố <= Amax rồi mà?
Cháu vẽ đường đồng mức nó không được cong trơn lắm nên cháu vẽ bằng phần mềm khác bác ạ. Hiện tại cháu vẫn sử dụng mô hình TIN rồi lấy đường boundary đó rồi cho vào phần mềm khác chạy.
Mặt khác. Cháu cũng muốn dựa vào thuật toán này để tính diện tích đo được trong một ngày mà không cần phải bo bằng tay.
-
Với ý tưởng tạo đường bao tối ưu chứa tập hợp các điểm Point và khoảng cách giữa các đoạn không vượt quá con số a nào đó nhằm tìm kiếm đường bao tối ưu bám sát các điểm nhất. Em đã cố gắng nghiên cứu rất lâu rồi nhưng chưa tìm ra cách. Mong các Pro chỉ giáo, viết hoặc gợi ý cho em với ạ! Em có sưu tầm được lisp của Lee-Mac về đường bao lồi Convex Hull nhưng chưa chỉnh sửa được theo đúng ý mình. Em xin gửi code tham khảo lên đây và hình ảnh.
Cảm ơn các bác đã quan tâm.
(defun C:00 (/ LST LTSPOINT SSPOINT X ) (setq ssPoint (ssget '((0 . "POINT")))) (if ssPoint (progn (setq LtsPoint (LM:ss->ent ssPoint)) (setq lst (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) LtsPoint)) (setq lst (LM:ConvexHull lst)) (entmakex (append (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)) '(070 . 1) ) (mapcar '(lambda (x) (cons 10 x)) lst) ) ) ) ) (princ) ) ;; Convex Hull - Lee Mac ;; Implements the Graham Scan Algorithm to return the Convex Hull of ;; a ;; list of ;; points. (defun LM:ConvexHull (lst / ch p0) (cond ((< (length lst) 4) lst) ((setq p0 (car lst)) (foreach p1 (cdr lst) (if (or (< (cadr p1) (cadr p0)) (and (equal (cadr p1) (cadr p0) 1e-8) (< (car p1) (car p0)) ) ) (setq p0 p1) ) ) (setq lst (vl-sort lst (function (lambda (a b / c d) (if (equal (setq c (angle p0 a)) (setq d (angle p0 b)) 1e-8) (< (distance p0 a) (distance p0 b)) (< c d) ) ) ) ) ) (setq ch (list (caddr lst) (cadr lst) (car lst))) (foreach pt (cdddr lst) (setq ch (cons pt ch)) (while (and (caddr ch) (LM:Clockwise-p (caddr ch) (cadr ch) pt)) (setq ch (cons pt (cddr ch))) ) ) ch ) ) ) ;; Clockwise-p - Lee Mac ;; Returns T if p1,p2,p3 are clockwise oriented or collinear (defun LM:Clockwise-p (p1 p2 p3) (< (- (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1))) (* (- (cadr p2) (cadr p1)) (- (car p3) (car p1))) ) 1e-8 ) ) (defun LM:ss->ent (ss / i l) (if ss (repeat (setq i (sslength ss)) (setq l (cons (ssname ss (setq i (1- i))) l)) ) ) )
https://s844.photobucket.com/user/thanhduan2407/media/sssss_zpsxbqp2zsn.png.html
-
3 giờ trước, KangKung đã nói:@thanhduan2407 thử nén file word bằng App trên xem sao. Dung lượng sẽ còn giảm đi đáng kể.
Chắc chắn là nó giảm đáng kể. Chắc anh làm báo cáo nhiều nên mới chèn nhiều ảnh. Em sẽ lưu lại để sau này có thể dùng đến. Em cảm ơn anh
-
Em thường dùng Microsoft Picture Manage để làm giảm dung lượng ảnh trước khi chèn vào word nên cũng giảm đáng kể file Word.
Nó làm giảm dung lượng ảnh nhưng chất lượng ảnh không giảm nhiều.
-
12 giờ trước, Doan Van Ha đã nói:Chẳng hạn hàm này đọc cách user đã đặt về dấu ngăn cách, và hàm ghi chắc cũng tương tự:
(vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")Cháu ghi vào thẻ theo đường dẫn ở dưới. Trong thẻ này cháu ghi các thông tin vào đó bác ạ!
Nhưng nếu ko tích dấu chọn Allow thì không tạo được.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
(defun sv:key-r (Sub typ) (setq Main "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows") (setq sVal (vl-registry-read Main Sub)) (cond ((= typ "i") (setq nVal (atoi sVal))) ((= typ "r") (setq nVal (atof sVal))) ((= typ "s") (setq nVal sVal)) ) ) (defun sv:key-w (Sub Val typ) (setq Main "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows") (cond ((= typ "i") (vl-registry-write Main Sub (rtos Val 2 0))) ((= typ "r") (vl-registry-write Main Sub (rtos Val 2 2))) ((= typ "s") (vl-registry-write Main Sub Val)) ) )
-
11 giờ trước, Doan Van Ha đã nói:Chẳng hạn hàm này đọc cách user đã đặt về dấu ngăn cách, và hàm ghi chắc cũng tương tự:
(vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")Cháu nay đi công tác nên ko theo dõi dc bài viết. Mong bác thông cảm. Tối cháu sẽ mần theo gợi ý của bác ạ
-
7 giờ trước, gia_bach đã nói:Nếu chỉ cần lưu và đọc thì cặp đôi SETENV và GETENV là đủ.
lưu: (setenv "ThanhDuan" "2407")
đọc: (setq val (getenv "ThanhDuan"))
Em muốn tạo 1 số key trong đó để lưu biến anh ạ. Em đã test thấy cần phải tích vào Allow thì mới ghi biến trong đó dc
-
7 phút trước, Doan Van Ha đã nói:Đoán là được, vì read và write rigistry được thì e rằng có cách để xử. Nhưng tìm hiểu thứ này mệt óc nên chỉ dám đoán thôi.
Cháu cảm ơn bác đã phản hồi. Cháu muốn lưu 1 số thứ trong Registry nên cần phải sự đồng ý của việc này ạ!
-
Các bác cho em hỏi 1 chút!
Em muốn viết 1 đoạn lisp can thiệp vào regedit, vào Permission để duyệt qua Group hoặc User name để tích hết vào ô Allow thì có cách nào không ạ? Em cảm ơn các bác nhiều.
-
Vào lúc 22/8/2018 tại 14:38, monavamonava đã nói:File bác gửi đúng với yêu cầu đề ra của em. Không biết CODE đó là như thế nào, bác có thể hướng dẫn chia sẻ cách làm cho em cũng như mọi người biết, học tập và áp dụng với được không. Hóng sự trợ giúp và phản hồi của bác.
Code nó dài lắm và nhiều thao tác.
- Bước 1: Xuất tọa độ giao điểm của mắt lưới ra XY
- Bước 2: Tạo mô hình TIN từ các Text số liệu mặt cắt
- Bước 3: Nội suy cao độ từ file XY đó dựa trên mô hình TIN.
-
Sau khi được sự hỗ trợ của các bác em đã hoàn thành xong mục đích của mình hôm qua rồi.
Cảm ơn các anh các bác đã hỗ trợ.
-
1 giờ trước, quocmanh04tt đã nói:Mình tham gia đề xuất 1 PA (dùng command):
Xét từng ô lưới:
* Trong từng ô lưới (có 4 đỉnh) kiểm tra những đỉnh nào nằm trong Pline kín (trong mỗi đỉnh này có đặc điểm riêng ll, ul, ur và lr)
* Sẽ có 4 trường hợp: 1, 2, 3 hoặc 4 đỉnh nằm trong pline kín
- Nếu 1 đỉnh: xét xem là ll hay tl... polar điểm này về phía 3 điểm còn lại 1 khoảng nhỏ, dùng lệnh BOUNDARY để tạo BOUNDARY
- Nếu 4 đỉnh thì chỉ cần lấy tâm của ô lưới -> BOUNDARY
- 2 hay 3 thì xét các BOUNDARY được tạo ra có trùng toạ độ hay không (điểm pick tương tự trường hợp 1)...
- Trường hợp không có đỉnh nào, mà lưới và pline kín giao nhau thì lấy tất cả điểm giao và những điểm của pline nằm trong ô lưới => sort các điểm theo pline kín và tạo Boundary.
Em ngóng. Em đã xào nấu mấy cái trước và đạt được ý muốn rồi.
Chờ phương án 1 của bác . Hii
-
8 phút trước, Doan Van Ha đã nói:1). Cách dùng hàm GetNewEnts để lấy lst các đối tượng được tạo ra sau 1 loạt lệnh nào đó:
- (setq ent (entlast))
- Làm 1 loạt lệnh...
- (setq lst (GetNewEnts ent))
2). Đúng là cả 2 lisp đều cho ra 1 region dính chùm. Không cần dùng lisp, chỉ dùng command region 2 đối tượng liên quan cũng có kết quả tương tự. Có lẽ do bản chất lệnh region nó thế
Dạ vâng bác! Nhưng kết quả vẫn trả về nil bác ạ!
Cháu cũng sử dụng hàm tương tự của bác nhưng kq nó về nil. Bực mình lắm bác ạ
-
3 giờ trước, ndtnv đã nói:(defun C:TestRegion (/ s r o i t0) (setq s (vlax-ename->vla-object(car (entsel)))) (setq r (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "REGION")(8 . "LUOI")))))))) (setq t0 (getvar "MilliSecs")) (foreach e r (setq o (vla-copy s)) (setq i (vla-boolean e acIntersection o)) ) (-(getvar "MilliSecs") t0) )
Test với bản vẽ có ô lưới = 1/10 của bv bạn đưa lên, có 540 region mất khoảng 1.5s
Nếu dùng select các ô có giao với region gốc time còn giảm
Trường hợp region có nhiều vùng, dùng lisp region=>pline, rồi region lại có lẽ lâu hơn 1 chút
Em chào anh ndtnv !
Em nhận ra, khi vùng 1 giao với vùng 2 tạo ra n vùng nhưng chỉ có 1 region duy nhất. Khi Explode Region đó ra thì nó sẽ tạo thành 2 region.
Đây là bản vẽ Test.
P/s: Bác DVH: Cháu có dùng hàm của bác nhưng chắc cháu chưa biết cách lấy nên danh sách vẫn trả về nil bác ạ!
Cháu thử cả của bác và của anh ndtnv cùng 1 kết quả là Region chồng Region.
Link: http://www.mediafire.com/file/4gkok3u3ue5iywa/BAN_VE_TEST.dwg/file
-
1 giờ trước, ndtnv đã nói:(defun C:TestRegion (/ s r o i t0) (setq s (vlax-ename->vla-object(car (entsel)))) (setq r (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "REGION")(8 . "LUOI")))))))) (setq t0 (getvar "MilliSecs")) (foreach e r (setq o (vla-copy s)) (setq i (vla-boolean e acIntersection o)) ) (-(getvar "MilliSecs") t0) )
Test với bản vẽ có ô lưới = 1/10 của bv bạn đưa lên, có 540 region mất khoảng 1.5s
Nếu dùng select các ô có giao với region gốc time còn giảm
Trường hợp region có nhiều vùng, dùng lisp region=>pline, rồi region lại có lẽ lâu hơn 1 chút
Bác cho em hỏi 1 chút! Làm thế nào lấy được danh sách các region ấy sau khi tìm acIntersection?
Em muốn tóm được nó và biển nó thành Polyline..
-
4 phút trước, ndtnv đã nói:(defun C:TestRegion (/ s r o i t0) (setq s (vlax-ename->vla-object(car (entsel)))) (setq r (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "REGION")(8 . "LUOI")))))))) (setq t0 (getvar "MilliSecs")) (foreach e r (setq o (vla-copy s)) (setq i (vla-boolean e acIntersection o)) ) (-(getvar "MilliSecs") t0) )
Test với bản vẽ có ô lưới = 1/10, 540 region mất khoảng 1.5s
Nếu dùng select các ô có giao với region gốc time còn giảm
Trường hợp region có nhiều vùng, dùng lisp region=>pline, rồi region lại có lẽ lâu hơn 1 chút
Em đã lỡ bấm quá nhiều Like rồi nên giờ không biết bấm Like bác kiểu gì nữa. Cảm ơn bác rất nhiều. Hii
-
12 phút trước, tien2005 đã nói:Bạn tham khảo lips hatch vùng kính của các đối tượng giao nhau ở đây xem có giup được gì không, mình thấy nó cũng tượng tự với y/c của Bạn
Cảm ơn bác @tien2005 ! Em sẽ nghiên cứu thêm gợi ý của bác
-
1 giờ} trướ}c, Doan Van Ha đã nói:Viết giúp chú theo PA2 của anh Gia_bach (PA1 anh Gia_bach xét thiếu các đỉnh).
Không biết số ent màu hồng có nhiều không, chứ dùng PA command hơi ì ạch nếu số lượng đủ lớn.
(defun C:HA(/ old ent lst ds1 ds2) (command "undo" "be") (setq old (entlast)) (setq ent (car (entsel "\nChon Pline mau trang: "))) (princ "\nChon tat ca o vuong mau hong: ") (setq lst (#SS->List (ssget))) (mapcar '(lambda(e) (command "copy" e "" "none" '(0 0) "none" '(0 0)) (command "region" (entlast) "")) lst) (setq ds1 (GetNewEnts old) old (entlast)) (repeat (length lst) (command "copy" ent "" "none" '(0 0) "none" '(0 0)) (command "region" (entlast) "")) (setq ds2 (GetNewEnts old) i -1) (repeat (length ds1) (command "INTERSECT" (nth (setq i (1+ i)) ds1) (nth i ds2) "")) (command "undo" "e") (princ)) (defun GetNewEnts (ename / new) (while (setq ename (entnext ename)) (if (entget ename) (setq new (cons ename new)))) new) ; list ename (defun #SS->List (ss / i lst) (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst))))
Bác Doan Van Ha viết OK rồi ạ! :D
-
1 giờ trước, ketxu đã nói:Đã dính vào command thì ketxu Vote phương án Interset Region, nhẹ nhàng, đỡ đau đầu ^^
Em viết dùm anh phương án này với nhé! Hii
Hỏi về Lisp (thuật toán, ý tưởng, coding,...)
trong AutoLisp
Đã đăng · Trả lời báo cáo
[Hỏi hàm Gread]
Em đã có sẵn 1 selection (ssBang) với Base Point là PntDat
Em muốn move ssBang hiển thị theo kiểu di chuột cho đến khi click chuột phải thì dừng tại đó.
Em viết như này mà vẫn chưa được. Mong các bác chỉ giáo em với.
(TD:vla-move-ss ssBang PntDat (setq pt (cadr (grread t 13 0)))) (setq flag T) (while (and flag (= 5 (car (setq gr (grread t 13 0))))) (progn (redraw) (setq Pt1 (cadr gr)) (TD:vla-move-ss ssBang pt1 (cadr (grread t 13 0))) ) (if (= 3 (car gr)) (setq flag nil) ) ) (defun CV:List-to-ss (lst / ss) (setq ss (ssadd)) (foreach item lst (or (= (type item) 'Ename) (setq item (vlax-vla-object->ename item)) ) (setq ss (ssadd item ss)) ) ss )