Đến nội dung


Hình ảnh
- - - - -

Lisp thêm đỉnh pline tại giao điểm của pline và các line khác


  • Please log in to reply
30 replies to this topic

#1 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 20 September 2013 - 11:07 PM

Mình đã tìm mấy ngày trên diễn đàn cái lisp có chức năng như thế này mà chưa có. Bác nào lỡ ghé qua đọc rồi nếu có thì cho e xin với. Nếu không có thì cũng cái đá đít để e lên top đầu ạ. thank all

 

Chức năng lisp cần tìm.

Có 1 pline A giao với nhiều đường line và pline khác.==> kết quả sau khi chạy lisp là thêm đỉnh cho pline A tại các giao điểm trên


  • -2

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 21 September 2013 - 07:18 AM

Dùng cái này xem!

http://www.cadviet.c...showtopic=47459


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 21 September 2013 - 11:27 AM

Đã vote cho bác. thank bác ạ. Lisp đó e đã tải về dùng và có biết nó rồi ạ. Nhưng nó chưa automatic cho lắm. phải pick từng cái một. E nghĩ trên diễn đàn đã có nhiều bác giải được thuật toán tìm giao giữa các đối tượng với pline rồi. Nhưng chưa tìm thấy lisp chọn pline cần thêm đỉnh, chọn các đối tượng giao với pline==> kết quả pline tự động chèn thêm các đỉnh ở vị trí giao với các đối tượng khác. E tìm hoài mà cũng chưa thấy. Mong các bác giúp ạ. 

Mà bác cho e hỏi với. sao nick e danh tiếng lại là âm 3 bác nhỉ. e có hư chửu hay cãi nhau ai bao giờ đâu. Có phải mỗi lần e thank người khác là danh tiếng e  giảm đi lên âm phải không bác


  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 21 September 2013 - 11:35 AM

Đã vote cho bác. thank bác ạ. Lisp đó e đã tải về dùng và có biết nó rồi ạ. Nhưng nó chưa automatic cho lắm. phải pick từng cái một. E nghĩ trên diễn đàn đã có nhiều bác giải được thuật toán tìm giao giữa các đối tượng với pline rồi. Nhưng chưa tìm thấy lisp chọn pline cần thêm đỉnh, chọn các đối tượng giao với pline==> kết quả pline tự động chèn thêm các đỉnh ở vị trí giao với các đối tượng khác. E tìm hoài mà cũng chưa thấy. Mong các bác giúp ạ. 

Mà bác cho e hỏi với. sao nick e danh tiếng lại là âm 3 bác nhỉ. e có hư chửu hay cãi nhau ai bao giờ đâu. Có phải mỗi lần e thank người khác là danh tiếng e  giảm đi lên âm phải không bác

Trả lời cái đỏ đỏ này chỉ là đoán mò thôi. Các lý do có thể có là:

1). Có văn hóa kém trên forum. Bạn không có thì thôi.

2). Hỏi ngớ ngẩn, hỏi thiếu dữ liệu, hỏi ngô nghê v.v...

3). Chảnh chọe...

4). v.v...

Nói chung là comment mà người đọc thấy ngứa mắt ngứa tai thì họ cũng hay cho 1 điểm trừ.

Không có chuyện thanks mà âm đâu.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 September 2013 - 12:17 PM

Đã vote cho bác. thank bác ạ. Lisp đó e đã tải về dùng và có biết nó rồi ạ. Nhưng nó chưa automatic cho lắm. phải pick từng cái một. E nghĩ trên diễn đàn đã có nhiều bác giải được thuật toán tìm giao giữa các đối tượng với pline rồi. Nhưng chưa tìm thấy lisp chọn pline cần thêm đỉnh, chọn các đối tượng giao với pline==> kết quả pline tự động chèn thêm các đỉnh ở vị trí giao với các đối tượng khác. E tìm hoài mà cũng chưa thấy. Mong các bác giúp ạ. 

Mà bác cho e hỏi với. sao nick e danh tiếng lại là âm 3 bác nhỉ. e có hư chửu hay cãi nhau ai bao giờ đâu. Có phải mỗi lần e thank người khác là danh tiếng e  giảm đi lên âm phải không bác

Hề hề hề,

Cái danh tiếng này có quan trọng gì với bạn không nhể???

Nếu không thì bạn cũng chả cần quan tâm tới mần chi.

