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

Danh Cong

Moderator
  • Số lượng nội dung

    1387
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    117

Bài đăng được đăng bởi Danh Cong


  1. 38 phút trước, Quang Trung Lê đã nói:

    @Botot dạ, em đã kiểm tra tất cả rồi, vì bản vẽ em chỉ có 2 style, em đã chuyển mọi thứ về style Text Iso để quản lí cho dễ, và dư ra cái style VNI, em biết lỗi này là do có chỗ nào dùng VNI nhưng e tìm không ra, cả block cũng k có (mà bản vẽ e thì cũng k có block luôn), bản vẽ em chỉ mỗi cái khung tên mà thôi. em đang vất vả để tìm hiểu mà k thể nào mò ra được

    Nhiều khi con voi nó lại lọt qua lỗ kim... @@.

    Kiểm tra tất cả - bằng mắt thì tất yếu sảy ra sự sai sót.

    Để diệt giun hiệu quả, hãy uống "Fukaka" để trừ giun đũa, giun tóc, giun móc, giun kim... Còn để truy tìm 1 đối tượng ABC có tính chất XYZ  nào đó trong cad, đầu tiên hãy nghĩ đến "FI" -"FILTER"

     

    CadViet.png

    • Like 2

  2. CadViet.png

    Một bài toán khó nhằn:

    Em thử trình bày ý tưởng của mình. Các bác tham khảo rồi cho nhận xét nhé  !!!

    Phương pháp giải: Xét trong đoạn chạy của từng ô vuông:

    + B1: Xét 1 ô vuông, với điểm chạy là điểm góc trái, bên dưới của ô vuông. Hướng chạy là ngược chiều kim đồng hồ.

    + B2: Xuất phát từ "1", Tìm điểm giao của ô vuông với  "Hình Gốc".

    + B3: Khi phát hiện ra điểm giao: Lần đầu tại vị trí "3". Tại vị trí này phải kiểm tra vài thứ để xác định hướng chạy tiếp theo như sau: Coi hướng chạy của Polyline ở vùng này là ngược chiều kim đồng hồ: 

                         + TH1: Tại điểm giao: Nếu chạy theo Polyline , điểm tiếp theo nằm ngoài hình vuông hoặc "ngược" chiều với chiều chạy Polyline, : ---> Loại , Sau đó                                               hướng chạy để vẽ bodary lại theo Hình vuông.

                         + TH2: Tại điểm giao : Nếu chạy theo Polyline, điểm tiếp theo nằm trong hình vuông và "cùng"  chiều với chiều chạy Polyline: ---> Ok , Sau đó hướng chạy để vẽ bodary theo Polyline:

                         Giải quyết tại vị trí 3: Hướng chạy theo Polyline sẽ ra vị trí "10", là cùng chiều kim đồng hồ ( Tức là ngược hướng với hướng chạy của Polyline). Cho nên bị loại, ta tiếp tục chạy sang vị trí số 4.

                        + Giải quyết tại vị trí 5: Hướng chạy theo Polyline ra vị trí số 6. Cùng chiều với Polyline, OK. ---> Chạy theo Polyline theo ra số 6: , rồi sang số 7

    Tuy nhiên: Đề phòng trong đoạn : 5-7 Có thêm 1 vùng Hatch nào nữa: Thì lại phải kiểm tra xem đoạn 5-7 Có giao với Polyline hay không. ( Tức là trong ô vuông, số vùng hach có thể nhiều hơn 1)

    B4: Tiếp tục chạy: nếu điểm giao cuối cùng trùng với điểm đầu "số 3 "  thì kết thúc. 

     

    • Like 1

  3. 1 giờ} trướ}c, tuhungbkdn đã nói:

    2. Vấn đề này thì mình cũng biết không ảnh hưởng kết quả bản vẽ nhưng nó lại ảnh hưởng tới vấn đề bắt điểm vì có các chi tiết nhỏ cần zoom để kiểm tra cho chính xác thì rất khó và đã dùng lệnh Regen vẫn không thay đổi gì cả, nếu do lỗi hiễn thị màn hình thì có thể khắc phục bằng cách cài đặt màn hình gì đó không nhỉ

    Hãy đưa bản vẽ đấy lên để mọi người xem. Thầy bói đoán mò thì biết đúng sai thế nào.


  4. Vào lúc 11/8/2018 tại 17:59, thanhdatx2bk đã nói:

    VD: Quét chọn 2 dimension có kích thước là 1000 và 3000, khi dùng lisp của bác sẽ cho ra kết quả là : Gia tri trung binh = 2000.00
    Giờ em muốn thay đổi cách hiển thị kết quả thành: (1000+3000)/2=2000. 

    Code lại:

    (defun c:GTTB ( / DXF GIATRI I LISTNAME N NAME OBJ PT STRINGNAME SUM TEXT)
      (setq obj     (ssget '((0 . "DIMENSION")))
            n     (sslength obj)
            Sum 0.0
        i 1
        Listname '()
        Stringname "")
      (repeat (sslength obj)
            (progn
              (setq name     (ssname obj 0)
                      dxf     (entget name))
              (if (= (cdr (assoc 1 dxf)) "")     (setq giatri  (cdr (assoc 42 dxf)))
                              (setq giatri (atof (cdr (assoc 1 dxf)))))
              (setq Sum (+ Sum Giatri)
            Listname (append Listname (list (rtos Giatri 2 0))))
            (ssdel name obj)
              );end progn
        );end repeat
      ;(princ (strcat "(" Stringname ")/" (rtos n 2 0) (rtos (/ Sum n) 2 2)))
      (setq Stringname (strcat Stringname (nth 0 Listname)))
      (repeat (- n 1)
            (setq Stringname (strcat Stringname "+" (nth i Listname))
              i (+ i 1)))
       (princ Stringname)
            
      (setq Text (entget (car (entsel "\nChon Text Mau")))
        pt (getpoint "\nChon Diem Chen Text"))
      (Entmake
        (list
              (cons 0 "Text")
              (cons 1 (strcat "(" Stringname ")/" (rtos n 2 0) "=" (rtos (/ Sum n) 2 0)))
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbText")
              (assoc 8 Text)
              (assoc 7 Text)
              (cons 10 pt)
              (cons 11 pt)
              (assoc 40 Text)
              (assoc 50 Text)
              (assoc 71 Text)
              (assoc 72 Text)
              (cons 73 0)
              ))
        (princ))


  5. 15 giờ trước, thanhdatx2bk đã nói:

    Bác Đỗ Đức Tiệp xem lại giúp em với, sao em nhấn lênh tbd , quét chọn 2 dimmension , nó hiện lên các lệnh chọn điểm text, chiều cao text, góc text, sau đó đến enter tex, lúc này mình nhập bao nhiêu là nó ra kết quả đó luôn, ko phải ra trung bình cộng 2 dim em vừa chọn

    Góp vui:

    (defun c:test (  / DXF GIATRI N NAME OBJ PT SUM TEXT)
      (setq obj (ssget '((0 . "DIMENSION")))
        n (sslength obj)
        Sum 0.0)
      (repeat (sslength obj)
            (progn
              (setq name (ssname obj 0)
                  dxf (entget name))
              (if (= (cdr (assoc 1 dxf)) "")     (setq giatri  (cdr (assoc 42 dxf)))
                              (setq giatri (atof (cdr (assoc 1 dxf)))))
              (setq Sum (+ Sum Giatri)) 
            (ssdel name obj)
              );end progn
        );end repeat
        (princ (strcat "\nGia Tri Trung Binh = " (rtos (/ Sum n) 2 2)))
      (setq Text (entget (car (entsel "\nChon Text Mau")))
        pt (getpoint "\nChon Diem Chen Text"))
      (Entmake
        (list
              (cons 0 "Text")
              (cons 1 (strcat "Gia Tri Trung Binh = " (rtos (/ Sum n) 2 2)))
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbText")
              (assoc 8 Text)
              (assoc 7 Text)
              (cons 10 pt)
              (cons 11 pt)
              (assoc 40 Text)
              (assoc 50 Text)
              (assoc 71 Text)
              (assoc 72 Text)
              (cons 73 0)
              ))
        (princ))

    • Like 1

  6. + Tức là thay vì thao tác : "Chuột phải ---> Mid betwin 2 point --> Pick 2 điểm",  thành "Pick 2 điểm"?

    Nếu đúng thì đọc thêm bài này: https://www.cadviet.com/forum/topic/171866-hướng-dẫnkhắc-phục-lỗi-ấn-nhầm-f1-khi-esc-và-đặt-phím-tắt-cho-mid-between-two-point/

    Còn lisp thì xin khước, tuy viết dễ, nhưng không nhất thiết giết gà phải dùng dao mổ voi.

     

    • Like 2

  7. 18 phút trước, quocmanh04tt đã nói:

    Tráng sĩ nói không sai! Cad đời trước chỉ cần "Nhất dương chỉ" (command "lengthen" e_name "") là có thể tiêu CMNR.

    Nhưng truyền nhân các đời sau của nó, do khổ luyện nhiều hơn nên nội lực thâm hậu hơn, do đó phải dùng đến "Liên hoàn cước": (command "lengthen" e_name "" "" "")

    KKK...!

    À, bác nhắc thế em mới nhớ. :))) Đúng là Cad đời sau ( Ví dụ như em từng xài cad 2015 ) có tình trạng này.

    Nên em không xài "Lengthen" nữa mà chuyển vô (vla-get-Length (vlax-ename->vla-object e_name))

    Câu trước hiểu nhầm ý bác DinhvanTrang điều này :) Sr bác.

    Chủ thớt thay thử dòng lệnh theo bác QuocManh coi thế nào. !

    • Like 1

  8. 13 phút trước, dinhvantrang đã nói:

    Trong Lisp trên của bạn đó có dùng lệnh "LENGTHEN" để tính chiều dài.

    Nhưng sau khi dùng lệnh đó xong thì nó yêu có một số yêu cầu khác nữa, mà không lặp qua đối tượng tiếp theo.

    Bác @Danh Cong coi thử lệnh đó xem.

    (ssdel e_name ss)

    Câu lệnh này nó xóa đối tượng SS_0 khỏi tập đối tượng E_name rồi bác @dinhvantrangạ.

    Sau đó thì vòng lặp lại tiếp tục với đối tượng SS_0*. Tuy nhiên thì số 0 này không còn là số 0 như trước nữa, nó sẽ là đối tượng tiếp theo trong E_name.

    ( Nói chung là các bác lập trình trước có nhiều dòng code hay lắm ^^. Mình nhiều khi  chỉ đọc để hiểu cũng thấy toát mồ hôi :))) 


  9. 55 phút trước, dtdat đã nói:

    Xin lỗi mình bổ sung lại đây

    Bạn có thể nhấn F2 rồi chụp nguyên cái màn hình cad của bạn khi chọn đối tượng thứ 2 lên để mọi người xem. Quay được video thì càng tốt.

    Với các máy khác thì sao, với phiên bản cad khác có suất hiện lỗi này không? Tôi kiểm tra trên Cad 2012 không thấy lỗi.


  10. 11 phút trước, dtdat đã nói:

    không có bác nào sửa lại giúp nhỉ?

    Lisp trên có dùng được với các bản cad khác không, có dùng được với các máy khác không? Bạn thử chưa?

    Bảo là lỗi thì có ai biết bạn bị cái gì không? Lỗi là lỗi gì, nó như thế nào.

    Tóm lại : "Chỉ đưa thẻ căn cước thì đừng mong bắt được bệnh!"

    • Like 1
×