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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

Em có thể viết 1 lisp có sử dụng lệnh EXTRIM bằng cách:

- Nhập tên Layer muốn Trim.

- Lock tất cả Layer còn lại.

- EXTRIM.

- Unlock..

Bác cùng ý với em ạ!

Em đã làm ok rồi nhưng.....cái hàm Extrim này nó cắt không triệt để bác nhỉ? Vẫn còn râu. @@

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hàm Extrim với các curve phức tạp thì đôi khi nó mang tính gần đúng. Trên Cadviet tôi đã từng nói tới điều này 1 lần rồi. Đành sống chung với lũ thôi.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi đang lập 1 chương trình với số phần tử trong list lên tới hàng triệu (10^6). Để đạt mục đích đề ra, nó chạy mất tầm 60 phút!!! Woa, chán quá!

Tôi muốn hỏi 2 vấn đề:

1). Có thể viết 1 hàm tự tạo có tốc độ nhanh hơn hàm nguyên thủy không (bằng lsp hoặc arx)?

2). Nếu có thể, nhờ giúp tôi viết 1 hàm để thay hàm SUBST, vì hàm này chạy rất chậm nếu list đủ lớn.

Thank vì đã đọc!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi đang lập 1 chương trình với số phần tử trong list lên tới hàng triệu (10^6). Để đạt mục đích đề ra, nó chạy mất tầm 60 phút!!! Woa, chán quá!

Tôi muốn hỏi 2 vấn đề:

1). Có thể viết 1 hàm tự tạo có tốc độ nhanh hơn hàm nguyên thủy không (bằng lsp hoặc arx)?

2). Nếu có thể, nhờ giúp tôi viết 1 hàm để thay hàm SUBST, vì hàm này chạy rất chậm nếu list đủ lớn.

Thank vì đã đọc!

Nếu chỉ có hàm SUBSTR thôi thì chắc không cải thiện hiệu suất nhiều đâu ?

Tôi nghĩ là có liên quan đến cách tổ chức dữ liệu (các phần tử trong List).

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho em hỏi 1 chút ạ!

Em muốn gán màu sắc cho đối tượng theo TrueColor (RGB) thì dùng phương thức như thế nào ạ? Em cảm ơn các bác nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chú Lee Mac có 1 loạt các hàm convert. VD từ RGB->ACI:

 

(defun LM:RGB->ACI ( r g b / cObj aci ) (vl-load-com)
  (if
    (and
      (setq cObj
        (vla-getInterfaceObject (vlax-get-acad-object)
          (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
        )
      )
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply 'vla-SetRGB (list cObj r g b))
        )
      )
    )
    (setq aci (vla-get-ColorIndex cObj))
  )
  (if cObj (vlax-release-object cObj))
  aci
)
 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chú Lee Mac có 1 loạt các hàm convert. VD từ RGB->ACI:

 

(defun LM:RGB->ACI ( r g b / cObj aci ) (vl-load-com)
  (if
    (and
      (setq cObj
        (vla-getInterfaceObject (vlax-get-acad-object)
          (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
        )
      )
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply 'vla-SetRGB (list cObj r g b))
        )
      )
    )
    (setq aci (vla-get-ColorIndex cObj))
  )
  (if cObj (vlax-release-object cObj))
  aci
)
 

Em cảm ơn bác Doan Van Ha nhiều. Hiii.

Chú Lee Mac có 1 loạt các hàm convert. VD từ RGB->ACI:

 

(defun LM:RGB->ACI ( r g b / cObj aci ) (vl-load-com)
  (if
    (and
      (setq cObj
        (vla-getInterfaceObject (vlax-get-acad-object)
          (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
        )
      )
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply 'vla-SetRGB (list cObj r g b))
        )
      )
    )
    (setq aci (vla-get-ColorIndex cObj))
  )
  (if cObj (vlax-release-object cObj))
  aci
)
 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào bác Hạ!

Đêm qua em mới check qua nhưng chưa thực hành.

Em muốn gán màu sắc cho đối tượng theo TrueColor như hình vẽ. Như vậy có nhiều màu sắc hơn để gán màu cho đối tượng. Em gán màu sắc cho đường đồng mức ạ. Lại làm phiền bác Hạ và các bác rồi.

Thôi chết. Dc bác Hạ gợi ý lại quên béng mất. Em tìm trong Lee-Mac có rồi. Hii. Em ko biết cách xóa bài nên Edit ạ!

36665_se.jpg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bác!

Em tạo 4 danh sách sau đó gộp lại thành một, nhưng khi test nó lại báo

Application ERROR: Bad argument type

Em test từng cụm thì thấy LtsRGB3 ảnh hưởng nhưng em không phát hiện ra lỗi sai. Nhờ các bác tư vấn dùm em. Em cảm ơn nhiều!


