Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

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

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

thanhduan2407    227

Nhờ các bác tư vấn em với ạ!

Em có một đường Pline khép kín và em muốn sử dụng lisp Etrim (lệnh Extrim) để cắt bỏ các đối tượng cùng một Layer bên ngoài Polyline thì nên làm như nào vậy ạ? Liệu có phải Lock các layer lại, chỉ để lại Layer cần cắt rồi sau đó lại Unlock?

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
Doan Van Ha    2.677

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..

  • 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
phamthanhbinh    3.123

Hàm đổi từ decimal => dms

(list (fix d) (fix (rem (* d 60) 60)) (rem (* d 3600) 60))

Bạn tự chuyển qua dạng string, nếu d<0 dùng abs cho m & s

Nếu làm tròn s thêm if

 

 

Chắc bố muốn nói về góc bằng và góc đứng trong trắc địa

http://muce.edu.vn/fckeditor/editor/filemanager/connectors/asp/image/chuong3.pdf

Hề hề hề,

Cứ theo cái định nghĩa này thì muốn xác định góc bằng và góc đứng, còn phải xét điểm nào là diểm gốc trong 3 điểm đã cho mới ổ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
phamthanhbinh    3.123

Có người nhờ mình yêu cầu như sau

Có 3 điểm trong không gian, tìm góc nằm và góc đứng tạo bởi 3 điểm đó. Nói thật cái thuật ngữ này mình không hiểu, mà cái bạn nhờ mình thì giải thích không ra. Bác nào biết lisp mà rành bên khảo sát chắc biết vụ này. Cho mình xin cái hàm này được không? cám ơn!

Hề hề hề,

Đầu xuân , rách việc, ngồi đọc thậy yêu cầu của bác và dựa trên cái định nghĩa mà bác ndtnv cung cấp, mình việt đại cái lisp như sau để bác check lại xem bố cháu đã đồng ý chưa nhé. Trúng thì tốt mà không trúng lại càng tốt hơn. Mong phản hồi từ các bác.

 

http://www.cadviet.com/upfiles/5/5194_timgoctracdia.lsp

 

Kính chúc toàn thể anh em trên diễn đàn một năm mới phát triển và thành công.

 

 

(defun  c:gtrd (/ p1 p2 p3 d1 d2 h1 h2 a1 a2 gb gd1 gd2)
(setq p1 (getpoint "\n Chon diem 3D goc")
          p2 (getpoint  p1 "\n Chon diem 3D thu hai")
          p3 (getpoint p1 "\n Chon diem 3D thu ba")
          d1 (distance p1 p2)
          d2 (distance p1 p3)
          h1 (- (caddr p2) (caddr p1))
          h2 (- (caddr p3) (caddr p1))
          a1 (angle (list (car p1) (cadr p1)) (list (car p2) (cadr p2)) )
          a2 (angle (list (car p1) (cadr p1)) (list (car p3) (cadr p3)) )
          gb (- a2 a1)
          gd1 (atan (/ (/ h1 d1) (sqrt (- 1 (/ (* h1 h1) (* d1 d1))))))
          gd2 (atan (/ (/ h2 d2) (sqrt (- 1 (/ (* h2 h2) (* d2 d2))))))
          kq (list gb gd1 gd2)
)
kq
)
  • 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
thanhduan2407    227

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
Doan Van Ha    2.677

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
Doan Van Ha    2.677

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
gia_bach    1.442

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
thanhduan2407    227

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
Doan Van Ha    2.677

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
thanhduan2407    227

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
thanhduan2407    227

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
thanhduan2407    227

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
Doan Van Ha    2.677

 

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
thanhduan2407    227

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
gia_bach    1.442

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
Doan Van Ha    2.677

@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
thanhduan2407    227

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
Doan Van Ha    2.677

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
thanhduan2407    227

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

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


×