-
Số lượng nội dung
548 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
46
Bài đăng được đăng bởi ndtnv
-
-
13 giờ trước, NVH_CADVIET đã nói:Dear Nguyen Hoanh
biết lệnh adcenter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Mình có 1 file fas: THEMTEXT (ADDT).01.fas (Chắc file đã mã hóa của tác giả mình không rõ nữa) mình chép vào trong thư mục của mình : c:/THUC HANH-BT1/THEMTEXT (ADDT).01/THEMTEXT (ADDT).01.fas
Theo code của bác mình làm thử :
+ chỉ cần load file lisp theo code dưới đây mà nó vẫn load được file .fas này. và đọc được lệnh (ở đây là lệnh ADDT của file .fas) mà không cần phải load file : THEMTEXT (ADDT).01.fas này
+ Vấn đề ở đây là nó không thực thi 5 lần sử dụng. (nó vẫn chạy bình thường theo file fas. ấy (tuy không phải load. Vì nó tự load theo đường dẫn.
Vây không biết sai sai gì đó. Nhờ bác góp ý nhé.
(load "c:/THUC HANH-BT1/THEMTEXT (ADDT).01/THEMTEXT (ADDT).01.fas")
(defun c:TEST ()
(C: ADDT)
;;; Doc gia tri
(setq tmp (getcfg "c:/THUC HANH-BT1/THEMTEXT (ADDT).01/THEMTEXT (ADDT).01.fas")
sl (cond
((or (not tmp) (= tmp "")) "5")
(t tmp)
)
);;; Kiem tra va thong bao
(if (/= sl "0")
(progn
;;; Thuc thi ma lenh
(princ (strcat "\nBan con " sl " lan su dung nua"))
;;; Luu gia tri
(setcfg "c:/THUC HANH-BT1/THEMTEXT (ADDT).01/THEMTEXT (ADDT).01.fas" (itoa (1- (atoi sl))))
)
(princ "\nBan da het han su dung!")
)(princ)
)=> LÀM THỰC HÀNH THÔI ! "ĐANG CỐ HIỂU.. NHƯNG CÀNG CỐ ... CÀNG KHÔNG HIỂU" .
Xin cảm ơn!
Bạn xem lại code của Nguyen Hoanh
Code của bạn:
(defun c:TEST ()
(C: ADDT)...
Dòng (C: ADDT) đặt ở vị trí này thì luôn thực thi là phải rồi
Phải đặt ở chỗ
;;; Thuc thi ma lenh
-
Góc dim rotated không chỉ có chỉ có 2 giá trị là 0 và pi/2
nó là DXF 50 hoặc (vlax-get-property dimo 'Rotation)
Xoay ucs rồi dim sẽ thấy
-
Thêm: VISRETAIN = 0
và : XDWGFADECTL = 0
-
1
-
-
33 phút trước, Doan Van Ha đã nói:Cho hỏi tí:
1. Tại sao viết '''((u v) thì tương đương với '(lambda(u v) ?
2. Cách viết 1 ngoài ngắn gọn thì có gì ưu điểm so với cách viết dùng lambda? Và liệu lambda có phải là hàm thừa?Cách viết '''((u v) tôi copy của 1 member trên cadviet từ lâu rồi, vì ngắn hơn nên dùng thôi, cũng như '(1 2) ngắn hơn (list 1 2) vậy
-
1
-
-
Vì không có bản vẽ nên bạn tự đặt thuộc tính các đoạn thẳng cần vẽ
(defun C:TOP ( / l p q) (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE")))))) (setq p (cdr (assoc 10 (entget e))) q (cdr (assoc 11 (entget e)))) (setq l (cons (if (> (cadr p) (cadr q)) p q) l)) ) (setq l (vl-sort l ''((u v) (< (car u) (car v))))) (mapcar ''((u v) (entmakex (list '(0 . "LINE") (cons 10 u) (cons 11 v)))) l (cdr l)) )
-
2
-
-
(ssget (list (cons 420 (+ (* 255 65536) (* 255 256) 254))))
(ssget (list (cons 420 (+ (* 255 65536) (* 208 256) 255))))Tổng quát:
(ssget (list (cons 420 (+ (* R 65536) (* G 256) B))))
-
1
-
-
RemoveVertex method
trong AutoLisp
Search gg có nhiều lisp
-
1
-
-
RemoveVertex method
trong AutoLisp
Phương thức RemoveVertex chỉ có ở Section
LightWeightPolyline không có RemoveVertex
-
1
-
-
Code lấy tập hợp điểm bên phải ss1 và sắp xếp từ trên xuống:
(repeat (sslength ss1)
(setq e (vlax-ename->vla-object (ssname ss1 giaso)))
(setq pd (vlax-curve-getStartPoint e))
(setq pc (vlax-curve-getEndPoint e))
(setq p (if (< (car pd) (car pc)) pc pd))
(setq list1 (cons p list1))
(setq giaso (1+ giaso))
)
(setq list1 (vl-sort list1(function (lambda (x1 x2)(> (cadr x1) (cadr x2)) ) ) ))Bạn tự viết cho ss2 rồi nối lại
-
1
-
-
-
Chương trình sai khi pline có nhiều đỉnh cùng x hoặc y
-
1
-
-
1. Ngoài khả năng của tôi vì tôi đã tìm hiểu cách tìm phương trình Spline nhưng có nhiều cách khác nhau thường là mô phỏng theo hàm mũ.
y = Σai.x^i Chỗ này có nói cách tìm hệ số ai
Tôi thấy cách tính ở đây hợp lý hơn nhưng không có hướng dẫn cách tìm các hệ số:
x = Σai.t^i
y = Σbi.t^i
2 . Sai số của số thực khoảng 5e-16 nên theo tôi khi copy ra thì do
(vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt) xấp xỉ sai số đó
=> các control point thay đổi với giá trị tuyệt đối gần như nhau nhưng tương đối sẽ khác nhau
=> góc khác nhau
3. Vì độ chính xác số thực của máy tính như vậy nên một số trường hợp đặt biệt như bài này không làm được
-
1
-
-
debug thấy
(vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt)) = (1.26979e-016 9.16744e-015 0.0)
gần đạt đến giới hạn độ chính xác của số thực => góc có sai số lớn
thêm đoạn code sau:
(setq g (entget ent) lp (vl-remove-if-not ''((x) (=(car x) 10)) g))
ta được
lp = ((10 3568.58 447.895 0.0) (10 3579.31 450.769 0.0) (10 3599.03 456.054 0.0) (10 3606.68 492.683 0.0) (10 3640.52 520.304 0.0) (10 3825.43 440.735 0.0) (10 3825.43 440.735 0.0) (10 3825.43 440.735 0.0))
3 điểm control cuối gần = nhau. Tăng độ chính xác
(setq d56 (mapcar '- (cdr (nth 6 lp)) (cdr (nth 5 lp))) d67 (mapcar '- (cdr (nth 7 lp)) (cdr (nth 6 lp))))d56 = (0.0 0.0 0.0), d67 = (0.0 4.54747e-013 0.0)
ta thấy điểm 5 và 6 trùng nhau, điểm 7 cách không đáng kể
Không thể bắt nearest vào đoạn gần cuối
-
1
-
-
Chọn Pline khép kín:
(ssget '((0 . "LWPOLYLINE")(-4 . "&")(70 . 1)))
lisp SICP (select in closed pline) chưa xét pline hở có điểm đầu trùng điểm cuối
-
1
-
-
Tham khảo lisp imf của Nguyen Hoanh ở đây
Sửa dòng thứ 3 thành:
filelist (vl-sort (vl-directory-files pathname "*.dwg") '<) p (getpoint "\nDiem chen: ")
-
Tuy nhiên dùng shift + chuột phải nhanh hơn vì menu ngay vị trí mouse
-
1 giờ} trướ}c, tannguyen291 đã nói:Thánh đây rồi.Bác làm như thế nào vậy để em nghiên cứu thêm. crack bằng cách dùng lisp đổi Insert block rồi xoá Minsert của em đi rồi explode phải không ạ.
Đúng 1/2 là xóa Minsert.
Dùng entmake vẽ đối tượng trong Minsert chứ không explode
-
Viết 1 lisp chưa hoàn chỉnh vì chưa xét scale và rotation cũng như chưa xét block thì hiển thị gần hết
-
3
-
-
BLOCK CAD
trong Sử dụng AutoCAD
Vào lúc 29/7/2021 tại 09:53, Nguyen hai 289 đã nói:Hi anh chị, anh chị cho em hỏi chút, có cách nào mà text trong block không bị đảo lộn khi dùng lệnh đối xứng MI block đó không ạ ?
Em cảm ơn anh chị ạ.!
Dùng Attribute thay cho text
-
Khi chiều xoay p1,p2,p3 là CW nhưng p11,p21,p31 là CCW hoặc ngược lại
thì ss2 align 3D nên DXF 210 /= (0 0 1) => Lỗi text
Giải pháp:
Cách 1. Đổi DXF 210 về (0 0 1)
Cách 2. Nên làm mặc dù phức tạp hơn:
Bỏ p3, p31 và thay bằng "" trong lệnh ALIGN
Sau đó hỏi MIRROR ss2 Y/N ? hoặc Y/N/Undo ?
Nếu Y thì MIRROR ss2 qua line qua p11 và vuông góc p11, p21
-
1
-
-
Sai ở đây:
(command "copy" ss1 "" "D" 0)
Sửa thành:
(command "copy" ss1 "" "" "")
ALIGN 2D thì bỏ các điểm p3, p31
-
1
-
-
Tốt nhất là dùng lisp cho các OS hay dùng, tên theo giá trị OS hoặc cđ OS
VD
(defun C:33 () (setvar "OSMODE" 33))
hoặc
(defun C:EI () (setvar "OSMODE" 33)) ; End + Inters
Muốn biết OS đang dùng, type vào command
(getvar "OSMODE")
-
2
-
-
set và setq
trong AutoLisp
Ví dụ 2 dòng sau đều gán a = 2
(setq a 2)
(set 'a 2)Tuy nhiên hàm set chậm hơn nhưng cho phép by reference, hàm setq chỉ cho phép by value
VD hàm swap 2 biến :
(defun Swap (ru rv / w) (setq w (eval ru)) (set ru (eval rv)) (set rv w))
(setq a 1 b 2)
(swap 'a 'b)-
2
-
-
[Hỏi]Đố vui với LISP
trong AutoLisp
20 giờ trước, Doan Van Ha đã nói:Bạn cho xin ít ví dụ được không? Sao tôi không chọn được như bạn nói.
(ssget "w" '(0 0) '(1 1))
Chọn 2 đối tượng DIM và BLOCK
-
1
-
VIẾT LISP KÉO DÀI, CẮT BỚT NHIỀU ĐỐI TƯỢNG!
trong AutoLisp
Đã đăng · Trả lời báo cáo
Lisp này tôi load trên cadviet (gg nhưng không tìm thấy, hình như của ad nguyen hoanh ) và có chỉnh sửa.
Vì dùng lệnh trim của cad nên có thể chọn nhiều loại đối tượng và đường cắt.
Chú ý biến EDGEMODE và điểm pick để có kết quả mong muốn