;;;test (GetListRGB 10)

(defun GetListRGB (iColor / BI GI GII Ri)
  (setq LtsRGB (list))
  (setq LtsRGB1 (list))
  (setq LtsRGB2 (list))
  (setq LtsRGB3 (list))
  (setq LtsRGB4 (list))
  
  (setq Gi 0)
  (while
    (< Gi (- 255 iColor))
     (setq Gi (+ Gi iColor))
     (setq LtsRGB1 (append LtsRGB1 (list (list 0 Gi 255))))
  )

  (setq Bi 255)
  (while
    (> Bi iColor)
     (setq Bi (- Bi iColor))
     (setq LtsRGB2 (append LtsRGB2 (list (list 0 255 Bi))))
  )

  (setq Ri 0)
  (while
    (< Ri (- 255 iColor))
    (setq Ri (+ Ri iColor))
    (setq LtsRGB3 (append LtsRGB3 (list (list Ri 255 0))))
  )

  (setq Gii 255)
  (while
    (> Gii iColor)
     (setq Gii (- Gii iColor))
     (setq LtsRGB4 (append LtsRGB4 (list (list 255 Gii 0))))
  )
  (setq LtsRGB (append LtsRGB1 LtsRGB2 LtsRGB3 LtsRGB4))
  LtsRGB
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Chào các bác!

Em tạo 4 danh sách sau đó gộp lại thành một, nhưng khi test nó lại báo

Application ERROR: Bad argument type

Em test từng cụm thì thấy LtsRGB3 ảnh hưởng nhưng em không phát hiện ra lỗi sai. Nhờ các bác tư vấn dùm em. Em cảm ơn nhiều!


;;;test (GetListRGB 10)

(defun GetListRGB (iColor / BI GI GII Ri)
  (setq LtsRGB (list))
  (setq LtsRGB1 (list))
  (setq LtsRGB2 (list))
  (setq LtsRGB3 (list))
  (setq LtsRGB4 (list))
  
  (setq Gi 0)
  (while
    (< Gi (- 255 iColor))
     (setq Gi (+ Gi iColor))
     (setq LtsRGB1 (append LtsRGB1 (list (list 0 Gi 255))))
  )

  (setq Bi 255)
  (while
    (> Bi iColor)
     (setq Bi (- Bi iColor))
     (setq LtsRGB2 (append LtsRGB2 (list (list 0 255 Bi))))
  )

  (setq Ri 0)
  (while
    (< Ri (- 255 iColor))
    (setq Ri (+ Ri iColor))
    (setq LtsRGB3 (append LtsRGB3 (list (list Ri 255 0))))
  )

  (setq Gii 255)
  (while
    (> Gii iColor)
     (setq Gii (- Gii iColor))
     (setq LtsRGB4 (append LtsRGB4 (list (list 255 Gii 0))))
  )
  (setq LtsRGB (append LtsRGB1 LtsRGB2 LtsRGB3 LtsRGB4))
  LtsRGB
)

Em là người xui tận mạng! Nhưng nhờ sự xui xẻo của em mà có thể nhiều người hưởng lợi. Theo 1 chú đã từng làm cho autodesk tiết lộ thì hãng này thú nhận là chúng nó cũng không sửa được (???). Hay là do chúng ta sử dụng phần mềm lậu nên chúng nó chơi đểu. Đó là lỗi của hàm list.

Ví dụ:

Command: (cons 219 (list 1.0 2.0 3.0)) => (219 1.0 2.0 3.0)

Command: (cons 220 (list 1.0 2.0 3.0)) => (220 1.0 2.0 3.0)

Application ERROR: Bad argument type

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em là người xui tận mạng! Nhưng nhờ sự xui xẻo của em mà có thể nhiều người hưởng lợi. Theo 1 chú đã từng làm cho autodesk tiết lộ thì hãng này thú nhận là chúng nó cũng không sửa được (???). Hay là do chúng ta sử dụng phần mềm lậu nên chúng nó chơi đểu. Đó là lỗi của hàm list.

Ví dụ:

Command: (cons 219 (list 1.0 2.0 3.0)) => (219 1.0 2.0 3.0)

Command: (cons 220 (list 1.0 2.0 3.0)) => (220 1.0 2.0 3.0)

Application ERROR: Bad argument type

Trời ơi! Không có cách khắc phục hả bác?

Em viết một list đơn giản mà không được ạ?

Em tạo một danh sách Red, Green, Blue

Ds1: Red = 0, Green tăng từ 0 đến 255 theo bước nhảy iColor cố định, Blue = 255

Ds2: Red = 0, Green =255, Blue giảm 255 về 0 hoặc gần về 0 (theo bước nhảy iColor cố định)

Ds3: Red tăng từ 0 đến 255 theo bước nhảy iColor cố định, Green = 255, Blue = 0

Ds4: Red =255, Green giảm 255 về 0 hoặc gần về 0 (theo bước nhảy iColor cố định), Blue = 0.

Sau đó gộp 4 danh sách với nhau.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em là người xui tận mạng! Nhưng nhờ sự xui xẻo của em mà có thể nhiều người hưởng lợi. Theo 1 chú đã từng làm cho autodesk tiết lộ thì hãng này thú nhận là chúng nó cũng không sửa được (???). Hay là do chúng ta sử dụng phần mềm lậu nên chúng nó chơi đểu. Đó là lỗi của hàm list.

Ví dụ:

Command: (cons 219 (list 1.0 2.0 3.0)) => (219 1.0 2.0 3.0)

Command: (cons 220 (list 1.0 2.0 3.0)) => (220 1.0 2.0 3.0)

Application ERROR: Bad argument type

Chạy thử 2 dòng trên với Cad 2015, 2016 có bản quyền thì bình thường.

Nhưng với Cad 2014 xxx thì bị lỗi giống như của bác HA.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@Thanhduan: Cái khó ló cái khôn. Ví dụ cho em vài cách để xử tội chúng nó: 

1). Em đảo ngược vị ví của list chứa Ri từ (Ri 255 0) thành (0 255 Ri), sau khi lặp xong dùng mapcar để reverse lại.

