![](https://consid.vn/banner/tuyenkientrucsu.png)
![](https://www.cadviet.com/forum/uploads/set_resources_1/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://www.cadviet.com/forum/uploads/monthly_2018_10/P_member_167879.png)
Phamdung01
-
Số lượng nội dung
18 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
1
Bài đăng được đăng bởi Phamdung01
-
-
23 giờ trước, Gia phuc đã nói:bạn có thể chia sẻ cho mình đc ko ah.
Mình đang ở quê rồi. Ra tết dương mình chỉ cho
-
1
-
-
32 phút trước, Gia phuc đã nói:đã có lisp này chưa thế mọi người.
Nếu đường bao kín là pline. Thì viết dc lisp
-
4 giờ trước, ngothanhduy đã nói:Chào bác chủ lips... em đã test lips của bác, và em có đóng góp như thế này:
- Bác có thể thêm lựa chọn có hoặc không có dấu thập phân (có nghĩa là 3500 thì có thể lựa chọn là 3.500 hoặc 3,500 tuỳ định dạng).
- Bác có thể thêm chữ L= trước giá trị text xuất ra.
em cũng có 1 topic đang hỏi vấn đề trên ở trên diễn đàn mà chưa có kết quả như em mong muốn, nếu được bác có thể hoàn chỉnh thêm lips của bác được không ạ?
Thanks bác!
P/S: bên dưới là link em đăng topic để hỏi vấn đề tương tự ạ?
Mình đang dùng điện thoại nên k test dc lisp
Thêm chuỗi "L = " vào trước (rtos len 2 0)
Còn 3500 mà thành 3.500 thì không phải là thập phân đâu bạn ạ, 3500.00 mới là thập phân
-
1
-
-
Không hiểu rõ ý hàm con của bạn lắm
Nhưng bạn có thể dùng hàm vlax-obj-getparamatpoint để tìm param tại điểm trên pline. Dùng hàm fix để làm tròn param . Sau đó lại dùng hàm vlax-obj-getpointatparam để lấy tọa độ đỉnh kế tiếp. Không biết mình viết đúng hàm không vì đang dùng đthoai. Nhưng về ý tuỏng là như thế
-
-
Xin Lisp cộng Text
trong AutoLisp
4 phút trước, Chiron đã nói:@ketxu test thử bị lỗi:
...
Select objects: Số số lẻ <2>:
Select objects:
; error: bad argument type: VLA-OBJECT nilsau khi nhập số lẻ xong thì bạn phải chọn vào cái text mà nó không nằm trong thành phần cộng mới không lỗi. tức là chọn text a, text b, text c ... nhấn enter, chọn số lẻ, rồi chọn vào text n chứ không dc chọn vào text a hoặc b hoặc c...
-
Xin Lisp cộng Text
trong AutoLisp
Micco là hóa chất mỏ hả bạn. Có ở cẩm phả không
-
(defun C:td1 () (setq d (vlax-ename->vla-object (car (entsel)))) (cond ((=(vla-get-ObjectName d) "AcDbPolyline") (progn (while (setq e (getpoint)) (setq e (vlax-curve-getClosestPointToProjection d e '(0 0 1))) (setq param (vlax-curve-getParamAtPoint d e)) (setq param (+ (fix param) 1)) (setq e (vl-remove (last e) e)) (vlax-invoke d 'AddVertex Param e) ))) ((=(vla-get-ObjectName d) "AcDb3dPolyline") (progn (while (setq e (getpoint)) (setq endparam (vlax-curve-getEndParam d)) (setq dsparam nil) (while (>= endparam 0) (setq dsparam (append dsparam (list endparam))) (setq endparam (1- endparam)) ) (setq e (vlax-curve-getClosestPointToProjection d e '(0 0 1))) (setq param (vlax-curve-getParamAtPoint d e)) (setq dsparam (append dsparam (list param))) (setq dsparam (vl-sort dsparam '>)) (setq dspoint nil) (foreach tam dsparam (setq e (vlax-curve-getPointAtParam d tam)) (setq dspoint (append e dspoint)) );foreach (vlax-put d 'coordinates dspoint) ))) ((=(vla-get-ObjectName d) "AcDbSpline") (progn (while (setq e (getpoint)) (setq e (vlax-curve-getClosestPointToProjection d e '(0 0 1))) (setq dsfit (vlax-get d 'fitpoints)) (setq dsfit2 nil) (while dsfit (setq dsfit2 (cons (list (car dsfit) (cadr dsfit) (caddr dsfit)) dsfit2)) (setq dsfit (cdddr dsfit)) ) (setq dsparam (mapcar '(lambda (a) (vlax-curve-getparamatpoint d a)) dsfit2)) (setq dsparam (cons (vlax-curve-getparamatpoint d e) dsparam)) (setq dsparam (vl-sort dsparam '>)) (setq n (length (member (vlax-curve-getparamatpoint d e) dsparam))) (vlax-invoke-method d 'addfitpoint (- n 1) (vlax-3d-point e)) ))) (t nil) );cond )
dùng cho polyline, 3dpolyline, spline
-
trước mình cũng bị vậy, vào option -profile-reset khắc phục tạm thời, nhưng tắt đi bật lên lại bị
-
nhập nhiều điểm thì sao bạn không đưa file text chứa tọa độ điểm đầu, góc, và độ dài lên đây, anh em nghiên cứu xuất 1 phát từ text vào cad luôn cho bạn đỡ phải nhập bằng tay
-
có lẽ có thể tìm được câu trả lời trong lisp này
Tiện có ai có thể xem giúp mình cái lisp đó nó tạo các mặt 3dface kiểu gì không, vì mình đọc mãi mà không hiểu chỗ cái lệnh "TIN" ấy, nó lấy ra tập hợp "l" toàn điểm lung tung, rồi đùng 1 cái nó nhảy ra tập hợp "l2" chứa các tập hợp 3 điểm gần nhau rồi vẽ ra các mặt 3dface. thật kỳ diệu.
-
mình làm đại khái cho bạn hiểu nhé
(setq 3d (vlax-ename->vla-object (car (entsel))))
(setq danhsach (vlax-get 3d 'Coordinates))
nó sẽ trả về danh sách tọa độ các điểm 3d theo kiểu (x1 y1 z1 x2 y2 z2 ...)
dùng hàm (group-by-num danhsach 3) sau để lấy danh sách tọa độ kiểu ((x1 y1 z1) (x2 y2 z2)...)
(defun group-by-num (lst num / ls ret)
(if (= (rem (length lst) num ) 0)
(progn (setq ls nil)
(repeat (/ (length lst) num)
(repeat num (setq ls(cons (car lst) ls)lst (cdr lst)))
(setq ret (append ret (list (reverse ls))) ls nil)))) ret)-
1
-
-
Vào lúc 21/10/2018 tại 10:04, gia_bach đã nói:Tham khảo lisp add vertex tại trung điểm của các segments :
(defun c:3dpseg-midvtx ( / ss i e l p pl mpl pln ) (if (setq ss (ssget "_:L" '((0 . "POLYLINE") )))) (repeat (setq i (sslength ss)) (setq e (ssname ss (setq i (1- i)))) (setq l (safearray-value (variant-value (vla-get-coordinates (vlax-ename->vla-object e))))) (repeat (/ (length l) 3) (setq p (list (car l) (cadr l) (caddr l))) (setq pl (cons p pl)) (setq l (cdddr l)) ) (setq pl (reverse pl)) (if (vlax-curve-isclosed e) (setq pl (reverse (cons (car pl) (reverse pl)))) ) (setq mpl (mapcar '(lambda ( a b ) (mapcar '(lambda ( c d ) (/ (+ c d) 2.0)) a b)) pl (cdr pl))) (setq pln (apply 'append (mapcar '(lambda ( a b ) (list a b)) pl mpl))) (if (not (vlax-curve-isclosed e)) (setq pln (reverse (cons (last pl) (reverse pln)))) ) (repeat (length mpl) (vla-appendvertex (vlax-ename->vla-object e) (vlax-3d-point (last pl))) ) (vlax-put (vlax-ename->vla-object e) 'coordinates (apply 'append pln)) (setq pl nil pln nil) ) ) (princ))
em đã hiểu. cảm ơn nhiều ạ
-
Vào lúc 16/9/2009 tại 12:44, gia_bach đã nói:nataca đọc không kỹ rồi.
Vấn đề đang nói là hàm Addvertex, mà hàm này chỉ dùng đuợc với đối tuợng LWPOLYLINE (Lightweight Polyline) hay 2Dpolyline.
Để thêm đỉnh vào đối tuợng 3Dpolyline phải dùng hàm khác.
(Thực tế khi xem các mã DXF của LWPOLYLINE, thông tin các đỉnh cũng đuợc lưu với kiểu 2D, thông tin cao độ Z (Elevation) đuợc lưu với mã DXF 38)
Tui đang nói về đối tuợng LWPOLYLINE còn bạn nói về đối tuợng 3Dpolyline.
đuơng nhiên DXF hay tọa độ của 2 kiểu đối tuợng này phải khác nhau.
Bác ơi cái hàm vlax-invoke 'addvertex thì em hiểu rõ rồi. Nhưng em đang tìm hàm nào thêm đỉnh cho đường 3dpoly. Theo tìm hiểu thì nó k phải là addvertex mà là appendvertex thì phải. Nhưng k biết cấu trúc của nó ntn. Em thử (vlax-invoke-method obj 'appendvertex (vlax-3d-point pt)) rồi mà nó chỉ thêm đỉnh vào cuối đường 3p thôi
thuật toán để CAD có phân biêt dc chiều của Polyline
trong AutoLisp
Đã đăng · Trả lời báo cáo
Nếu đa giác lồi thì rất dễ. Nhưng lõm thì chưa nghĩ ra