Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
vothanhdn

[Yêu cầu] Lisp Dim R tại Arc của LWPolyline

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

Nhờ mọi người viết giùm e lisp Dim bán kính tại vị trí của bất kỳ đường Arc nào trong 1 đường LWPolyline khép kín...

Phần này e mày mò mãi mà vẫn chưa ra được.

 

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

Nhờ mọi người viết giùm e lisp Dim bán kính tại vị trí của bất kỳ đường Arc nào trong 1 đường LWPolyline khép kín...

Phần này e mày mò mãi mà vẫn chưa ra được.

Cám ơn các bác.

Tại sao phải dùng lisp? Muốn Dim Radius ở đâu trên pline thì cứ chọn dimradius, sau đó pick vào đoạn arc thì OK thôi 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

Tại sao phải dùng lisp? Muốn Dim Radius ở đâu trên pline thì cứ chọn dimradius, sau đó pick vào đoạn arc thì OK thôi mà.

 

Cám ơn a!

E muốn Dim số lượng lớn chứ không hẳn chỉ là 1 đường LWPolyline nên Dim từng đoạn Arc rất lâu, nên e muốn nhờ mấy bác viết 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

(defun c:test()(command "qdim" (car (entsel "\nChon Pline :")) "" "R"))

 

Thank a!

Lisp của a chưa gải quyết triệt để được vấn đề của e cho lắm, nó còn 1 số chỗ:

1. Nếu LWPolyline của e có n đường Arc thì chỉ Dim được (n-1) đường thôi

2. A có thể chỉnh cho nét Dim của đường Arc nắm về hướng tâm của đường Arc được không ah, tại vì tất cả đường Dim này đều nằm hướng ra phía ngoài của đường Arc

 

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

 

Thank a!

Lisp của a chưa gải quyết triệt để được vấn đề của e cho lắm, nó còn 1 số chỗ:

1. Nếu LWPolyline của e có n đường Arc thì chỉ Dim được (n-1) đường thôi

2. A có thể chỉnh cho nét Dim của đường Arc nắm về hướng tâm của đường Arc được không ah, tại vì tất cả đường Dim này đều nằm hướng ra phía ngoài của đường Arc

 

Cảm ơn !

Hề hề hề,

Phải chăng bạn muốn cái này.


(defun c:darp (/ oldos ent obj elst plst blst p par pd i)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq ent (car (entsel "\n Chon lwpolyline chua arc"))
        obj (vlax-ename->vla-object ent)
        elst (entget ent)
        plst (list)
        blst (list)
)
(foreach a elst
      (if (= (car a) 10)
          (setq plst (append plst (list (cdr a))))
      )
      (if (= (car a) 42)
          (setq blst (append blst (list (cdr a))))
      )
)
(setq i 0)
(foreach b blst
      (if (not (equal b 0 0.000001))
          (progn
               (setq p (nth i plst)
                         par (vlax-curve-getparamatpoint obj p)
                         pd (vlax-curve-getpointatparam obj (+ par 0.5))
               )
               (command "dimradius" pd (getpoint pd "\n Chon diem dat kich thuoc"))
          )
      )
      (setq i (1+ i))
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)

Chú ý là việc chọn điểm đặt dim ngoài hay trong hay gì gì đó là do bạn tự chọn chớ không phải do lisp nghen. Lisp sử dụng dimstyle hiện hành của bạn nên nó xấu hay đẹp cũng là do bạn tự chọn dimstyle chớ lisp nó hổng có chịu trách nhiệm nghen.

Nếu có gì chưa ưng ý thì hãy post lên nghen.

  • Vote tăng 2

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

n và (n-1) Két ạ. Khi vẽ đến điểm thứ 2 của arc mà chọn close thì nó (n-1), còn lại là n. Cái này chắc cad có ý đồ gì chăng, hay sơ suấ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

Cái này ket cũng k rõ nữa :D

 

Đã test, đúng là với Vertex đóng bằng close thì cad k tính vào khi đo, ngay cả với đoạn 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

Hề hề hề,

Phải chăng bạn muốn cái này.


(defun c:darp (/ oldos ent obj elst plst blst p par pd i)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq ent (car (entsel "\n Chon lwpolyline chua arc"))
		obj (vlax-ename->vla-object ent)
		elst (entget ent)
		plst (list)
		blst (list)
)
(foreach a elst
  	(if (= (car a) 10)
  		(setq plst (append plst (list (cdr a))))
  	)
  	(if (= (car a) 42)
  		(setq blst (append blst (list (cdr a))))
  	)
)
(setq i 0)
(foreach b blst
  	(if (not (equal b 0 0.000001))
  		(progn
               (setq p (nth i plst)
                         par (vlax-curve-getparamatpoint obj p)
                         pd (vlax-curve-getpointatparam obj (+ par 0.5))
               )
               (command "dimradius" pd (getpoint pd "\n Chon diem dat kich thuoc"))
  		)
  	)
  	(setq i (1+ i))
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)

Chú ý là việc chọn điểm đặt dim ngoài hay trong hay gì gì đó là do bạn tự chọn chớ không phải do lisp nghen. Lisp sử dụng dimstyle hiện hành của bạn nên nó xấu hay đẹp cũng là do bạn tự chọn dimstyle chớ lisp nó hổng có chịu trách nhiệm nghen.

