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ị

K hề sai. (setvar "osmode" 1024) -> A nhấn chuột phải vào ô setting của nút Osnap và nhìn mục check Osnap Object On để biết cái j đang diễn ra :)

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ám ơn bạn Doan Van Ha.

Mình vùa mới biết tới đối tượng Mpolygon nên chưa có kiến thức nhiều về nó. Bạn cho hỏi thêm tý:

- Có khi bản vẽ mở lên không thấy màu của nó, không biết có phải biến hệ thống nào đó hay vì sao?

- Có thể đổi nó thành Hatch hay Polyline được không?

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

K hề sai. (setvar "osmode" 1024) -> A nhấn chuột phải vào ô setting của nút Osnap và nhìn mục check Osnap Object On để biết cái j đang diễn ra :)

 

Ket dùng (setvar "osmode" 0)  -> Ket hấn chuột phải vào ô setting của nút Osnap và nhìn mục check Osnap Object On để biết cái j đang diễn ra 

Xem nó có giống OSMODE = 1024 không?

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ám ơn bạn Doan Van Ha.

Mình vùa mới biết tới đối tượng Mpolygon nên chưa có kiến thức nhiều về nó. Bạn cho hỏi thêm tý:

- Có khi bản vẽ mở lên không thấy màu của nó, không biết có phải biến hệ thống nào đó hay vì sao?

- Có thể đổi nó thành Hatch hay Polyline được không?

 

Chào bác!

- Theo Tue_NV được biết có thể do biến hệ thống Fillmode =0 có thể làm cho bác không thấy màu của nó

- MPLOLYGON có Hatch thuộc Pattern SOLID thì không thể chuyển Hatch thành POLYLINE.

Cũng có thể Tue_NV không hiểu ý này của bác. Bác có thể nói rõ hơn không?

  • 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

Trên máy của ketxu vẫn vậy ạ.

0, 1024 : Osnap vẫn là on, cho dù trên thanh trạng thái đang k On :) : T

17408 : osnap off : nil

(CAD 2008 64 bit)

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ám ơn Tue_NV

Vì mình tinh chuyển qua Microstation nhưng phần mềm này không hiểu Mpolygon bằng Hatch nên mình dự định chuyển Mpolygon thành Hatch.

Bản thân các Mpolygon trong file của mình do cadmap Improt từ Mic.

Nếu trên Mic save as qua cad thì nó lại là Hatch.

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ám ơn Tue_NV

Vì mình tinh chuyển qua Microstation nhưng phần mềm này không hiểu Mpolygon bằng Hatch nên mình dự định chuyển Mpolygon thành Hatch.

Bản thân các Mpolygon trong file của mình do cadmap Improt từ Mic.

Nếu trên Mic save as qua cad thì nó lại là Hatch.

 

Không biết bác muốn chuyển Hatch có Partern nào?

Tue_NV chuyển giúp bác sang dạng SOLID

Code đây bác :

 