Nếu có thì bạn cần tự kiểm tra lại các bài đã post của mình, và so sánh nó với các quy định của diễn đàn, cũng như các bài post của mọi người có liên quan tới các bài post của bạn. Từ đó bạn sẽ hiểu ra và có cách khắc phục nó đ6ẻ cái danh tiếng ấy nó to lên.

Thú thực là cho đến cái bài post mới nhất của bạn, bạn vẫn chả hề quan tâm tới các yêu cầu chung khi tham gia diễn đàn, đặc biệt là các bài post có yêu cầu về lisp. Bạn vẫn chỉ thể hiện sự thiếu tôn trọng mọi người mà chỉ biết quăng cái yêu cầu của mình lên mặc dầu nó chưa thể hiện hết những điều bạn cần. Và chắc chắn nếu ai đó viết cái lisp này sẽ phải tự đoán mò để hiểu thêm và như vậy thì cũng chưa chắc gì đáp ứng đúng yêu cầu của bạn.

Bạn có hiểu và thông cảm nổi với những người muốn giúp bạn hay không, hay bạn cho rằng chỉ  có mọi người cần hiểu, thông cảm và phải có nghĩa vụ giúp đỡ bạn????

Những điều đó có lẽ là nguyên nhân chính khiến bạn có được cái danh tiếng không mấy ưa thích như trên đấy bạn ạ.

Hy vọng rằng bạn sẽ cải thiện được cái danh tiếng của mình nếu bạn muốn.

Mình cũng xin nói thêm rằng nếu bạn không thể cải thiện cách trình bày các yêu cầu cá nhân của mình trên diễn đàn này thì sẽ có lúc các bài post của bạn sẽ bị xóa đấy. Đó là quy định của diễn đàn mà. Về các quy định của diễn đàn, bạn nên tham khảo kỹ, đặc biệt là các quy định khi post các yêu cầu về lisp bởi các lisper trên diễn đàn này đều khá ..... dễ tính bạn ạ.

Hề hề hề,......


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#6 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 21 September 2013 - 01:23 PM

Thank hai bác vì câu trả lời trên. E thấy diễn đàn này khá tốt và giúp ích cho mình khá nhiều. Nên sau này sẽ bớt chút thời gian đọc cái nội quy của diễn đàn. Trước đây có lẽ là do chỉ quan tâm tới tài liệu chia sẻ trên các diễn đàn nên e k hay chú ý mấy. E tính hay hài hước nhưng lại k có kiến thức lisp nên chắc không được vote bằng cách giúp đỡ ai đó rồi. Thôi chịu khó comment hài hước tý để kiếm cái thank để cái biểu tượng danh tiếng nó mầu xanh hoà bình cái, chứ nó mầu đỏ chiến tranh vậy sợ quá


  • -1

#7 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 21 September 2013 - 01:27 PM

Hu hu ! Chưa kịp sửa bài viết mà lại bị trừ một điểm nữa.


  • -1

#8 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 21 September 2013 - 01:29 PM

Hu hu ! Chưa kịp sửa bài viết mà lại bị trừ một điểm nữa. Mà oan uổng quá nhỉ, E nghĩ Dữ liệu e post khá đầy đủ mà. Bác nào đọc mà thấy e đúng thì thương e cho e 1vote ở nút mầu xanh nhé.K thíck cái mầu đỏ tý nào


  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 21 September 2013 - 03:00 PM

Biết sai mà sửa là tốt rồi. Hy vọng!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 24 September 2013 - 08:29 PM

up lên xem có bác nào có thì cho e xin. Mong được sự giúp đỡ


  • -1

#11 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 September 2013 - 10:47 AM

up lên xem có bác nào có thì cho e xin. Mong được sự giúp đỡ

Hề hề hề,

Bạn vẫn muốn người giúp phải đoán mò hay sao??? nếu bạn không chịu up cái bản vẽ thể hiện điều bạn cần lên thì có nhẽ mùa quít sang năm chửa chắc đã có trái đâu....


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#12 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 25 September 2013 - 12:14 PM

Mình đã tìm mấy ngày trên diễn đàn cái lisp có chức năng như thế này mà chưa có. Bác nào lỡ ghé qua đọc rồi nếu có thì cho e xin với. Nếu không có thì cũng cái đá đít để e lên top đầu ạ. thank all

 

Chức năng lisp cần tìm.

Có 1 pline A giao với nhiều đường line và pline khác.==> kết quả sau khi chạy lisp là thêm đỉnh cho pline A tại các giao điểm trên

Dùng command của cad thì không hay lắm, nhưng đọc các code khác dài quá nên thôi.