2). Thay (list Ri 255 0) thành (vl-list* Ri 255 0).

3). Tự nghĩ sẽ ra...

@Gia_Bach: tôi đoán là autodesk dùng chiêu này để chơi khăm các người dùng lậu, hơn là bị lỗi.

Nói chung, trong hàm (list (list x a b c)), với x là biến số, thì chỉ lỗi nếu 220<=x<=239, còn nếu x nằm ngoài vùng đó thì OK.

Ta nghèo nên đành sống chung với lũ thôi.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào anh!

em muốn hỏi bây giờ em muốn thống kê các đối tượng  ví dụ như đèn điện trong 1 bản cad, vì quá nhiều nên đếm thủ công rất khó khăn. Anh có lisp hay cách nào giúp em quét vùng để tự tính k ạ!

em cảm ơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho em hỏi xíu ạ!

Em muốn thay đổi chiều cao của Text Field thì làm như thế nào ạ? Em chỉ cần các bác gợi ý thôi ạ!

Em cảm ơn các bác nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho em hỏi xíu ạ!

Em muốn thay đổi chiều cao của Text Field thì làm như thế nào ạ? Em chỉ cần các bác gợi ý thôi ạ!

Em cảm ơn các bác nhiều.

Text field thì cũng là text, height cũng là assoc 40 thôi. Hay anh chưa hiểu ý em?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Text field thì cũng là text, height cũng là assoc 40 thôi. Hay anh chưa hiểu ý em?

Em bí quá nên nhờ Ketxu nên giải quyết dc rồi anh ạ! Nó liên quan đến textsize nên em điều chỉnh được rồi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

[Hỏi về DCL dialog] em muốn hỏi một số vấn đề về dialog

Xin hỏi các bác trong Dialog của Cad em muốn làm một số điều sau đây, thì dùng lệnh/ từ khoá gì để làm được điều đó.

1. Mặc định khi Hộp thoại hiện lên sẽ đặt con trỏ chuột, (active key của Dialog) vào một key mà mình muốn, có áp dụng điều đó với key của edit_box { key .....} không?

2. Thay vì mặc định khi hiện H.Thoại là 1 key nào đó, giờ muốn khi chọn trong danh sách PopUp List1 thì mặc định của active key sau đó thay đổi do người lập trình quyết đinh?

Cảm ơn các bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Câu 1 ý 1 để đặt trỏ vào 1 key: is_default = true;

Câu 1 ý 2 để trỏ vào edit_box: dùng hàm mode_tile

Câu 2 chưa hiểu

Cảm ơn bác, em đã thử,

1. với is_deafault đã từng dùng, không thích lắm

2. em đọc Help thì mode_tile dùng với cấu trúc (mode_tile key flag)

flag nhận giá trị interger 0->4, giá trị 1,0 em thường dùng, giá trị 2->4 không dùng bao giờ đang tìm hiểu, có vẻ nó thoả mãn được nhu cầu của e.

3. Nếu 2 làm được, 3 em làm được, cảm ơn bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mọi người cho hỏi tí:

Tại sao hàm vla-ZoomCenter khi chạy trong vòng lặp n lần thì dòng "command" cũng bị nhảy theo n lần, khiến nó nháy nháy ở dòng command, dù đã setvar cmdecho?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×