(defun c:M->H (/ count ss ename Tue-ss-new Tue-explode)
(defun Tue-ss-new(lst / Reslst e include)
  (mapcar 'set '(e include) lst)
  (if include (setq Reslst (list e)) (setq Reslst '()))
  (while (setq e (entnext e))
    (if (null (wcmatch (strcase (cdr(assoc 0 (entget e)))) "MPOLYGON,POLYLINE,ATTRIB,SEQEND"))
          (setq Reslst (append Reslst (list e)))
    )
  )
Reslst
)
(defun Tue-explode (ename / ss-explode elast);;Tue-dxf Tue-ss-new Tue-ss-list
      (setq elast (entlast))
      (Command "Explode" ename)
      (setq ss-explode (Tue-ss-new (list elast) ) )
)
;;;main
(setq count -1)
(if (setq ss (ssget '((0 . "MPOLYGON"))))
     (while (setq ename (ssname ss (setq count (1+ count))))
       (setq ename (Tue-explode ename))
       (command "._hatch" "S")
          (Foreach x ename (command x))
       (command "")
     )
)
)
  • 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

- mấy anh ơi nhoc mò ra đc tới đây rút ngắn bớt đk dài thòng lòng, nhưng có 1 trường hợp nó trả ra chưa đúng ý nhoc, nhoc cũng ko hiểu tại sao, các trường hợp khác tới giờ thì vẫn ổn,nhoc còn phải test nhiều lắm trường hợp để chắc chắn ^^

(defun c:test(/ kcx kcy ds)
(setq ds (list 500 400 250 200 100 50 25 20 10))
(setq kcx (getreal "\nnhap kcx:"))
(setq kcy (getreal "\nnhap kcy:"))
(foreach p ds
 (if (and (> (/ kcx p) 2) (< (/ kcx p) 5) (> (/ kcy p) 2)) 
     (setq donvi p))
	  )
donvi
)

- Vd: kích thước khung của nhoc , trục x = 78, y = 65, dựa theo hàm nhoc viết thì đáng ra nó chạy đến thằng 25 thì thỏa, trả ra đơn vị = 25, nhưng nhoc test nó cứ chạy xuống 20 mới chịu trả ra = 20 , trong khi nhoc mún nó là 25, nhoc xếp từ thấp đến cao rùi

- Mong đc các anh quan tâm  :P

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 sao nhóc ko dùng While, đến khi đạt y/cầu thì dừng, ko cần duyệt thằng khác nữa.

Foreach, nó phải duyệt qua tất cả >>> trả về cái cuối cùng thỏa mãn

 

Thêm nữa, phải có cái gì đó ràng buộc 2 thằng kcx và kcy chứ ???

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

- nhoc cũng nghĩ dùng while nhưng lại không biết viết thế nào, làm thế nào biểu thức điều kiện của nhoc duyệt qua từng phần tử trong danh sách cho nó tính hix, nên mới nghĩ đến thằng foreach

- kcx với kcy của nhoc  là  kích thước khung, nhoc ko hiểu phải ràng buộc sao, kcx với kcy đã được tính ra ở bước trên, kcx chia cho từng phần tử danh sách khi nào thỏa  2 < n < 5 và kcy chia cho phần tử đó > 2, thì trả ra giá trị phần tử trong danh sách

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

- nhoc cũng nghĩ dùng while nhưng lại không biết viết thế nào, làm thế nào biểu thức điều kiện của nhoc duyệt qua từng phần tử trong danh sách cho nó tính hix, nên mới nghĩ đến thằng foreach

- kcx với kcy của nhoc  là  kích thước khung, nhoc ko hiểu phải ràng buộc sao, kcx với kcy đã được tính ra ở bước trên, kcx chia cho từng phần tử danh sách khi nào thỏa  2 < n < 5 và kcy chia cho phần tử đó > 2, thì trả ra giá trị phần tử trong danh sách

 

Nhóc tham khảo :

 

(defun c:test(/ kcx kcy ds c)
(setq ds (list 500 400 250 200 100 50 25 20 10))
(setq kcx (getreal "\nnhap kcx:"))
(setq kcy (getreal "\nnhap kcy:"))
(setq c -1)
(while (null (and (setq p (nth (setq c (1+ c)) ds)) (< 2 (/ kcx p) 5) (> (/ kcy p) 2)) ))
p
)
  • 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

@Nhoc: có 4 vấn đề:

1). Vì 25 và 20 đều thỏa >> lặp xong 25 thì đến 20.

2). Đảo ds lại là OK.

3). Không đặt donvi làm biến cục bộ thì coi chừng!

4). Dùng while của bác Tue_NV thì chú ý điều kiện ràng buộc số liệu, nếu không thì có thể lặp bất tậ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

Nhóc !

2 thằng kcx, kcy laˋ tùy tiện hay theo một quy luật bất kyˋ nào không ?!

Nếu đc, co´ thể lấy ra cạnh nhỏ trong kcx, kcy để xét cho đơn giả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

@Nhoc: có 4 vấn đề:

1). Vì 25 và 20 đều thỏa >> lặp xong 25 thì đến 20.

2). Đảo ds lại là OK.

3). Không đặt donvi làm biến cục bộ thì coi chừng!

4). Dùng while của bác Tue_NV thì chú ý điều kiện ràng buộc số liệu, nếu không thì có thể lặp bất tận.

- hi thanks a Ha, cách anh Tue cho nhoc thấy cũng ổn ^^, nhoc test chay nhiều lần thấy cũng ổn, nhoc cũng tìm ra đc nhược điểm khi dùng while ^^, đúng là có lúc ko để ý nó lập thoát cad lun kaka, nhoc cố gắng mò ra cách khắc phục rùi ^^

- dảo lại ds nhoc chưa thử, để khi nào nhoc thử xem ^^, dùng foreach nhoc thấy dễ hiểu hơn, vậy là mình sẽ xếp từ nhỏ đến lớn nó sẽ chạy đúng phải ko anh ^^

- thằng while nhoc cũng còn hơi lơ mơ :)

- mọi biến nhóc đều khử sau khi xong việc, trừ biến nhập tỷ lệ ban đầu, cái lsp nhoc post chưa khử chắc là nhoc mún kiểm tra biến lại ^^

 

Nhóc !

2 thằng kcx, kcy laˋ tùy tiện hay theo một quy luật bất kyˋ nào không ?!

Nếu đc, co´ thể lấy ra cạnh nhỏ trong kcx, kcy để xét cho đơn giản

- hi Hiep kcx và kcy của nhoc là bất kỳ ko có quy luật, vì nó dựa vào độ lớn của khu đất để set khung cho vừa khu đất, nhoc cũng tính rùi kích thước khung ít nhất chia cho đơn vị = 10 là nhỏ nhất và  phải kết quả phải hơn từ 2 trở lên nếu nhỏ hơn sẽ báo người dùng biết rùi thoát lệnh lun.

- cơ quan có nhưng nó ràng buộc nhiều thứ kèm theo, nhoc thử tự viết riêng để xử lý nhanh tình huống, độc lập ko bị phụ thuộc ấy mà  :P