Nếu có gì chưa ưng ý thì hãy post lên nghen.

 

Cám ơn a!

 

Có cách nào getpoint chính là tâm của đường Arc không vậy a, chứ làm theo lisp kiểu này e nghĩ thì cũng giống với việc dùng DRA để Dim rồi, hy vọng mọi người giúp được phần này.

 

Cám ơn mọi người 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

E thấy hình như vấn đề này khó giải quyết thì phải? Không thấy ai giúp nữa rồi...

Cũng hơi vất vả tí. Tôi đã thử chọn tâm arc thì hình dim nó ra 1 đường thẳng nhìn rất kỳ. Tôi ngại không đúng ý bạn. Bạn đã thử chưa, nếu rồi và ok thì post bản vẽ kết quả lên xem mặt mũi, kẻo sợ viết sai ý bạn thì khổ.

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ũng hơi vất vả tí. Tôi đã thử chọn tâm arc thì hình dim nó ra 1 đường thẳng nhìn rất kỳ. Tôi ngại không đúng ý bạn. Bạn đã thử chưa, nếu rồi và ok thì post bản vẽ kết quả lên xem mặt mũi, kẻo sợ viết sai ý bạn thì khổ.

 

Yêu cầu giống như file CAD nè a.

Có thể Dim Arc chọn điểm đích để Dim tại trung điểm của tâm đường Arc và điểm giữa của cung tròn

Hy vọng có thể được

http://www.cadviet.com/upfiles/3/67034_vd.dwg

 

Cám ơn a

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
E thấy hình như vấn đề này khó giải quyết thì phải? Không thấy ai giúp nữa rồi...

Hề hề hề,

Khó thật đấy. Khó nhất là phải đọc những điều ..... dở hơi ở trên bạn ạ.

Hãy thử cái này coi đã hết khó chưa ???


(defun c:darp (/ oldos ent obj elst plst blst p par pd i pt ssl)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ent (car (entsel "\n Chon lwpolyline chua arc"))
    	obj (vlax-ename->vla-object ent)
    	elst (entget ent)
    	plst (list)
    	blst (list)
)
(foreach a elst
  	(if (= (car a) 10)
      	(setq plst (append plst (list (cdr a))))
  	)
  	(if (= (car a) 42)
      	(setq blst (append blst (list (cdr a))))
  	)
)
(setq i 0)
(foreach b blst
  	(if (not (equal b 0 0.000001))
      	(progn
               (setq p (nth i plst)
                         par (vlax-curve-getparamatpoint obj p)
                         pd (vlax-curve-getpointatparam obj (+ par 0.5))
               )
               (command "undo" "be")
               (setq ssl  (acet-explode ent))
               (setq pt (cdr (assoc 10 (entget (ssname ssl i)))))
               (command "undo" "e")
               (command "undo" 1)
               (command "dimradius" pd (list (/ (+ (car pt) (car pd)) 2) (/ (+ (cadr pt) (cadr pd)) 2)))
      	)
  	)
  	(setq i (1+ i))
)
(setvar "osmode" oldos)
(princ)
)

 

Bạn hãy bỏ cái kiểu nói khó nghe ở trên đi nhé nếu còn muốn có sự giúp đỡ.

  • Vote tăng 3

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ề hề hề,

Khó thật đấy. Khó nhất là phải đọc những điều ..... dở hơi ở trên bạn ạ.

Hãy thử cái này coi đã hết khó chưa ???


(defun c:darp (/ oldos ent obj elst plst blst p par pd i pt ssl)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ent (car (entsel "\n Chon lwpolyline chua arc"))
		obj (vlax-ename->vla-object ent)
		elst (entget ent)
		plst (list)
		blst (list)
)
(foreach a elst
  	(if (= (car a) 10)
  		(setq plst (append plst (list (cdr a))))
  	)
  	(if (= (car a) 42)
  		(setq blst (append blst (list (cdr a))))
  	)
)
(setq i 0)
(foreach b blst
  	(if (not (equal b 0 0.000001))
  		(progn
               (setq p (nth i plst)
                         par (vlax-curve-getparamatpoint obj p)
                         pd (vlax-curve-getpointatparam obj (+ par 0.5))
               )
               (command "undo" "be")
               (setq ssl  (acet-explode ent))
               (setq pt (cdr (assoc 10 (entget (ssname ssl i)))))
               (command "undo" "e")
               (command "undo" 1)
               (command "dimradius" pd (list (/ (+ (car pt) (car pd)) 2) (/ (+ (cadr pt) (cadr pd)) 2)))
  		)
  	)
  	(setq i (1+ i))
)
(setvar "osmode" oldos)
(princ)
)

 

Bạn hãy bỏ cái kiểu nói khó nghe ở trên đi nhé nếu còn muốn có sự giúp đỡ.

 

Thank a!

 

Cám ơn a và mọi người nhiều

Sorry mọi người vì nếu có câu nào làm mọi người không vui lò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

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

Đăng nhập để thực hiện theo  

×