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ị

-       Cách lập diện tích căn cứ vào giao đường đen và đường thiết kế (tất nhiên). Nhưng làm sao để xác định được khối lượng đào và đắp (đường nào nằm trên và nằm dưới) thì  Không biết.

Mong các bạn có ý kiến và giải pháp giúp tiếp. 

Cái này thì có thể tại mỗi điểm giao, xác định 2cặp điểm lân cận về 2 phía trên 2 đường để so sá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

Các anh cho em hỏi?

Có cách nào để biết 1 điểm (P1) nằm bên trái hay bên phải Polyline

(Cho trước điều kiện là điểm gần nhất P1 phải thuộc Polyline)

(setq PVG1 (vlax-curve-getClosestPointTo VLA:ObjPline P1))

Not

(setq PVG1 (vlax-curve-getClosestPointTo VLA:ObjPline P1 T))

Em viết thì được, nhưng em hỏi để xem có hàm nào nhanh để giải quyết nó nhanh không?

Cảm ơn các anh 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

Các anh cho em hỏi?

Có cách nào để biết 1 điểm (P1) nằm bên trái hay bên phải Polyline

(Cho trước điều kiện là điểm gần nhất P1 phải thuộc Polyline)

(setq PVG1 (vlax-curve-getClosestPointTo VLA:ObjPline P1))

Not

(setq PVG1 (vlax-curve-getClosestPointTo VLA:ObjPline P1 T))

Em viết thì được, nhưng em hỏi để xem có hàm nào nhanh để giải quyết nó nhanh không?

Cảm ơn các anh em.

Không có hàm sẵn đâu. Xét góc P1 PVG1 thì được. Tuy nhiên, khái niệm "trái, phải" là khá mơ hồ.

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

Không có hàm sẵn đâu. Xét góc P1 PVG1 thì được. Tuy nhiên, khái niệm "trái, phải" là khá mơ hồ.

Trái hay phải Polyline thì không mơ hồ ạ

Polyline bao giờ cũng có điểm đầu điểm cuối. Giống như chúng ta đi trên đê của 1 con sông đó ạ. Có thượng lưu và hạ lưu. Khi đó sẽ có Hữu và Tả

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

Vậy thì ta làm thế này vậy ạ. Cách này em cũng nghĩ rồi.

Như bác Hạ nói đấy ạ. Xét góc PVG1_P1.

Nếu góc PVG1_P1 lớn hơn góc phân đoạn vuông góc thì điểm P1 nằm bên phải, ngược lại là bên trái.

OK. Em làm được

(setq ang3 (angle '(0 0) (Vlax-curve-getfirstderiv VlaObjPL (vlax-curve-getParamAtPoint VlaObjPL PVG1))))

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ẳng hạn Pline là 1 hình vuông, còn P1 là giao 2 đường chéo thì P1 nằm ở bên Tây hay bên Tàu? Nói chung, để gọi là "trái,phải" thì em cần có những "khái niệm" rõ rà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

Dạ, vâng. Như vậy thì nó thuộc trường hợp đặc biệt rồi ạ.

Em giải quyết bài toán nó đơn giản thôi ạ.

Có gì tí em hỏi bác 1 chút.

Cảm ơn bác đã reply

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

Vậy thì ta làm thế này vậy ạ. Cách này em cũng nghĩ rồi.

Như bác Hạ nói đấy ạ. Xét góc PVG1_P1.

Nếu góc PVG1_P1 lớn hơn góc phân đoạn vuông góc thì điểm P1 nằm bên phải, ngược lại là bên trái.

OK. Em làm được

(setq ang3 (angle '(0 0) (Vlax-curve-getfirstderiv VlaObjPL (vlax-curve-getParamAtPoint VlaObjPL PVG1))))

Quá nguy hiểm nếu như em xét góc so với '(0 0) !

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

Dạ, em thấy sai rồi ạ

Là do em chưa hiểu bản chất.

Em vừa thử nhưng kết quả ko đúng là em biết mình sai rồi.

Em đang nghĩ cách khác.

Bác có thể tư vấn cho em đượ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

Gọi A1-A2 là  phân đoạn chứa  PVG1, nếu góc (A1-A2) + pi/2 = góc (P1-PVG1) thì P1 ở bên phải của hướng A1-A2.

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

Lsp test. Không dùng với pline kín.

 

(defun c:test()
  (setq a (car (entsel "\nChon pline:")))
  (while (setq b (getpoint "\nChon diem:"))
    (setq b1 (vlax-curve-getClosestPointTo a b)
 a1 (vlax-curve-getpointAtParam a (fix (vlax-curve-getparamatPoint a b1)))
 a2 (vlax-curve-getpointAtParam a (1+ (fix (vlax-curve-getparamatPoint a b1)))))
    (if (or (equal (cos (+ (* 0.5 pi) (angle a1 a2))) (cos (angle b b1)) 0.001)
   (equal (sin (+ (* 0.5 pi) (angle a1 a2))) (sin (angle b b1)) 0.001))
      (princ "Ben Phai") (princ "Ben Trai"))
  )
  (princ)
)

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

Gọi A1-A2 là  phân đoạn chứa  PVG1, nếu góc (A1-A2) + pi/2 = góc (P1-PVG1) thì P1 ở bên phải của hướng A1-A2.

Đúng là cách này em làm ạ. Cảm ơn anh Tot77.

 

So sánh (cos (angle P1 PVG1)) và 0

Cách này em chưa hiểu lắm 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

Cho em hỏi 1 chút

(vlax-curve-getClosestPointTo curve-obj givenPnt [extend])

Theo em tra help thì curve-obj: The VLA-object to be measured.

Vậy curve-obj là ename hay là Object? ( vlax-ename->vla-object)

Em dùng cả 2 đều đượ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

1). Đối với các hàm vlax-curve... thì dùng cả 2 đều được.

2). Bạn thử so sánh (cos (angle P1 PVG1)) với 0, xem nếu (cos...) > 0 và (cos...) < 0 thì P1 ở bên nào thô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

1). Đối với các hàm vlax-curve... thì dùng cả 2 đều được.

2). Bạn thử so sánh (cos (angle P1 PVG1)) với 0, xem nếu (cos...) > 0 và (cos...) < 0 thì P1 ở bên nào thôi. 