P/s: thanks các anh đã quan tâm giúp đỡ nhoc ^^

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ách anh Tue cho nhoc thấy cũng ổn ^^, nhoc test chay nhiều lần thấy cũng ổn, nhoc cũng tìm ra đc nhược điểm khi dùng while ^^, đúng là có lúc ko để ý nó lập thoát cad lun kaka, nhoc cố gắng mò ra cách khắc phục rùi ^^

- Trong bài toán cụ thể của nhoc thì dùng foreach hay while hay repeat đều được cả, vì list không đủ lớn.

- Về lý thuyết thì trong trường hợp này dùng while hợp lý hơn. Không thể gọi là "nhược điểm" khi dùng while. Nhược điểm nếu có là do chúng ta đặt điều kiện chưa phù hợp nên nó mới chạy vô tậ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

- nhoc đã test thử tới 100000 - 1 triệu vẫn chạy nổi, 10 triệu thì cad bị tràn bộ nhớ thoát lun ^^

Cả 2 cạnh 1triệu thì trả lại kết quả thế nào ko thấy đề cập nhỉ ???

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

- Trong bài toán cụ thể của nhoc thì dùng foreach hay while hay repeat đều được cả, vì list không đủ lớn.

- Về lý thuyết thì trong trường hợp này dùng while hợp lý hơn. Không thể gọi là "nhược điểm" khi dùng while. Nhược điểm nếu có là do chúng ta đặt điều kiện chưa phù hợp nên nó mới chạy vô tận.

- hi đúng là không phải do thằng while, mà do nhoc mới đúng, vì đk nhoc nó hơi kibo, ý nhoc là ko mún mắt lưới rãi ra dày quá nhìn rối, nên nhoc hạn chế lại tối đa 5x5= 25 mắt là đẹp ^^, khi khung quá lớn thì dẫn đến ko có đơn vị nào trong danh sách thỏa đc đk nhoc đặt nên chạy miết thui ^^, thực tế công việc của nhoc ít khi chạy khung nào lớn hớn 2.5km cả, 2.5km thì vừa thỏa đk nhoc đưa ra rùi ^^, có lớn hơn thì cũng chia ra thành nhiều khung, lớn quá cũng đâu có in ra nổ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

Cả 2 cạnh 1triệu thì trả lại kết quả thế nào ko thấy đề cập nhỉ ???

- thật ra với đơn vị = 500 mà kcx, kcy lên tới 500000, thì cad nó cũng mún đơ rùi ^^, tương đương lặp 1000 lần vẫn ra đc nhưng mất tới khoảng 2 phút ^^, vì vậy nhoc phải tăng đơn vị lên thì lên để giảm số lần lặp, nhoc đã set đơn vị  cho nó tối đa nó chạy đc cho 10 triệu, tới bây giờ nhoc chỉ biết làm mẹo như thế ^^, còn viết để chạy vô tư  với đơn vị = 500 thì chưa làm đc, mà 10 triệu thì lớn hơn nước mình rùi Hiep nhỉ ^^, nhoc cũng đâu làm bản đồ nào lên tới con số đó, hên xui có thì chia khung ra chạy cho đỡ nhọc  :P , ko dám nói ghê hơn nhưng với 500000 thì chương trình có sẵn của cơ quan nhoc cũng chạy hết nỗi ^^, nhoc pit là chương trình đó cũng đâu tính đến mức lớn như vậy ^^, nên nó đơ là chuyện bình thường ^^

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

- thật ra với đơn vị = 500 mà kcx, kcy lên tới 500000, thì cad nó cũng mún đơ rùi ^^, tương đương lặp 1000 lần vẫn ra đc nhưng mất tới khoảng 2 phút ^^, vì vậy nhoc phải tăng đơn vị lên thì lên để giảm số lần lặp, nhoc đã set đơn vị  cho nó tối đa nó chạy đc cho 10 triệu, tới bây giờ nhoc chỉ biết làm mẹo như thế ^^, còn viết để chạy vô tư  với đơn vị = 500 thì chưa làm đc, mà 10 triệu thì lớn hơn nước mình rùi Hiep nhỉ ^^, nhoc cũng đâu làm bản đồ nào lên tới con số đó, hên xui có thì chia khung ra chạy cho đỡ nhọc  :P , ko dám nói ghê hơn nhưng với 500000 thì chương trình có sẵn của cơ quan nhoc cũng chạy hết nỗi ^^, nhoc pit là chương trình đó cũng đâu tính đến mức lớn như vậy ^^, nên nó đơ là chuyện bình thường ^^

Quan trọng là mình phải phán đoán trước các tình huống có thể xảy ra và đưa ra những cảnh báo cho người dùng. 

(vì người dùng thường "ngu ngơ" lắm chỉ biết sử dụng và khi có lỗi xảy ra thì .. la làng)

VD : Trong t/hợp này, nếu người dùng nhập ch/dài 2 cạnh là 1 triệu thì ra thông báo đại loại như : "số quá lớn, vui lòng nhập lại số khác ..."

  • 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

hihi mình viết thì mới test con số khủng vậy, bình thường xài vẽ khung ôm trọn đủ khu đất hay rộng hơn tẹo cho thoáng mà anh gia_bạch, chỉ khi người dùng muốn troll chương trình ^^

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


×