Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

Chào bác ThaiStreetz,

Bác thử dùng cái này thay vào cái vòng lặp While của bác xem có đúng ý bác không nhé.

OK rồi ạ. em cảm ơn anh Gia Bách và anh Thanh Bình nhé. đoạn code của anh Gia Bách rất gọn gàng :cheers:

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 giúp em một lisp là thêm các đỉnh tại các vị trí giao nhau của các đường polyline, khi dùng lisp chọn một loạt các đường không chọn từng đường một.

đây là file: http://www.cadviet.com/upfiles/2/them_dinh_polyline.dwg

em cảm ơn trước 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 bác giúp em một lisp là thêm các đỉnh tại các vị trí giao nhau của các đường polyline, khi dùng lisp chọn một loạt các đường không chọn từng đường một.

đây là file: http://www.cadviet.com/upfiles/2/them_dinh_polyline.dwg

em cảm ơn trước nhé.

Lời đầu tiên, cho phép Tue_NV gửi lời cảm ơn tới anh gia_bach. Nhờ sự hướng dẫn của anh về addvertex method mà Tue_NV đã hoàn thành đoạn Code này để giúp cho bạn Tuynh

 

Chào Tuynh. Đây là Code mà Tue_NV đã hoàn thành. Bạn chạy thử và cho ý kiến nhé :