Dạ. Em cảm ơn bác Doan Van 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

Cho em thắc mắc 1 chút.

Hàm (vlax-curve-getParamAtPoint curve-obj point)

Hàm này trả về parameter tại điểm đó. Vậy parameter  đó là gì ạ? Nó được dùng trong trường hợp nào?

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

Ai sành về cách bố trí Image vào Dialog cho tui hỏi tí. Tui bố trí nó không cân xứng.

- Có 1 hình vẽ đặt gọn trong 1 rectang kích thước w1*h1.

- Trong Dialog có 1 Tile Image có kích thước w2*h2.

Hỏi:

Cách tạo Slide và cách dùng hàm Slide_image với các thông số như thế nào để Slide nằm vừa khít trong Image?

P/S: biết w1/w2=h1/h2.

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,bây giờ em có 1 block. Bên trong nó là các đối tượng con. Giả dụ là :1 Rectang, 1 Line, 1 Dtext, 1 Mtext,[ có hoặc không có 1 Att]

Vậy em cần làm code như thế nào để có thể duyệt được tất cả các đối tượng con này trong block đó

Và một vấn đề hỏi thêm, có phương pháp nào để lập trình Code lisp giúp ta có thể Thêm (add)/ Xoá (delete) đối tượng con vào block (sẵn có) không?

Em xin cảm ơn các bác

P/s 

Vấn đề duyệt qua các subentity em đã làm được nhờ (entnext) và duyệt (tblobjname "block" "ten_block")

Còn vấn đề Thêm/Bớt một đối tượng con mới vào Block nhờ các bác giúp 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

Bớt thì dể, còn thêm mới khó, bạn dùng lsp của LM.

http://www.lee-mac.com/addobjectstoblock.html

Cảm ơn bác nhé, để em xem lại xem,em cũng vừa kiếm được 1 nguồn tham khảo khác, cần suy nghĩ thêm, phương pháp bên đó có khác bên này

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

Ai sành về cách bố trí Image vào Dialog cho tui hỏi tí. Tui bố trí nó không cân xứng.

- Có 1 hình vẽ đặt gọn trong 1 rectang kích thước w1*h1.

- Trong Dialog có 1 Tile Image có kích thước w2*h2.

Hỏi:

Cách tạo Slide và cách dùng hàm Slide_image với các thông số như thế nào để Slide nằm vừa khít trong Image?

P/S: biết w1/w2=h1/h2.

Nhắc lại câu hỏi tí: cách tạo Slide của 1 Rectang và cách dùng hàm Slide_Image như thế nào để Rectang nằm vừa khít vào Tile Image và trùng trọng tâm?

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

Khi tạo image bác cứ zoom toàn màn hình lên thôi (dĩ nhiên khi đó trong bản vẽ chỉ có mỗi cái hình đó).

Còn trong lsp bác dùng hàm fill_image với màu trùng màu nền để lấp background cùng màu với image.

Chứ chẳng có công thức cố định nào cả đâ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

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


×