Tôi chỉ viết phần chính. Bạn tự thêm vào bẫy lỗi hoặc xử lý các điểm gần trùng nhau, trùng với đỉnh của pline

 

(defun AppendLs (ls e)(append (if ls ls nil) (list e)))
(defun ObjInters (o1 o2 id / g ps n)
    (setq    g    (vlax-invoke o1 'IntersectWith o2 id)    ps '())
    (while g (setq    ps (AppendLs ps (list (car g) (cadr g) (caddr g))) g (cdddr g))    )    ps
)

(defun C:II ( / sp ls lp lq li o s p m n ob om ss x s3) ; Insert vertex at intersections
    (setq om (getvar "OSMODE")) (setvar "OSMODE" 0)
    (princ "Chon pline:")    (setq ss (ssget ":S") ob (vlax-ename->vla-object (ssname ss 0)) )
    (princ "Chon cac duong giao:")
    (setq ls (mapcar 'vlax-ename->vla-object
                                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*LINE")(8 . "ENTCOC"))))))))
    (setq s3 (if (wcmatch (vlax-get-property ob 'ObjectName) "*3d*") " \"N\"" ""))
    (foreach o ls
        (setq lp (append lp (ObjInters ob o acExtendNone)))    )
    (setq lq (mapcar '(lambda (x) (vlax-curve-getParamAtPoint ob (vlax-curve-getClosestPointTo ob x))) lp))
    (setq n 0 li (vl-sort-i lq '<) s "")
    (foreach p li
        (setq m (fix (nth p lq)))
        (repeat (- m n)
            (setq s (strcat s " \"N\""))    )
        (setq s (strcat s " \"I\" (nth " (itoa p) " lp)" s3) n m)
    )
    (vl-cmdf "ZOOM" "E")
    (eval (read (strcat "(vl-cmdf \"PEDIT\" ss \"E\"" s "\"X\" \"\")")) )
    (setvar "OSMODE" om)
)

  • 2

#13 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 25 September 2013 - 01:19 PM

Thank các bác nhé.

Thank bác "ndtnv" ạ. Bác có thể giúp e cho chót không. e không  được hiểu về lisp cho lắm.

E đã tìm trên diễn đàn nước ngoài có được lisp break đối tượng tại tất cả vị trí giao nhau rồi nối lại. Cái này thủ công hơn một công đoạn nhưng điều quan trọng là vẫn chưa giải quyết được bài toán nếu có hai đối tượng giao cùng 1 điểm với đường pline thì cách làm trên chỉ tạo thêm được một đỉnh lại vị trí giao. Mong được các bác giúp. em sẽ nghĩ và viết lại yêu cầu để mọi người dễ hiểu. sorry nếu dữ liệu của e thiếu.

- Xin lỗi bác Bình vì e chưa sửa bài viết. Cũng tại e nghĩ vì các đối tượng giao nhau sẽ tạo ra một điểm giao nên e nghĩ yêu cầu đủ rồi lên không bổ sung. hì, e bổ sung luôn ạ

116735_chen_dinh.pnghttp://www.cadviet.c...5_chen_dinh.dwg


  • 0

#14 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 25 September 2013 - 02:02 PM

Thank các bác nhé.

Thank bác "ndtnv" ạ. Bác có thể giúp e cho chót không. e không  được hiểu về lisp cho lắm.

E đã tìm trên diễn đàn nước ngoài có được lisp break đối tượng tại tất cả vị trí giao nhau rồi nối lại. Cái này thủ công hơn một công đoạn nhưng điều quan trọng là vẫn chưa giải quyết được bài toán nếu có hai đối tượng giao cùng 1 điểm với đường pline thì cách làm trên chỉ tạo thêm được một đỉnh lại vị trí giao. Mong được các bác giúp. em sẽ nghĩ và viết lại yêu cầu để mọi người dễ hiểu. sorry nếu dữ liệu của e thiếu.

Đã edit lại code. Bạn down về dùng xem


  • 0

#15 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 25 September 2013 - 03:14 PM

mình đã tesp thử máy bảo lỗi bạn ạ. bạn xem giúp mình với

 

 

nếu pline cần thêm đỉnh là polyline thì báo lỗi

"Command: ii
Chon pline:
Select objects:
Chon cac duong giao:
Select objects: Specify opposite corner: 225 found

Select objects:  ZOOM
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window/Object] <real time>: E
Command: II Unknown command "II".  Press F1 for help.

Command: ; error: bad argument value: does not fit in byte: 667"

 

 

Nếu pline cần thêm đỉnh là 2d polyline thì báo lỗi

"Command: ii

Chon pline:
Select objects:
Chon cac duong giao:
Select objects: Specify opposite corner: 125 found

Select objects:  ZOOM
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window/Object] <real time>: E
Command: II Unknown command "II".  Press F1 for help.

Command: ; error: bad argument value: does not fit in byte: 458"


  • 0

#16 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 25 September 2013 - 03:27 PM

Sửa (vl-cmdf "ZOOM" "E" "") thành (vl-cmdf "ZOOM" "E"), Nếu không được thì bỏ dòng đó, khi dùng lệnh chọn các đường giao xong thì dùng mouse zoom sao cho nhìn thấy toàn bộ đường pline rồi mới enter xem.


  • 0

#17 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 25 September 2013 - 04:29 PM

Bạn xem bản vẽ này chắc tìm ra đ­ược lỗi.

http://www.cadviet.c...67029_error.dwg


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 September 2013 - 06:08 PM

Thank các bác nhé.
Thank bác "ndtnv" ạ. Bác có thể giúp e cho chót không. e không  được hiểu về lisp cho lắm.
E đã tìm trên diễn đàn nước ngoài có được lisp break đối tượng tại tất cả vị trí giao nhau rồi nối lại. Cái này thủ công hơn một công đoạn nhưng điều quan trọng là vẫn chưa giải quyết được bài toán nếu có hai đối tượng giao cùng 1 điểm với đường pline thì cách làm trên chỉ tạo thêm được một đỉnh lại vị trí giao. Mong được các bác giúp. em sẽ nghĩ và viết lại yêu cầu để mọi người dễ hiểu. sorry nếu dữ liệu của e thiếu.
- Xin lỗi bác Bình vì e chưa sửa bài viết. Cũng tại e nghĩ vì các đối tượng giao nhau sẽ tạo ra một điểm giao nên e nghĩ yêu cầu đủ rồi lên không bổ sung. hì, e bổ sung luôn ạ
http://www.cadviet.c...5_chen_dinh.dwg

Hề hề hề.
Như bạn đã thấy, nếu không gửi bản vẽ lên thì có giời mới biết phải làm như thế nào. Bản vẽ bạn gửi lên thì Polyline được cấu tạo là đối tượng Polyline chứ không phải Lwpolyline.
Vì thế khi break thì nó sẽ tạo ra hai polyline mới chứ không phải chỉ một polyline mới bạn ạ.
Mặt khác các đường cần lấy giao điểm của bạn là line chứ không phải polyline.
Lisp mình viết dưới đây dựa trên cấu trúc bản vẽ bạn gửi, Các đường giao với polyline cần thêm đỉnh là cácline thuộc layer "ENTCOC". Do vậy nếu sử dụng với các bản vẽ có cấu trúc khác thì mình không thể đảm bảo nó sẽ chạy dhuẩn. Riêng với bản vẽ bạn gửi lên thì mình đả test và kết quả là thêm được 139 đỉnh nữa ngoài số 160 đỉnh đả có. Đúng hay sai bạn hãy tự kiểm chứng nhé.
Lưu ý rằng sau khi lisp chạy xong thì đường polyline của bạn sẽ trở thành đường lwpolyline chứ không còn mang nguyên bản chất ban đầu của nó nữa bạn ạ.
Về sự khác nhau giữa hai loại đường này thì mình chỉ hiểu biết có hạn thôi. Chỉ biết rằng sau khi bạn break nó ra rồi joint lại thì nó tự chuyển thành lwpolyline .
Mong rằng lisp này sẽ giúp ích cho bạn ít nhiều và cũng mong rằng bạn sẽ lưu tâm hơn về cách trình bày vấn đề để người khác có thể hiểu yêu cầu đủ để giúp được bạn.
Nếu có gì bạn chưa ưng ý thì hãy post lên để mình xem lại.
http://www.cadviet.c...texpolyline.lsp


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 26 September 2013 - 08:58 AM

Thank bác Bình ạ. E đã test và kết quả lisp đã thêm được đỉnh ngon mà k lỗi j. Nhưng để nó tổng quát hơn e mong bác sửa giúp e một số yếu tố để kết quả nó như mong đợi ạ.

Trong bản vẽ yếu tố xác định giao là 225 line thuộc lỚp "ENTCOC" ===> Kết quả là 225 đỉnh

Bài toán như sau: Kiểm tra vị trí giao giữa đường pline và các line

    - Nếu vị trí giao không trùng vị trí 1 đỉnh nào của Pline thì thêm đỉnh tại vị trí giao (n line giao với pline tại cùng 1 vị trí cho ra n đỉnh tại điểm giao với Pline)

    - Nếu vị trí giao trùng vị trí 1 đỉnh nào của Pline thì xét tiếp n line giao với pline tại cùng 1 đỉnh cho ra n đỉnh tại vị trí đỉnh Pline)

 

+ Bác có thể giúp e bỏ điều kiện chỉ nhận các line thuộc lớp EnTcoc không ạ. Hoặc cách nào để lựa chọn Xác định line giao với pline theo lớp với ạ


  • 0

#20 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 26 September 2013 - 10:48 AM

Thank bác Bình ạ. E đã test và kết quả lisp đã thêm được đỉnh ngon mà k lỗi j. Nhưng để nó tổng quát hơn e mong bác sửa giúp e một số yếu tố để kết quả nó như mong đợi ạ.

Trong bản vẽ yếu tố xác định giao là 225 line thuộc lỚp "ENTCOC" ===> Kết quả là 225 đỉnh

Bài toán như sau: Kiểm tra vị trí giao giữa đường pline và các line

    - Nếu vị trí giao không trùng vị trí 1 đỉnh nào của Pline thì thêm đỉnh tại vị trí giao (n line giao với pline tại cùng 1 vị trí cho ra n đỉnh tại điểm giao với Pline)

    - Nếu vị trí giao trùng vị trí 1 đỉnh nào của Pline thì xét tiếp n line giao với pline tại cùng 1 đỉnh cho ra n đỉnh tại vị trí đỉnh Pline)

 

+ Bác có thể giúp e bỏ điều kiện chỉ nhận các line thuộc lớp EnTcoc không ạ. Hoặc cách nào để lựa chọn Xác định line giao với pline theo lớp với ạ

Hề hề hề,

Đó , bạn thấy chưa, ngay cả khi đã có bản vẽ mà người làm lisp vẫn có thể hiểu nhầm ý người cần lisp. và cho ra đời cái lisp không dạt yêu cầu của người cần.

vậy nên nếu bạn cứ tiết kiệm thời gian và công sức của bạn theo kiểu như trước thì sẽ mất rất nhiều thời gian của những người muốn giúp bạn, dẫn tới hiệu quả cái bạn được sẽ là cái bạn không muốn.

Bạn xem kỹ lại lisp của mình viết sẽ thấy:

1/- Lisp chỉ thêm đỉnh cho pline tại các điểm giao cắt với line được chọn mà điểm này không trùng với đỉnh của pline. Tại các điểm giao cắt trùng với đỉnh có sẵn của pline thì lisp không tạo thêm đỉnh làm chi cho mất công nữa cả. Do vậy yêu cầu thứ nhất của bạn theo mình là lisp này đã thỏa mãn.

Cụ thể , với bản vẽ bạn gửi lên, pline có 160 đỉnh , sau khi chạy lisp, pline sẽ thêm được 139 đỉnh nữa tại các giao cất không trùng với đỉnh của pline cũ và tổng cộng pline mới của bạn sẽ có 299 đỉnh.

Thú thự là mình cũng chả có thời gian ngồi đếm các đỉnh trên pline của bạn đâu, nhưng mình kiểm tra bằng lisp thì thấy như vậy. Còn đúng sai, nhờ bạn chịu khó kiểm lại nhé.

2/- Về yêu cầu thứ hai: Ý bạn có phải là cho người dùng được phép chọn lựa lớp của các line cần tìm giao cắt phải không???

nếu đúng vậy bạn hãy chịu khó sửa lại lisp một chút như sau:

a/- Thêm các dòng code :

(if (not (setq lac (gestring "\n Nhap ten layer cua cac line can tim giao cat")))

    (setq lac (cdr (assoc 8 (entget (car (entsel "\n Chon line mau"))))) )

)

vào phía dưới dòng code (command "undo" "be") và phía trên dòng code (setq obj (vlax-ename->vla-object pl)

b/- Sửa lại dòng code:

ssl (acet-ss-to-list (ssget (list (cons 0 "line") (cons 8 "ENTCOC"))))

thành:

ssl (acet-ss-to-list (ssget (list (cons 0 "line") (cons 8 lac))))

c/- Sau đó lưu lại file và test thử coi đã ưng ý chưa.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.