Chuyển đến nội dung
Diễn đàn CADViet

Tất cả hoạt động

Luồng cập nhật tự động luồng này     

  1. Giờ trước
  2. cuongtk2

    XIN GIÚP ĐỠ VỀ LISP

    Cũng tùy lĩnh vực mà mấy con chat được huấn luyện đến cấp độ intermediate hay profesional. Kể cả trong 1 môn nào đó, nó cũng có mảng chưa học đến. Và giống như thi trắc nghiệm, gặp tình huống không biết thì nó tick bậy 1 giá trị nào đó mà nó coi là đúng nhất rồi lấy giá trị đó để làm tiếp câu sau . Không vì có 1 câu không làm được mà bỏ cuộc. Buồn cười nhất là câu nó không trả lời được mà bắt nó giải quyết là nó loay hoay một lúc thừa nhận sai rồi trả lời giống như lúc đầu. Nếu bạn ở cấp độ Beginer mà nhờ chat giải quyết vấn đề lập trình thì hên xui tùy theo độ hiếm của tình huống câu hỏi (khác với độ khó theo tư duy của con người). Nếu bạn ở cấp độ Intermediate, bạn cũng học được thêm nhiều thứ khi có nó. Và khi gặp nút thắt bạn có thể mày mò để gỡ, nếu không giải quyết được sẽ cảm thấy vừa nhục vừa nhọc khi nhờ nó. Nếu bạn ở cấp độ Profesional, nó dùng để code nhanh là chủ yếu.
  3. Hôm nay
  4. Hôm qua
  5. 7o7

    XIN GIÚP ĐỠ VỀ LISP

    Bác Duy có vẻ “căm” AI thế nhỉ, tôi có hỏi AI về vụ này thì AI trả lời: “Lisp này bị lỗi ở chỗ vla-get-ActiveAnnotationScale. Lý do là vì trong AutoCAD Object Model (ActiveX API) không có thuộc tính ActiveAnnotationScale của Document. Cụ thể: vla-get-ActiveDocument → trả về đối tượng Document. Nhưng đối tượng Document không có property ActiveAnnotationScale. Thuộc tính ActiveAnnotationScale thực chất nằm trong Database của bản vẽ, chứ không phải Document. Cách đúng: Bạn phải lấy Database của Document trước, rồi mới lấy ActiveAnnotationScale.” Nó sửa lại : (defun c:ANN ( / acDoc acDb curScale ss n ent obj) (vl-load-com) (princ "\n--- Lisp chinh sua Annotation Scale ---") (princ "\nNhap lenh: ANN") ;; Lấy Document hiện tại (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Lấy Database của Document (setq acDb (vla-get-Database acDoc)) ;; Lấy Annotation Scale hiện hành từ Database (setq curScale (vla-get-ActiveAnnotationScale acDb)) ;; Chọn đối tượng (setq ss (ssget)) (if ss (progn (setq n 0) (while (< n (sslength ss)) (setq ent (ssname ss n)) (setq obj (vlax-ename->vla-object ent)) ;; Nếu đối tượng có thuộc tính AnnotationScale (if (vlax-property-available-p obj 'AnnotationScale) (progn ;; Gán Annotation Scale hiện hành (vla-AddScale obj curScale) ;; Xóa các scale khác (vlax-for scale (vla-GetAnnotationScales obj) (if (/= (vla-get-Name scale) (vla-get-Name curScale)) (vla-DeleteScale obj scale) ) ) (princ "\nDa cap nhat doi tuong ve Annotation Scale hien hanh.") ) ) (setq n (1+ n)) ) (princ "\nHoan thanh!") ) (princ "\nKhong co doi tuong nao duoc chon.") ) (princ) ) Sau đó nó còn hỏi: ”Bạn có muốn mình kiểm tra thêm các hàm vla-AddScale và vla-DeleteScale (vì cũng có thể sai khi gọi trong một số phiên bản AutoCAD)?” Nhưng tôi ngưng vì không có hứng đi tiếp! AI nó giỏi đấy chứ, bác Tâp vẽ Cad chắc cũng dùng AI đấy thôi.
  6. Tap.Ve.Cad

    XIN GIÚP ĐỠ VỀ LISP

    Ý bạn là muốn giữ lại Annotative hiện hành và xóa hết các tỉ lệ khác? Nếu vậy thì dùng thử cái này nhé. Mình cũng thử tìm và thấy được lisp này. (defun c:ObjectScaleCurOnly (/ ss n scLst OSC:GetScales) (print "Select the objects you wish to modify: ") (if (or (setq ss (ssget "I")) (setq ss (ssget))) (progn ;; Define helper function to get scales attached to an entity (defun OSC:GetScales (en / ed xn xd cdn cdd asn asd cn cd sn sd cannoscale) (setq ed (entget en)) (if (and ;; Get the XDictionary attached to the object (setq xn (vl-position '(102 . "{ACAD_XDICTIONARY") ed)) (setq xn (cdr (nth (1+ xn) ed))) (setq xd (entget xn)) ;; Get the Context Data Management dictionary attached to the XDictionary (setq cdn (vl-position '(3 . "AcDbContextDataManager") xd)) (setq cdn (cdr (nth (1+ cdn) xd))) (setq cdd (entget cdn)) ;; Get the Annotation Scales dictionary attached to the CD (setq asn (vl-position '(3 . "ACDB_ANNOTATIONSCALES") cdd)) (setq asn (cdr (nth (1+ asn) cdd))) (setq asd (entget asn)) ;; Get the 1st scale attached (setq cn (assoc 3 asd)) (setq cn (member cn asd)) ) ;; Step through all scales attached (while cn (if (and (= (caar cn) 350) ;It it's pointing to a scale record ;; Get the record's data (setq cd (entget (cdar cn))) ;; Get the Context data class (setq sn (assoc 340 cd)) (setq sd (entget (cdr sn))) (setq sn (assoc 300 sd)) ;; Check if the scale is already in the list (not (vl-position (cdr sn) scLst)) ) ;; Add it to the list (setq scLst (cons (cdr sn) scLst)) ) (setq cn (cdr cn)) ) ) ) ;; Find a list of scales used in selection (setq n (sslength ss)) (while (>= (setq n (1- n)) 0) (OSC:GetScales (ssname ss n)) ) ;; Add the current scale to the selection (setq cannoscale (getvar "CANNOSCALE")) (command "._ObjectScale" ss "" "_Add" cannoscale "") ;; Remove all other scales attached (command "._ObjectScale" ss "" "_Delete") (foreach n scLst (if (wcmatch (strcase n) (strcat "~" (strcase cannoscale))) (command n) ) ) (command "") ) ) (princ) )
  7. Tuần trước.
  8. Jakebob25

    XIN GIÚP ĐỠ VỀ LISP

    KHÔNG BIẾT CÁC BÁC CÒN Ở LẠI DIỄN ĐÀN NÀY KHÔNG, NẾU CÓ BÁC NÀO ĐI QUA THẤY BÀI EM GIÚP EM MỘT TÍ LÀ TẠI SAO ĐOẠN LISP TRÊN EM VIẾT CHẠY LẠI BÁO LỖI "no function definition: VLA-GET-ACTIVEANNOTATIONSCALE" Ạ?
  1. Tải thêm hoạt động


  • Newsletter

    Want to keep up to date with all our latest news and information?

    Sign Up
×