(defun GiaoDT (ent1 ent2)
(vl-load-com)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)

) 
;
(defun c:AddVertex (/ obj pt ParamPt i ss1 ss2 j sdc ent1 ent2)
(vl-load-com)
(prompt "\n Chon Polyline them Vertex : ")
(setq ss1 (ssget '((0 . "*POLYLINE"))))
(prompt "\n Chon Polyline giao voi Polyline them Vertex : ")
(setq ss2 (ssget '((0 . "*POLYLINE"))) i 0 j 0 sdc 0)

(while ((setq ent1 (ssname ss1 i))
(setq obj (vlax-ename->vla-object ent1))
(setq j 0)

(while (
(setq ent2 (ssname ss2 j))

(if (/= (Giaodt ent1 ent2) nil)
(progn 

(repeat (length (Giaodt ent1 ent2))
(setq pt (nth sdc (Giaodt ent1 ent2)))
(setq ParamPt (vlax-curve-getParamAtPoint obj pt))

(if (> (- ParamPt (fix ParamPt)) 0.001)
(vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
)
(setq sdc (+ sdc 1))
)
(setq sdc 0)
);progn
);if

(setq j (1+ j))

);while

(setq i (1+ i))

);while

(princ)
)

Tuy nhiên, đoạn Code trên còn có 1 điểm chưa hoàn thiện là các PLINE có Arc thì thêm Vertex không được như ý muốn của user

Theo điểm Remark trong Addvertex method thì :

 

Remarks

 

The vertex specifies the endpoint for a new line segment. To add an arc segment, first create the line segment, and then add a "bulge" to the individual segment that is to become an arc. To add a bulge value to a segment, use the SetBulge method.

Diễn giải ra thì đúng như lời của anh Gia_bach nói

Chú ý : hàm Addvertex chỉ thêm 1 segment mới truớc vị trí Pt có kiểu là Đuờng thẳng (LINE segment).

Để thêm phần tử Cung tròn (ARC segment), truớc tiên thêm 1 line segment, sau đó add thuộc tính "bulge" (tạm dịch : độ lồi lõm của Curve) bằng hàm SetBulge : (vla-setBulge obj Index Value)

 

Tuy nhiên, với tham số Value trong SetBulge method thì thực sự là Tue_NV chưa hiểu .

 

Value

Double

The bulge value for the vertex at the given index.

 

tham số Index thì Tue_NV có thể hiểu giống như addvertex method

 

Anh giabach và mọi người có thể hỗ trợ thêm cho Tue_NV để hoàn thành code này cho trọn vẹn nhé.

Chân thành cảm ơn anh gia_bach và mọi ngườ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
Lời đầu tiên, cho phép Tue_NV gửi lời cảm ơn tới anh gia_bach. Nhờ sự hướng dẫn của anh về addvertex method mà Tue_NV đã hoàn thành đoạn Code này để giúp cho bạn Tuynh

 

Chào Tuynh. Đây là Code mà Tue_NV đã hoàn thành. Bạn chạy thử và cho ý kiến nhé :

(defun GiaoDT (ent1 ent2)
(vl-load-com)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)

) 
;
(defun c:AddVertex (/ obj pt ParamPt i ss1 ss2 j sdc ent1 ent2)
(vl-load-com)
(prompt "\n Chon Polyline them Vertex : ")
(setq ss1 (ssget '((0 . "*POLYLINE"))))
(prompt "\n Chon Polyline giao voi Polyline them Vertex : ")
(setq ss2 (ssget '((0 . "*POLYLINE"))) i 0 j 0 sdc 0)

(while (< i (sslength ss1))
(setq ent1 (ssname ss1 i))
(setq obj (vlax-ename->vla-object ent1))
(setq j 0)

(while (< j (sslength ss2))

(setq ent2 (ssname ss2 j))

(if (/= (Giaodt ent1 ent2) nil)
(progn 

(repeat (length (Giaodt ent1 ent2))
(setq pt (nth sdc (Giaodt ent1 ent2)))
(setq ParamPt (vlax-curve-getParamAtPoint obj pt))

(if (> (- ParamPt (fix ParamPt)) 0.001)
(vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
)
(setq sdc (+ sdc 1))
)
(setq sdc 0)
);progn
);if

(setq j (1+ j))

);while

(setq i (1+ i))

);while

(princ)
)

Tuy nhiên, đoạn Code trên còn có 1 điểm chưa hoàn thiện là các PLINE có Arc thì thêm Vertex không được như ý muốn của user

Theo điểm Remark trong Addvertex method thì :

 

Remarks

 

The vertex specifies the endpoint for a new line segment. To add an arc segment, first create the line segment, and then add a "bulge" to the individual segment that is to become an arc. To add a bulge value to a segment, use the SetBulge method.

Diễn giải ra thì đúng như lời của anh Gia_bach nói

Tuy nhiên, với tham số Value trong SetBulge method thì thực sự là Tue_NV chưa hiểu .

 

Value

Double

The bulge value for the vertex at the given index.

 

tham số Index thì Tue_NV có thể hiểu giống như addvertex method

 

Anh giabach và mọi người có thể hỗ trợ thêm cho Tue_NV để hoàn thành code này cho trọn vẹn nhé.

Chân thành cảm ơn anh gia_bach và mọi người.

Cám ơn sự nhiệt tình của bạn Tuệ nhé, code của bạn cũng đã giúp đúng như ý tớ rồi không biết các pác còn có ý tưởng gì để code hay hơn. Mình đang làm với các đường polyline thì lisp cho kết quả tốt.

Thank you very much. :cheers:

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 sự nhiệt tình của bạn Tuệ nhé, code của bạn cũng đã giúp đúng như ý tớ rồi không biết các pác còn có ý tưởng gì để code hay hơn. Mình đang làm với các đường polyline thì lisp cho kết quả tốt.

Thank you very much. :cheers:

Chào Tuynh

Nếu tập chọn Chon Polyline them Vertex : trùng với tập chọn Chon Polyline giao voi Polyline them Vertex : thì kết quả toàn bộ Polyline sẽ được thêm Vertex tại điểm giao nhau đấy.

 

Command: addvertex

Chon Polyline them Vertex :

Select objects: Specify opposite corner: 3 found : Chọn đối tượng

 

Select objects: Enter

 

Chon Polyline giao voi Polyline them Vertex :

Select objects: p : Nhấn chữ P (previous)

3 found

 

Select objects:

 

-> toàn bộ Polyline sẽ được thêm Vertex tại điểm giao nhau.

 

Vấn đề Tue_NV đang gặp khó khăn là các PLINE có Arc thì thêm Vertex không được như ý muốn của user

 

Mình đang mong được sự hỗ trợ của mọi người để code trên thành công trọn vẹn. Thanks

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

Em đang cần một Lít yêu cầu như sau:

- Em có các số là 2, 4, 6, 8, 10, 12, ...., XXXX. (từng số đó có thể là Mt hoặc Dt)

Em muốn chèn sau những con số đó là "PN", hay "P" hay "..."

Các Bác giúp em với. Thanks!

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
Em đang cần một Lít yêu cầu như sau:

- Em có các số là 2, 4, 6, 8, 10, 12, ...., XXXX. (từng số đó có thể là Mt hoặc Dt)

Em muốn chèn sau những con số đó là "PN", hay "P" hay "..."

Các Bác giúp em với. Thanks!

Chào bác K_malau,

Thực tình thì mình cũng muốn giúp bác lắm nhưng chửa biết giúp cách nào. Bác đặt ra cái yêu cầu mà mình đọc hoài không hiểu nên đành bó ...... chiếu.

Ý bác là thay tất cả các text số ở trên bằng một text mới hay là sao nhỉ?

Trên diễn đàn đã có kha khá lisp để có thể thay đổi giá trị của text, bác chịu khó tìm kiếm một chút rồi xem cái nào nó vừa ý mình thì xài.

Còn để viết riêng một cái cho bác thì bác phải nói rõ hơn mới được, đầu vào là gì, đầu ra là gì bác nhé. Chứ theo như bác nói thì cái đầu ra nó mông lung quá, khó mà viết nổi. Cái "..." của bác có mà giời hiểu bác ạ. Vả lại việc chọn là "P" hay "PN" nó phải có điều kiện chi chứ hay là hầm bà lằng xắng cấu, thằng nào cũng được.

Rất mong bác bớt chút thời gian để trình bày cho rõ cái bác cần chứ chớ có làm khổ cái đầu mọi người bác nha.

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
Lời đầu tiên, cho phép Tue_NV gửi lời cảm ơn tới anh gia_bach. Nhờ sự hướng dẫn của anh về addvertex method mà Tue_NV đã hoàn thành đoạn Code này để giúp cho bạn Tuynh

 

Chào Tuynh. Đây là Code mà Tue_NV đã hoàn thành. Bạn chạy thử và cho ý kiến nhé :

(defun GiaoDT (ent1 ent2)
(vl-load-com)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)

) 
;
(defun c:AddVertex (/ obj pt ParamPt i ss1 ss2 j sdc ent1 ent2)
(vl-load-com)
(prompt "\n Chon Polyline them Vertex : ")
(setq ss1 (ssget '((0 . "*POLYLINE"))))
(prompt "\n Chon Polyline giao voi Polyline them Vertex : ")
(setq ss2 (ssget '((0 . "*POLYLINE"))) i 0 j 0 sdc 0)

(while (< i (sslength ss1))
(setq ent1 (ssname ss1 i))
(setq obj (vlax-ename->vla-object ent1))
(setq j 0)

(while (< j (sslength ss2))

(setq ent2 (ssname ss2 j))

(if (/= (Giaodt ent1 ent2) nil)
(progn 

(repeat (length (Giaodt ent1 ent2))
(setq pt (nth sdc (Giaodt ent1 ent2)))
(setq ParamPt (vlax-curve-getParamAtPoint obj pt))

(if (> (- ParamPt (fix ParamPt)) 0.001)
(vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
)
(setq sdc (+ sdc 1))
)
(setq sdc 0)
);progn
);if

(setq j (1+ j))

);while

(setq i (1+ i))

);while

(princ)
)

.........

Tuy nhiên, đoạn Code trên còn có 1 điểm chưa hoàn thiện là các PLINE có Arc thì thêm Vertex không được như ý muốn của user

Theo điểm Remark trong Addvertex method thì :

 

Remarks

 

 

tham số Index thì Tue_NV có thể hiểu giống như addvertex method

 

Anh giabach và mọi người có thể hỗ trợ thêm cho Tue_NV để hoàn thành code này cho trọn vẹn nhé.

Chân thành cảm ơn anh gia_bach và mọi người.

Chào Tue_NV, trước hết xin nói thêm Addvertex method chỉ hỗ trợ cho các đường kiểu LWPOLYLINE, còn POLYLINE thì phải xây dựng lại theo kiểu khác.

Còn Value trong mã (vla-setBulge obj Index Value) chính là độ cong của cung tròn. Muốn tìm độ cong này thì dùng hàm getbulge. Thiep đã gửi Tue_NV 1 ví dụ tìm xem 1 LWPolyline có arc nào không. Link ở đây:

http://www.cadviet.com/forum/index.php?s=&...ost&p=72300

Như vậy, chỉ thêm đoạn mã sau:

(setq bul (vla-getbulge obj Index))

(if (/= bul 0)

(vla-setBulge obj (+ Index 1) bul))

  • 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
Em đang cần một Lít yêu cầu như sau:

- Em có các số là 2, 4, 6, 8, 10, 12, ...., XXXX. (từng số đó có thể là Mt hoặc Dt)

Em muốn chèn sau những con số đó là "PN", hay "P" hay "..."

Các Bác giúp em với. Thanks!

http://www.cadviet.com/forum/index.php?sho...991&hl=text

Mình nghĩ Lisp của anh Duy chính là thứ bạn cần. lần sau bạn chịu khó tìm kiếm một chút bằng vài từ khóa khả dĩ trước đi nhé. Box này là cả một thư viện lisp rất lớn cho bạn rồi. nếu vấn đề của bạn chưa đc đề cập tới mọi người sẽ giúp bạ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
Chào Tuynh

Nếu tập chọn Chon Polyline them Vertex : trùng với tập chọn Chon Polyline giao voi Polyline them Vertex : thì kết quả toàn bộ Polyline sẽ được thêm Vertex tại điểm giao nhau đấy.

 

Command: addvertex

Chon Polyline them Vertex :

Select objects: Specify opposite corner: 3 found : Chọn đối tượng

 

Select objects: Enter

 

Chon Polyline giao voi Polyline them Vertex :

Select objects: p : Nhấn chữ P (previous)

3 found

 

Select objects:

 

-> toàn bộ Polyline sẽ được thêm Vertex tại điểm giao nhau.

 

Vấn đề Tue_NV đang gặp khó khăn là các PLINE có Arc thì thêm Vertex không được như ý muốn của user

 

Mình đang mong được sự hỗ trợ của mọi người để code trên thành công trọn vẹn. Thanks

Chào Tuệ

Mình làm thử các đường polyline có arc thì lisp chạy không như ý muốn, mong các bác hoàn thành code này trọn vẹn nhé.

Chân thành cảm ơn bạn Tuệ và mọi người đã giú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
Chào Tuệ

Mình làm thử các đường polyline có arc thì lisp chạy không như ý muốn, mong các bác hoàn thành code này trọn vẹn nhé.

Chân thành cảm ơn bạn Tuệ và mọi người đã giúp đỡ.

Về giá trị bulge

The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list.

A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex.

A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.

giá trị bulge tang của 1/4 góc chắn phần tử (segment).

- Nếu bulge >0 : cung tròn theo ngược chiều kim đồng hồ, ngược lại cùng chiều kim đồng hồ.

- Nếu bulge = 0 : phần tử là đuờng thẳng

- Nếu bulge = 1 : phần tử là đuờng tròn

 

Gửi bạn Lisp thêm các đỉnh tại các vị trí giao nhau giữa đuờng LWPOLYLINE với tất cả các đối tuợng khác cắt qua nó (bao gồm : LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE).

Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

(defun c:AddVtx (/ doc vl ov ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 (vla-StartUndoMark doc)
 (setq vl '("CMDECHO" "OSMODE" "ORTHOMODE") ; Sys Var list
       ov (mapcar 'getvar vl)) ; Get Old values  
 (mapcar 'setvar vl '(0 0 0)) ; Turn off CMDECHO, OSMODE, ORTHOMODE
 (prompt "\nChon Polyline them Vertex : ")
 (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (foreach pt (get_interpts_with_touching ent)
(AddVtx ent pt)	) ) )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (vla-EndUndoMark doc)
 (princ)
 )

(defun AddVtx (entPL pt / obj pObj pa a1 a2 p1 p2 ce bu)
;; Transform any angle (in radians) into its equivalent between 0 and 2*pi
(defun ang<2pi (ang)
 (if (and (<= 0 ang) (< ang (* 2 pi)))
   ang
   (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi)))
   )
 )
; get center
(defun get_center (ent param / ang1 ang2 pt1 pt2)
 (setq ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.1 param)))
ang2 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.9 param)))
)
 (if (or (/= ang1 ang2)
  (/= ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.5 param))))
  )
   (progn
     (setq pt1 (vlax-curve-getPointAtParam ent (+ 0.1 param))
    pt2 (vlax-curve-getPointAtParam ent (+ 0.9 param)))
     (inters pt1 (polar pt1 (- ang1 (/ pi 2)) 1.0) pt2 (polar pt2 (- ang2 (/ pi 2)) 1.0) nil)
     )
   )
 )
 ;--- AddVtx --------
 (setq obj (vlax-ename->vla-object entPL)
pObj t);PointAtObj
 (or
   (setq pa (vlax-curve-getParamAtPoint obj pt))
   (setq pa (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj pt) )
  pObj nil)
   )
 (if (> (- pa (setq pa (fix pa))) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
   (progn
     (if (and (setq ce (get_center obj pa)) pObj)
(progn
  (setq p1 (vlax-curve-getPointAtParam obj pa)
	p2 (vlax-curve-getPointAtParam obj (1+ pa))  )
  (if (< pi (ang<2pi (- (angle pt p2) (angle p1 pt)))(* 2 pi))
    (setq a1 (- (ang<2pi (- (angle ce p1) (angle ce pt))))
	  a2 (- (ang<2pi (- (angle ce pt) (angle ce p2)))) )
    (setq a1 (ang<2pi (- (angle ce pt) (angle ce p1)))
	  a2 (ang<2pi (- (angle ce p2) (angle ce pt)))  )
    )
  (setq bu (list (cons pa (/ (sin (/ a1 4.0)) (cos (/ a1 4.0)))) ;gia tri Bulge tai dinh truoc v/tri chen
		 (cons (1+ pa) (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))) ;gia tri Bulge tai dinh moi chen
		 ))
  )
(setq bu nil)
)
     (vlax-invoke obj 'AddVertex (1+ pa) (list (car pt) (cadr pt)));them dinh
     (setq bu (mapcar '(lambda (x) (vla-setBulge obj (car x) (cdr x))) bu));cap nhat Bulge
     )
   )
 )

(defun get_interpts_with_touching (ent / obj bl tr ss lst intpts)
 ;;  return a list of lists grouped by 3 from a flat list
 (defun list->3pair (old / new)
   (while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
	 old (cdddr old)))
   (reverse new)
   )
 ;------------ ss_interpts
 (setq obj (vlax-ename->vla-object ent))
 (vla-getBoundingBox obj 'bl 'tr)
 (and
   (setq bl (vlax-safearray->list bl)
  tr (vlax-safearray->list tr))
   (setq ss (ssget "_c" bl tr (list (cons 0 "*LINE,ARC,CIRCLE,ELLIPSE")
			     (cons 410 (getvar "ctab"))))
  )
   (setq lst_pt nil
  lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
   (foreach intoObj lst
     (if (setq intpts (vlax-invoke Obj 'IntersectWith intoObj acExtendNone))
(setq lst_pt (append (list->3pair intpts) lst_pt)) ))
     )
 lst_pt
 )

  • 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
Bài toán Thiệp đưa ra sẽ ứng dụng như thế nào trong thực tế?

ứng dụng như thế này:

1. Có 1 dòng sông, tôi đang tìm 1 vị trí trên dòng sông có đường kính rộng nhất để làm vũng quay tàu.

2. Vẽ đa giác ngoại tiếp 1 đường cong kín Spline

  • 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
Về giá trị bulge

The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list.

A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex.

A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.

giá trị bulge tang của 1/4 góc chắn phần tử (segment).

- Nếu bulge >0 : cung tròn theo ngược chiều kim đồng hồ, ngược lại cùng chiều kim đồng hồ.

- Nếu bulge = 0 : phần tử là đuờng thẳng

- Nếu bulge = 1 : phần tử là đuờng tròn

 

Gửi bạn Lisp thêm các đỉnh tại các vị trí giao nhau giữa đuờng LWPOLYLINE với tất cả các đối tuợng khác cắt qua nó (bao gồm : LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE).

Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

(defun c:AddVtx (/ doc vl ov ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 (vla-StartUndoMark doc)
 (setq vl '("CMDECHO" "OSMODE" "ORTHOMODE") ; Sys Var list
       ov (mapcar 'getvar vl)) ; Get Old values  
 (mapcar 'setvar vl '(0 0 0)) ; Turn off CMDECHO, OSMODE, ORTHOMODE
 (prompt "\nChon Polyline them Vertex : ")
 (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (foreach pt (get_interpts_with_touching ent)
(AddVtx ent pt)	) ) )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (vla-EndUndoMark doc)
 (princ)
 )

(defun AddVtx (entPL pt / obj pObj pa a1 a2 p1 p2 ce bu)
;; Transform any angle (in radians) into its equivalent between 0 and 2*pi
(defun ang<2pi (ang)
 (if (and (<= 0 ang) (< ang (* 2 pi)))
   ang
   (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi)))
   )
 )
; get center
(defun get_center (ent param / ang1 ang2 pt1 pt2)
 (setq ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.1 param)))
ang2 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.9 param)))
)
 (if (or (/= ang1 ang2)
  (/= ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.5 param))))
  )
   (progn
     (setq pt1 (vlax-curve-getPointAtParam ent (+ 0.1 param))
    pt2 (vlax-curve-getPointAtParam ent (+ 0.9 param)))
     (inters pt1 (polar pt1 (- ang1 (/ pi 2)) 1.0) pt2 (polar pt2 (- ang2 (/ pi 2)) 1.0) nil)
     )
   )
 )
 ;--- AddVtx --------
 (setq obj (vlax-ename->vla-object entPL)
pObj t);PointAtObj
 (or
   (setq pa (vlax-curve-getParamAtPoint obj pt))
   (setq pa (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj pt) )
  pObj nil)
   )
 (if (> (- pa (setq pa (fix pa))) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
   (progn
     (if (and (setq ce (get_center obj pa)) pObj)
(progn
  (setq p1 (vlax-curve-getPointAtParam obj pa)
	p2 (vlax-curve-getPointAtParam obj (1+ pa))  )
  (if (< pi (ang<2pi (- (angle pt p2) (angle p1 pt)))(* 2 pi))
    (setq a1 (- (ang<2pi (- (angle ce p1) (angle ce pt))))
	  a2 (- (ang<2pi (- (angle ce pt) (angle ce p2)))) )
    (setq a1 (ang<2pi (- (angle ce pt) (angle ce p1)))
	  a2 (ang<2pi (- (angle ce p2) (angle ce pt)))  )
    )
  (setq bu (list (cons pa (/ (sin (/ a1 4.0)) (cos (/ a1 4.0)))) ;gia tri Bulge tai dinh truoc v/tri chen
		 (cons (1+ pa) (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))) ;gia tri Bulge tai dinh moi chen
		 ))
  )
(setq bu nil)
)
     (vlax-invoke obj 'AddVertex (1+ pa) (list (car pt) (cadr pt)));them dinh
     (setq bu (mapcar '(lambda (x) (vla-setBulge obj (car x) (cdr x))) bu));cap nhat Bulge
     )
   )
 )

(defun get_interpts_with_touching (ent / obj bl tr ss lst intpts)
 ;;  return a list of lists grouped by 3 from a flat list
 (defun list->3pair (old / new)
   (while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
	 old (cdddr old)))
   (reverse new)
   )
 ;------------ ss_interpts
 (setq obj (vlax-ename->vla-object ent))
 (vla-getBoundingBox obj 'bl 'tr)
 (and
   (setq bl (vlax-safearray->list bl)
  tr (vlax-safearray->list tr))
   (setq ss (ssget "_c" bl tr (list (cons 0 "*LINE,ARC,CIRCLE,ELLIPSE")
			     (cons 410 (getvar "ctab"))))
  )
   (setq lst_pt nil
  lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
   (foreach intoObj lst
     (if (setq intpts (vlax-invoke Obj 'IntersectWith intoObj acExtendNone))
(setq lst_pt (append (list->3pair intpts) lst_pt)) ))
     )
 lst_pt
 )

Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

Vâng em test rồi nhưng không dùng được, khi nào rảnh kiểm tra dùm hộ tớ 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
ứng dụng như thế này:

1. Có 1 dòng sông, tôi đang tìm 1 vị trí trên dòng sông có đường kính rộng nhất để làm vũng quay tàu.

2. Vẽ đa giác ngoại tiếp 1 đường cong kín Spline

 

Baì 2: 2. Vẽ đa giác ngoại tiếp 1 đường cong kín Spline

Em vừa nghĩ ra lời giải.

Cảm ơn anh Thiếp. Em đưa và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
Hà Anh ơi em biết rồi chỉ anh đi.

Pác Thiệp đang bắt anh trả lời. Hic hic.

Trang xin góp ý với ý kiến của riêng Trang như sau:

Nhưng nếu các bạn là những người master về CAD thì chúng ta nên chia sẻ kiến thức về định hướng.

Khả năng suy luận, đặt vấn đề.

Nếu các bạn đã là master mà các bạn chỉ áp dụng y chang cách là từ năm này qua năm khác,

việc làm đó sẽ làm chúng ta xa rời việc sáng tạo. Hãy sáng tạo hơn.

Hãy vì 1 diễn đàn CAD Viet Smart hơn.

Em cũng chỉ tình cờ nghĩ ra câu trả lời thôi anh a! Mong Thiêp và anh Trang hiểu và thông cảm em vì em ko đưa ra

câu trả lời ngay.Em đã đưa câu hỏi của anh Thiep vào bộ sưu tập câu đố của em rồi anh ạ!

Nhớ hồi đi học thầy dậy toán của em cũng thích đưa ra câu đố về toán. Thầy thường "câu giờ" và đợi đến cuối mỗi học

kỳ mới đưa ra lời giải!

 

Nếu rỗi thời gian anh Trang có thể vào đọc các bài viết của em trong đây:

 

Diễn đàn CADViet > AutoCAD > Mẹo sử dụng AutoCAD> Đố vui

http://www.cadviet.com/forum/index.php?sho...0&start=440

 

Chúc anh Trang vui khoẻ và gặp nhiều may mắn ngay sau khi đọc bài viết này!

 

Và cũng mong tất cả các bác trên diễn đàn hiểu và thông cảm em không phải là master đâu,

em cũng chỉ bám "càng" bác Phamthanhbinh mót khoai lang thôi các bác ạ!

Ai mua khoai ...nang ...lướng ... 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

Các bạn ạ. Mình có vài lời góp ý thế này. Nếu có gì không fải mong các bạn bỏ qua cho.

Topic này tương lai sẽ giống như topic Viết lisp theo yêu cầu P1. nó sẽ rất dài và rất nặng cho diễn đàn. Mặt khác, đây là topic cho mọi người có thể tìm thấy những công cụ hỗ trợ tốt hơn cho công việc nên hằng ngày số người truy cập vào tương đối lớn. Vẫn biết diễn đàn có chức năng tìm kiếm, nhưng không phải lúc nào chúng ta cũng dễ dàng tìm thấy thứ mình muốn bằng cách này. Nếu đã một lần tìm lisp trong topic Viết lisp theo yêu cầu P1 bạn sẽ hiểu được sự khó khăn và mệt mỏi vì những bài viết kiểu như trên.

Vì vậy, nếu các bạn không fiền, xin hạn chế đến mức tối đa có thể việc post những bài viết vô bổ vào topic này. OK chứ?

@Trang: hi vọng bạn hiểu.

  • 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

đây là lisp cùa anh TUE NV :

;; free lisp from cadviet.com

(defun c:nt(/ lis a ss i ent chu p x)

(setvar "cmdecho" 0)

(prompt "Chon Text :")

(setq ss (ssget '((0 . "TEXT"))) i 0 lis nil res " " lisch "")

(while (< i (sslength ss))

(setq ent (entget(ssname ss i)))

(setq chu (cdr(assoc 1 ent)))

(setq p (cdr(assoc 10 ent)))

(setq lis (append lis (list (cons chu p))))

(setq lisch (strcat lisch chu res))

(setq i (1+ i))

)

 

(command "line")

(foreach x lis

(initget 1 (eval lisch))

(command

(if (setq a (assoc (getkword "\n Nhap chu : ") lis))

(progn

(cdr a)

)

)

)

)

 

(princ)

)

lisp chạy tốt nhưng nó ko nhớ điểm đã chọn(khi đánh lệnh thì phải chọn lại đối tượng)mong anh TUE sửa lại 1 chút cho nó hoàn chỉnh.,,cám ơn

  • Vote giảm 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
Gửi bạn Lisp thêm các đỉnh tại các vị trí giao nhau giữa đuờng LWPOLYLINE với tất cả các đối tuợng khác cắt qua nó (bao gồm : LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE).

Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

(defun c:AddVtx (/ doc vl ov ss)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 (vla-StartUndoMark doc)
 (setq vl '("CMDECHO" "OSMODE" "ORTHOMODE") ; Sys Var list
       ov (mapcar 'getvar vl)) ; Get Old values  
 (mapcar 'setvar vl '(0 0 0)) ; Turn off CMDECHO, OSMODE, ORTHOMODE
 (prompt "\nChon Polyline them Vertex : ")
 (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (foreach pt (get_interpts_with_touching ent)
(AddVtx ent pt)	) ) )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (vla-EndUndoMark doc)
 (princ)
 )

(defun AddVtx (entPL pt / obj pObj pa a1 a2 p1 p2 ce bu)
;; Transform any angle (in radians) into its equivalent between 0 and 2*pi
(defun ang<2pi (ang)
 (if (and (<= 0 ang) (< ang (* 2 pi)))
   ang
   (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi)))
   )
 )
; get center
(defun get_center (ent param / ang1 ang2 pt1 pt2)
 (setq ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.1 param)))
ang2 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.9 param)))
)
 (if (or (/= ang1 ang2)
  (/= ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (+ 0.5 param))))
  )
   (progn
     (setq pt1 (vlax-curve-getPointAtParam ent (+ 0.1 param))
    pt2 (vlax-curve-getPointAtParam ent (+ 0.9 param)))
     (inters pt1 (polar pt1 (- ang1 (/ pi 2)) 1.0) pt2 (polar pt2 (- ang2 (/ pi 2)) 1.0) nil)
     )
   )
 )
 ;--- AddVtx --------
 (setq obj (vlax-ename->vla-object entPL)
pObj t);PointAtObj
 (or
   (setq pa (vlax-curve-getParamAtPoint obj pt))
   (setq pa (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj pt) )
  pObj nil)
   )
 (if (> (- pa (setq pa (fix pa))) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
   (progn
     (if (and (setq ce (get_center obj pa)) pObj)
(progn
  (setq p1 (vlax-curve-getPointAtParam obj pa)
	p2 (vlax-curve-getPointAtParam obj (1+ pa))  )
  (if (< pi (ang<2pi (- (angle pt p2) (angle p1 pt)))(* 2 pi))
    (setq a1 (- (ang<2pi (- (angle ce p1) (angle ce pt))))
	  a2 (- (ang<2pi (- (angle ce pt) (angle ce p2)))) )
    (setq a1 (ang<2pi (- (angle ce pt) (angle ce p1)))
	  a2 (ang<2pi (- (angle ce p2) (angle ce pt)))  )
    )
  (setq bu (list (cons pa (/ (sin (/ a1 4.0)) (cos (/ a1 4.0)))) ;gia tri Bulge tai dinh truoc v/tri chen
		 (cons (1+ pa) (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))) ;gia tri Bulge tai dinh moi chen
		 ))
  )
(setq bu nil)
)
     (vlax-invoke obj 'AddVertex (1+ pa) (list (car pt) (cadr pt)));them dinh
     (setq bu (mapcar '(lambda (x) (vla-setBulge obj (car x) (cdr x))) bu));cap nhat Bulge
     )
   )
 )

(defun get_interpts_with_touching (ent / obj bl tr ss lst intpts)
 ;;  return a list of lists grouped by 3 from a flat list
 (defun list->3pair (old / new)
   (while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
	 old (cdddr old)))
   (reverse new)
   )
 ;------------ ss_interpts
 (setq obj (vlax-ename->vla-object ent))
 (vla-getBoundingBox obj 'bl 'tr)
 (and
   (setq bl (vlax-safearray->list bl)
  tr (vlax-safearray->list tr))
   (setq ss (ssget "_c" bl tr (list (cons 0 "*LINE,ARC,CIRCLE,ELLIPSE")
			     (cons 410 (getvar "ctab"))))
  )
   (setq lst_pt nil
  lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
   (foreach intoObj lst
     (if (setq intpts (vlax-invoke Obj 'IntersectWith intoObj acExtendNone))
(setq lst_pt (append (list->3pair intpts) lst_pt)) ))
     )
 lst_pt
 )

Xin lỗi diễn đàn cho mình đính chính lại một chút nhé, lisp bác Gia Bach viết lại cho em chạy tốt trên cad 2006 mình chưa thử với cad đời cao hơn, buổi chiều khi ở cơ quan em chạy trên cad2002 lisp không cho kết quả, em chưa kiểm tra hết mà đã vội kết luận xin lỗi bác Gia Bach nhé. Cảm ơn bác Gia Bach, bác Tue, đã hoàn thành lisp này cho em. :cheers: :cheers:

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
Đây là lisp vẽ nhà dùng để vẽ bình đồ theo cách vẽ của lệnh NHA trong NOVA nhưng đã được đơn giản hóa.

- khi vẽ chỉ cân pick vào 3 điểm góc của nhà.

- Lisp vẽ được 2 loại nhà: nhà ngói (hay nhà lá) và nhà tầng với số tầng nhập vào khi vẽ.

- Với nhà ngói, các đường thể hiện mái ngói được vẽ riêng bằng một layer khác.

- toàn bộ nhà được vẽ bằng layer NHATOANDAC

venha.jpg

(Defun c:nha ( ) 
(if (not h) (setq h 1))
(setq h1 (getreal (strcat "\nCao text <"(rtos h 2 2)">:")))
(if h1 (setq h h1))
(setq laylast (getvar "clayer"))
(setq oslast (getvar "osmode"))
(setq colast (getvar "cecolor"))
(command "osmode" 109)
(setq pta (getpoint (strcat "\n pick diem thu nhat")))
(setq i1 0 i2 0)

(while (/= pta nil)
(command "undo" "begin")
(command "color" 1 "circle" pta 1)
(setq ss1 (ssget "L") ss (ssadd) ss (ssadd (ssname ss1 0) ss))
(setvar "cecolor" colast)
(setq ptb (getpoint (strcat "\n pick diem thu 2") pta))
(command "color" 2 "circle" ptb 1)
(setq ss2 (ssget "L") ss (ssadd (ssname ss2 0) ss))
(setvar "cecolor" colast)
(setq ptc (getpoint (strcat "\n pick diem thu 3") ptb))
(command "color" 3 "circle" ptc 1)
(setq ss3 (ssget "L") ss (ssadd (ssname ss3 0) ss))
(setvar "cecolor" colast)
(setq L1 (distance pta ptb) L2 (distance ptb ptc))
(setq ptd (polar pta (angle ptb ptc) L2))
(if (> L2 L1)
(setq pt1 pta pt2 ptb pt3 ptc)
(setq pt1 ptd pt2 pta pt3 ptb))
(setq L1 (distance pt1 pt2) L2 (distance pt2 pt3))
(setq goc1 (angle pt1 pt2))
(setq goc2 (angle pt2 pt3))
(setq pt4 (polar pt1 goc2 L2))
(setq pt5 (polar pt1 (- goc1 (/ pi 6)) (/ L1 2 (cos (/ pi 6)))))
(setq pt6 (polar pt3 (+ goc2 (/ pi 3)) (/ L1 -2 (cos (/ pi 6)))))
(setq pt7 (polar pt5 goc2 (/ (distance pt5 pt6) 2)))

(setq nha (cond (nha) ("Ngoi")))
(initget "Ngoi Tang")
(setq	Tmp1 (strcat "\nNha mai ngoi hay nha tang [Ngoi/Tang] <" nha ">: ")
nha (cond ((getkword Tmp1)) (nha)))
(if (not (tblsearch "layer" "NHATOANDAC"))
(command "-layer" "N" "NHATOANDAC" "S" "NHATOANDAC" "color" 7 "" "")
(command "Clayer" "NHATOANDAC"))

(if (eq Nha "Ngoi")
(progn
(Command "color" bylayer "osmode" 0 "pline" pt1 pt2 pt3 pt4 pt1 "")
(if (not (tblsearch "layer" "layer1"))
(command "-layer" "N" "layer1" "S" "layer1" "color" 8 "" "")
(command "Clayer" "layer1"));if
(command "pline" pt1 pt5 pt2 "")
(command "pline" pt5 pt6 "")
(command "pline" pt3 pt6 pt4 "")
(command "osmode" 109)
(setq i1 (1+ i1))
(setvar "cecolor" colast)
(command "erase" ss "")
(command "undo" "end")
);progn
(progn
(setq tang (cond (tang) ("2tang")))
(initget "2tang 3tang 4tang 5tang 6tang")
(setq	Tmp1 (strcat "\nNha bao nhieu tang [2Tang/3Tang/4Tang/5Tang/6Tang]<" tang ">: ")
tang (cond ((getkword Tmp1)) (tang)))
(Command "color" bylayer "osmode" 0 "pline" pt1 pt2 pt3 pt4 pt1"")
(if (eq tang "2tang") (command "color" 3 "text" "m" pt7 h 0 "2T"))
(if (eq tang "3tang") (command "color" 3 "text" "m" pt7 h 0 "3T"))
(if (eq tang "4tang") (command "color" 3 "text" "m" pt7 h 0 "4T"))
(if (eq tang "5tang") (command "color" 3 "text" "m" pt7 h 0 "5T"))
(if (eq tang "6tang") (command "color" 3 "text" "m" pt7 h 0 "6T"))
(setq i2 (1+ i2))
(command "osmode" 109)
(setvar "cecolor" colast)
(command "erase" ss "")
(command "undo" "end")
);progn
);if
(setq pta (getpoint (strcat "\n pick diem thu nhat")))
);while
(setvar "cecolor" colast)
(setvar "osmode" oslast)
(setvar "clayer" laylast)
(command "undo" "end")
(prompt (strcat "\nDa ve " (rtos i1 2 0) " nha ngoi va " (rtos i2 2 0) " nha tang\n"))
(prompt "\nby Thaistreetz - huuthais@yahoo.com\n")
);end.

Chú ý: Khi pick các điểm góc nhà ngói bạn bắt buộc phải pick lần lượt 3 góc theo chiều quay kim đồng hồ. Mình phát hiện lỗi này sau khi đã viết xong lisp nên ngại viết lại. bạn sử dụng chú ý một chút là ok thôi.

Nhờ Anh viết hộ cho em Lisp thêm các mẩu nhà sau

http://www.cadviet.com/upfiles/2/mau_nha.rar

Rất 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
Về giá trị bulge

The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list.

A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex.

A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.

giá trị bulge tang của 1/4 góc chắn phần tử (segment).

- Nếu bulge >0 : cung tròn theo ngược chiều kim đồng hồ, ngược lại cùng chiều kim đồng hồ.

- Nếu bulge = 0 : phần tử là đuờng thẳng

- Nếu bulge = 1 : phần tử là đuờng tròn

 

Gửi bạn Lisp thêm các đỉnh tại các vị trí giao nhau giữa đuờng LWPOLYLINE với tất cả các đối tuợng khác cắt qua nó (bao gồm : LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE).

Do không có thời gian test nhiều, nhờ các bạn kiểm tra dùm.

Chào anh gia_bach

Anh có thể giải thích rõ hơn cho Tue_NV biết giá trị bulge được không?

giá trị bulge tang của 1/4 góc chắn phần tử (segment).

Chổ này thì Tue_NV chưa hiểu lắm. Cảm ơn anh

 

@kamezoko : Ở dòng Select object : Bạn nhấn P (Previous) thì Lisp sẽ chọn lại đối tượng trước đó

Select object : P

:cheers:

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

Anh có thể giải thích rõ hơn cho Tue_NV biết giá trị bulge được không?

giá trị bulge tang của 1/4 góc chắn phần tử (segment).

Chào Tue_NV

Bạn xem hình nhé.

Bulge = tg (α/4) = sin (α/4) / cos (α/4)

Phụ thuộc huớng của Pline, giá trị Bulge sẽ nhận giá trị âm hoặc duơng.

bulge.jpg

  • 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 Tue_NV

Bạn xem hình nhé.

Bulge = tg (α/4) = sin (α/4) / cos (α/4)

Phụ thuộc huớng của Pline, giá trị Bulge sẽ nhận giá trị âm hoặc duơng.

bulge.jpg

nó cũng chính là S/C trong hình vẽ này

bulge_3.jpg

 

Bulge = s/c=tanε

ε+T=90độ

θ/2+2T= 180độ =>θ/4+T=90độ

=>ε=θ/4=>s/c=tanθ/4

 

Đấy là lý do vì sao Bulge = tg (α/4) như công thức của bác gia_bach

  • Vote tăng 4

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

Minh có một bản vẽ lớn, muốn trích một phần của khu đó ra và save ra bản vẽ mới với tên khác.

Nhờ các anh giúp cho lisp chọn khu vực cần trích ( góc trên bên trái đến góc dưới bên phải ). Líp sẻ chọn tất cả đồi tượng trên, save qua bản vẽ mới, yêu cầu đặt tên file mới và khu vực trích đó được cắt theo hình chử nhật vừa chọn.

Rất mong được giú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
Minh có một bản vẽ lớn, muốn trích một phần của khu đó ra và save ra bản vẽ mới với tên khác.

Nhờ các anh giúp cho lisp chọn khu vực cần trích ( góc trên bên trái đến góc dưới bên phải ). Líp sẻ chọn tất cả đồi tượng trên, save qua bản vẽ mới, yêu cầu đặt tên file mới và khu vực trích đó được cắt theo hình chử nhật vừa chọn.

Rất mong được giúp đở,

Lệnh Wblock làm được yêu cầu của bạ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ờ Anh viết hộ cho em Lisp thêm các mẩu nhà sau

http://www.cadviet.com/upfiles/2/mau_nha.rar

Rất cám ơn.

Chào bạn khaosat2009

Yêu cầu của bạn có thể nói là tương đương phần mềm vẽ. thực tế bản vẽ của bạn có lẽ cũng đã được bạn vẽ bằng một phần mềm nào đó. Việc này mình có thể làm được nhưng sẽ tốn rất nhiều thời gian của mình. vì thế mình không thể hứa giúp bạn ngay được, bạn có thể nhờ thêm nhiều cao thủ khác trên diễn đà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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×