Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#2301 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 07 July 2009 - 10:55 AM

Mình thấy lệnh polar không ổn lắm. Vì bản chất ở đây là từ điểm mình đã xác định được trên đường cong rồi từ đó mình phải xác định được vector pháp tuyến của đường cong tại điểm đó. Sau đó mới xác định vị trí điểm cần tìm trên véc tơ pháp tuyến đó theo khoảng cách đã cho trước. (hic, mình chưa biết lệnh xác định vector pháp của đường cong trong lisp)
Nếu dùng lệnh polar thì mình phải biết góc trước nhưng ở đây chưa có góc, mà chỉ biết khoảng cách thôi.


Bạn đọc bài viết này nhé :
Bai viet so 8, bai viet so 10
  • 0

#2302 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 07 July 2009 - 11:26 AM

Bạn đọc bài viết này nhé :
Bai viet so 8, bai viet so 10

Hay quá ! Đúng nó rồi đó. Thank a lot !!!
  • 0

#2303 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 07 July 2009 - 04:39 PM

Xin viết giúp lisp với nội dung sau:
Có:
- Một đường tim (bất kỳ) là tổ hợp của các đường (Polyline, Arc, splile,line) trên đường tim ta xác định các vị trí nhất định (theo tệp số liệu)
- Tệp số liệu dạng .CSV với các số liệu theo dạng sau:
+ cột 1:NO_ Số thứ tự.
+cột 2:DIST_ Khoảng cách (tính từ điểm điểm đầu đường tim, giá trị này bất kỳ)
+cột 3: OFFSET L_Khoảng cách offset sang trái đường tim (giá trị này có thể thay đổi)
+cột 4: OFFSET R_Khoảng cách offset sang phải đường tim (giá trị này có thể thay đổi)
VD:
NO,DIST,OFFSET L,OFFSET R
0,0,40,40
1,20,40,40
2,40,45,40
3,60,40,43
4,80,60,40
5,100,40,40
Yêu cầu
Viết một chương trình vẽ một đường tròn vào bên trái và bên phải đường tim đã có theo khoảng cách offset đã ghi trong trong tệp số liệu tương ứng tại các vị trí theo khoảng cách đã cho. (lưu ý bán kính của đường trong không khống chế ). Mục đích ở đây là xác định được vị trí của các điểm sau khi đã offset từ tim ra một khoảng các nhất định.
Xin nhờ các bạn chỉ giúp.
Hình đã gửi
http://www.cadviet.c...files/Tuyen.zip

Bạn thử lisp này, nếu có trường hợp nào chưa đúng yêu cầu thì
- Post bản vẽ các trường hợp đó
- Chú thích phần sai khác của lisp so với yêu cầu
- Dùng font unicode để chú thích hoặc post font của style TieuDe

(vl-load-com)
(defun c:Tuyen( / n id esc ss Obj e el els pt om l tl f li s da fuz)
(defun SplitStr (str / s n)
(setq s (list))
(while (setq n (vl-string-search "," str))
(setq s (append s (list (substr str 1 n)) ))
(setq str (substr str (+ n 2)))
)
(setq s (append s (list str) ))
)
(defun Draw2Circle ( / a hs)
(if (= 0 (nth 1 e))
(setq hs 1)
(setq hs -1 pos (- l pos))
)
(if (equal pos (nth 2 e) 1.e-8)
(setq pt (vlax-curve-getEndPoint Obj))
(setq pt (vlax-curve-getPointAtDist Obj pos))
)
(if pt
(progn
(setq a (+ (* hs da)(angle '(0 0)(vlax-curve-getFirstDeriv Obj (vlax-curve

-getParamAtPoint Obj pt)))))
(command "CIRCLE" (polar pt a (atof (nth 2 s))) 1.5)
(command "CIRCLE" (polar pt a (- (atof (nth 3 s)))) 1.5)
)
)
)
(setq fuz 1.e-8 )
(setq om (getvar "osmode") )
(princ "\n Chon cac duong tam:")
;(setq ss (ssget (list (cons 0 "LINE,POLYLINE,LWPOLYLINE,ARC,SPLINE")))) ; Truong hop tong quat
(setq ss (ssget (list (cons 0 "POLYLINE")))) ; Ban ve mau
(setq pt (getpoint "\nDiem dau:") )
(setq tl 0 i 0 n (sslength ss))
(repeat n
(setq Obj (ssname ss i) i (1+ i))
(setq el (append el (list (list Obj (vlax-curve-getStartPoint Obj) (vlax-curve-getEndPoint

Obj) ))))
)
(while el
(setq el (vl-sort el
(function
(lambda (e1 e2)
(< (min (distance pt (nth 1 e1)) (distance pt (nth 2 e1)))
(min (distance pt (nth 1 e2)) (distance pt (nth 2 e2)))

)
)
)
))
(setq e (nth 0 el) Obj (car e) l (vlax-curve-getDistAtParam Obj (vlax-curve-getEndParam

Obj)))
(setq id (if (< (distance pt (nth 1 e)) (distance pt (nth 2 e))) 0 1) tl (+ tl l))
(setq els (append els (list(list Obj id l))) el (cdr el) )
(setq pt (nth (- 2 id) e))
)

(if (not (setq f (open (getfiled "Data file" "" "csv" 0) "r"))) (exit))
(setq da (/ pi 2))
(setq li (read-line f) )
(while (/= (setq li (read-line f) )"EOF")
(setq s (SplitStr li))
(if (= 4 (length s))
(progn
(setq esc nil i 0 pos (atof (nth 1 s)))
(if (or (< pos 0) (> pos tl)) (setq b T))
(while (and (< i n )(not esc))
(progn
(setq e (nth i els) Obj (nth 0 e) l (nth 2 e))
(if (<= pos l)
(progn
(Draw2Circle)
(setq esc T)
)
)
(setq i (1+ i) pos (- pos l) )
)
)
)
)
)
(close f)

(setvar "osmode" om)
(princ)
)

  • 1

#2304 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 07 July 2009 - 10:31 PM

cho em hỏi!các bác nào có lisp mà mình chỉ vào 1 PLINE sau đó mình chỉ ra ngoài PLINE đó (trên hay dưới PLINE cũng dc) thì nó sẽ ghi cho mình giá trị là chiều dài của PLINE đó (ví dụ nó sẽ ghi là "100m") và cái TEXT đó nằm song song và giữa cái PLINE đó ko ạ?
  • 0

#2305 quygtvt

quygtvt

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: 27 (tàm tạm)

Đã gửi 07 July 2009 - 11:09 PM

cho em hỏi!các bác nào có lisp mà mình chỉ vào 1 PLINE sau đó mình chỉ ra ngoài PLINE đó (trên hay dưới PLINE cũng dc) thì nó sẽ ghi cho mình giá trị là chiều dài của PLINE đó và cái TEXT đó nằm song song và giữa cái PLINE đó ko ạ?

Yêu câu của bạn sẽ không khó nếu nó được giải thích rõ ràng hơn. Tôi đang nghĩ đến trường hợp pline của bạn có số đoạn thẳng là lẻ, text sẽ được điền song song đoạn thẳng giữa. Nếu như thế, các Pro trong diễn đàn sẽ giúp bạn được ngay. Tuy nhiên, sẽ thuận lợi hơn nếu bạn nói rõ trường hợp ứng dụng của bạn.
Best regard.
  • 0
Không thể nói trời không xanh hơn,
và mắt em không xanh khác ngày thường

Hình đã gửi


#2306 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 07 July 2009 - 11:50 PM

Yêu câu của bạn sẽ không khó nếu nó được giải thích rõ ràng hơn. Tôi đang nghĩ đến trường hợp pline của bạn có số đoạn thẳng là lẻ, text sẽ được điền song song đoạn thẳng giữa. Nếu như thế, các Pro trong diễn đàn sẽ giúp bạn được ngay. Tuy nhiên, sẽ thuận lợi hơn nếu bạn nói rõ trường hợp ứng dụng của bạn.
Best regard.

ý của em là muốn có 1 cái LISP mà cách dùng như lệnh MA trong CAD!nhưng dùng cho PLINE và TEXT!ví dụ PLINE nằm ngiêng 45 độ, còn TEXT nằm 0 độ!em dùng LISP quét vào PLINE sau đó quét vào TEXT thì cái TEXT nó sẽ song song với PLINE và nằm giữa PLINE đó!còn chiều của TEXT sẽ phụ thuộc vào chiều vẽ của PLINE (nghĩa là PLINE vẽ từ trái qua phải thì TEXT cũng vậy)mong các anh giúp đỡ!
  • 0

#2307 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 08 July 2009 - 06:09 PM

Bạn thử lisp này, nếu có trường hợp nào chưa đúng yêu cầu thì
- Post bản vẽ các trường hợp đó
- Chú thích phần sai khác của lisp so với yêu cầu
- Dùng font unicode để chú thích hoặc post font của style TieuDe


Cảm ơn các bạn rất nhiều.
Xin nhờ các bạn một chút nữa: Giờ mình muốn làm bài toán ngược lại so với bài toán này, nghĩa là cho biết vị trí một điểm (pick chuột một điểm bất kỳ trên màn hình) chương trình sẽ cho biết là điểm đó các đường cong (cho trước) khoảng cách là bao nhiêu và nằm ở lý trình (độ dài tính đầu đường cong)
Chúc các bạn sức khoẻ và thành công trong cuộc sống.
  • 0

#2308 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 08 July 2009 - 07:23 PM

Cảm ơn các bạn rất nhiều.
Xin nhờ các bạn một chút nữa: Giờ mình muốn làm bài toán ngược lại so với bài toán này, nghĩa là cho biết vị trí một điểm (pick chuột một điểm bất kỳ trên màn hình) chương trình sẽ cho biết là điểm đó các đường cong (cho trước) khoảng cách là bao nhiêu và nằm ở lý trình (độ dài tính đầu đường cong)
Chúc các bạn sức khoẻ và thành công trong cuộc sống.

Bạn sử dụng hàm vlax-curve-getDistAtPoint

(vlax-curve-getDistAtPoint curve-obj point)

Bạn có thể xem hàm này trong Help

Chúc thành công :s_big:
  • 0

#2309 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 08 July 2009 - 07:40 PM

ý của em là muốn có 1 cái LISP mà cách dùng như lệnh MA trong CAD!nhưng dùng cho PLINE và TEXT!ví dụ PLINE nằm ngiêng 45 độ, còn TEXT nằm 0 độ!em dùng LISP quét vào PLINE sau đó quét vào TEXT thì cái TEXT nó sẽ song song với PLINE và nằm giữa PLINE đó!còn chiều của TEXT sẽ phụ thuộc vào chiều vẽ của PLINE (nghĩa là PLINE vẽ từ trái qua phải thì TEXT cũng vậy)mong các anh giúp đỡ!

có ai giúp em với!
  • 0

#2310 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 08 July 2009 - 09:26 PM

ý của em là muốn có 1 cái LISP mà cách dùng như lệnh MA trong CAD!nhưng dùng cho PLINE và TEXT!ví dụ PLINE nằm ngiêng 45 độ, còn TEXT nằm 0 độ!em dùng LISP quét vào PLINE sau đó quét vào TEXT thì cái TEXT nó sẽ song song với PLINE và nằm giữa PLINE đó!còn chiều của TEXT sẽ phụ thuộc vào chiều vẽ của PLINE (nghĩa là PLINE vẽ từ trái qua phải thì TEXT cũng vậy)mong các anh giúp đỡ!
có ai giúp em với!


Trước đây mình có viết cái này gần giống với yêu cầu của bạn, bạn dùng thử xem. Nó dùng cho các loại đường, k0 riêng gì pline.

(defun c:ist(/ chu os ent obj ndai p1 p2 pm ang caoc)
(vl-load-com)
(if (not caoc) (setq caoc 1))
(setq chu (vla-get-TextString (vlax-ename->vla-object (car (entsel "\nChon chu :"))))
caoc1 (getreal (strcat "\nCao chu <" (rtos caoc) ">:"))
os (getvar "OSMODE")
ent (car (entsel "\nChon duong de chen :")))
(if caoc1 (setq caoc caoc1))

(setvar "OSMODE" 0)
(while ent
(setq obj (vlax-ename->vla-object ent)
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
)
(command "text" "j" "BC" pm caoc (* 180 (/ ang pi)) chu)
(setq ent (car (entsel "\nChon duong de chen :")))
)
(setvar "OSMODE" os)
)

  • 1

#2311 nh0ckut3t0cv4ngh03

nh0ckut3t0cv4ngh03

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 July 2009 - 10:38 PM

Bạn cũng có thể làm như vậy :
(setq Z (eval (append (list '+) X Y X (list (* -1 (last X))))))
tránh việc dùng hàm (vl-remove) có thể dẫn đến kq sai khi có một số phần tử trong X bằng "last" X


Cảm ơn ông anh nhé ! Đúng cái em đang cần.
Anh giúp em mô tả đươc như thế này ko ?
(setq T (list 0 0 15)) ;Day ban noi
(setq U (list 6000 1500 1500)) ;Do dai dam theo thiet ke
(setq W (eval (append (list '+) T U T (list (* -1 (last T))))))

Em làm như sau nó có hiểu được ko anh ? để em nhập số liệu đầu vào chỉ 1 lần thôi.
(setq LCt (list T 0 15 0 12)) ;Day ban noi
(setq LDist (list U W 3000 6000 3000)) ;Do dai dam theo thiet ke

Một lần nữa xin cảm ơn anh nhiều !
  • 0

#2312 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 08 July 2009 - 11:51 PM



Cảm ơn ông anh nhé ! Đúng cái em đang cần.
Anh giúp em mô tả đươc như thế này ko ?
(setq T (list 0 0 15)) ;Day ban noi
(setq U (list 6000 1500 1500)) ;Do dai dam theo thiet ke
(setq W (eval (append (list '+) T U T (list (* -1 (last T))))))

Em làm như sau nó có hiểu được ko anh ? để em nhập số liệu đầu vào chỉ 1 lần thôi.
(setq LCt (list T 0 15 0 12)) ;Day ban noi
(setq LDist (list U W 3000 6000 3000)) ;Do dai dam theo thiet ke

Một lần nữa xin cảm ơn anh nhiều !

Mình không hiểu công việc của bạn. Quan sát lệnh bạn viết thì hình như bạn muốn nối 0 15 0 12 vào với T thành 1 list, tương tự như vậy với U W 3000 6000 3000. Nếu đúng vậy thì bạn làm như sau :
(setq LCt (append T '(0 15 0 12)))
(setq LDist (append U (list W) '(3000 6000 3000)))
Nếu không đúng ý bạn thì bạn nói rõ thêm tí nữa hay bạn có ví dụ cụ thể sẽ dễ hiểu hơn.
  • 1

#2313 aliosa

aliosa

    biết vẽ polygon

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

Đã gửi 09 July 2009 - 07:50 AM

Bạn sử dụng hàm vlax-curve-getDistAtPoint

(vlax-curve-getDistAtPoint curve-obj point)

Bạn có thể xem hàm này trong Help

Chúc thành công :s_big:


Điểm này không nằm trên đường tim, nằm ngoài đường tim. Mình cần phải xác định khoảng cách của nó tới đường tim. (từ điểm đó vẽ đường vuông góc với đường tim đó chính là khoảng cách. Khi đã có được giao điểm của đường mà ta hạ vuông góc với đường tim thì ta mới dùng hàm (vlax-curve-getDistAtPoint curve-obj point) được.
  • 0

#2314 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 09 July 2009 - 08:05 AM

Điểm này không nằm trên đường tim, nằm ngoài đường tim. Mình cần phải xác định khoảng cách của nó tới đường tim. (từ điểm đó vẽ đường vuông góc với đường tim đó chính là khoảng cách. Khi đã có được giao điểm của đường mà ta hạ vuông góc với đường tim thì ta mới dùng hàm (vlax-curve-getDistAtPoint curve-obj point) được.

Giả sử có 1 điểm A nằm ngoài Curve. Từ điểm A dựng một đường vuông góc với Curve, đường vuông góc này cắt curve tại B. Ta đã biết toạ độ của điểm A. Muốn tìm toạ độ của điểm B thì sử dụng hàm vlax-curve-getClosestPointTo
Còn muốn biết điểm B cách điểm đầu curve một khoảng bằng bao nhiêu thì ta sử dụng hàm vlax-curve-getDistAtPoint

Bạn có thể đọc Help
  • 0

#2315 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 09 July 2009 - 08:29 AM

Trước đây mình có viết cái này gần giống với yêu cầu của bạn, bạn dùng thử xem. Nó dùng cho các loại đường, k0 riêng gì pline.


(defun c:ist(/ chu os ent obj ndai p1 p2 pm ang caoc)
(vl-load-com)
(if (not caoc) (setq caoc 1))
(setq chu (vla-get-TextString (vlax-ename->vla-object (car (entsel "\nChon chu :"))))
caoc1 (getreal (strcat "\nCao chu <" (rtos caoc) ">:"))
os (getvar "OSMODE")
ent (car (entsel "\nChon duong de chen :")))
(if caoc1 (setq caoc caoc1))

(setvar "OSMODE" 0)
(while ent
(setq obj (vlax-ename->vla-object ent)
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
)
(command "text" "j" "BC" pm caoc (* 180 (/ ang pi)) chu)
(setq ent (car (entsel "\nChon duong de chen :")))
)
(setvar "OSMODE" os)
)

cảm ơn bạn nhé!nhưng sao mình dùng cái này ko giống với ý mình!nó hiện ra 1 dãy số gì đó dài nhằng và nó nằm 1 góc 1 độ chứ nó ko có xoay theo Pline!bạn coi lại giúp mình nhé!
  • 0

#2316 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 09 July 2009 - 08:36 AM

có ai giúp mình với!ko biết các anh nào có lisp như vậy ko?giả sử em có 2 cái TEXT, TEXT A có góc quay là 10 độ, TEXT B có góc quay là 20 độ!em dùng LISP quét vào 2 TEXT đó thì sẽ kêu mình muốn cộng thêm vào bao nhiêu độ nữa?giả sử em muốn cộng thêm 90 độ nữa!thì sau khi dùng LISP thì TEXT A có góc quay mới là 100 độ còn TEXT B có góc quay mới là 110 độ!mong các anh giúp dùm em nhé!
  • 0

#2317 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 09 July 2009 - 09:53 AM

có ai giúp mình với!ko biết các anh nào có lisp như vậy ko?giả sử em có 2 cái TEXT, TEXT A có góc quay là 10 độ, TEXT B có góc quay là 20 độ!em dùng LISP quét vào 2 TEXT đó thì sẽ kêu mình muốn cộng thêm vào bao nhiêu độ nữa?giả sử em muốn cộng thêm 90 độ nữa!thì sau khi dùng LISP thì TEXT A có góc quay mới là 100 độ còn TEXT B có góc quay mới là 110 độ!mong các anh giúp dùm em nhé!

Bạn chạy thử Lisp này nhé :
(defun c:gt(/ i n ss delta ent gocmoi)
(setq ss (ssget '((0 . "TEXT"))) n (sslength ss) i 0)
(setq delta (getangle "\n Nhap goc can cong them :"))
(while (< i n)
(setq ent (entget(ssname ss i)))
(setq gocmoi (+ (cdr(assoc 50 ent)) delta))
(setq ent (entmod(subst (cons 50 gocmoi) (assoc 50 ent) ent)))
(setq i (1+ i))
)
(princ)
)

  • 2

#2318 lon ton

lon ton

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 09 July 2009 - 10:11 AM

chào các bác
em tham gia diễn đàn mới được 1 thời gian nên chưa có điều kiện đọc hết các mục
nay em bị mắc 1 việc mà làm mãi không xong, mạo muội nhờ các bác giúp em chút
(em chưa tìm hết trên diễn đàn, nếu đã có rồi thì các bác bỏ quá cho em nhé)
Yêu cầu công việc của em như thế này:
- có 1 cánh đồng đánh số các thửa đất từ 1 đến 100 nhưng thuộc 2 xóm
- có 1 file excel chứa số thứ tự các thửa đất đó và tương ứng thuộc xóm nào
giờ em muốn 1 lisp nào đó tích hợp từ cel vào cad hiển thị cho em (có thể là đổi màu)
các thửa đất theo 2 xóm khác nhau đó
(phần việc của em nặng hơn nhìu :s_big: nhưng em chỉ lấy VD như trên cho dễ hiểu)
mong các bác bỏ chút thời gian đọc và giúp em
  • 0

#2319 truongthanh

truongthanh

    biết lệnh text

  • Members
  • PipPipPipPip
  • 275 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 09 July 2009 - 10:39 AM

Bạn chạy thử Lisp này nhé :

(defun c:gt(/ i n ss delta ent gocmoi)
(setq ss (ssget '((0 . "TEXT"))) n (sslength ss) i 0)
(setq delta (getangle "\n Nhap goc can cong them :"))
(while (< i n)
(setq ent (entget(ssname ss i)))
(setq gocmoi (+ (cdr(assoc 50 ent)) delta))
(setq ent (entmod(subst (cons 50 gocmoi) (assoc 50 ent) ent)))
(setq i (1+ i))
)
(princ)
)

cảm ơn anh rất nhiều!cái này rất đúng ý của em!
  • 0

#2320 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 09 July 2009 - 10:41 AM

Bác Tue_NV cho anh em cầu đường bọn mình xin cái lisp vét bùn với. Mình đưa ra ý tưởng thế này nha:
Chạy lisp hỏi: bề rộng vét: b=?
Độ dốc vét: 1:1(nhập1), 1:1.5(nhập 1.5), thẳng đứng (nhập 0)....
sau đó chọn polyline tự nhiên. (Chọn tấc cả các đường tự nhiên của tấc cả các mặt cắt)
Rồi chọn vị trí vét: chọn điểm thứ nhất (điểm A trong hình vẽ), chọn điểm thứ 2 (Điểm B trong hình vẽ). Sau khi chọn hai điểm cùng thuộc một polyline thì lisp sẽ vẽ được một đường tự nhiên. Rồi tiếp tục chọn hai điểm thuộc polyline khác (mặt cắt khác) thì sẽ được đường vét thứ hai rồi tiếp tục chọn hai điếp tiếp theo......
đường vét được tạo thành thuộc layer hiện hữu (không trùng với layer tự nhiên). Đó là ý tưởng của mình nhưng các bác thấy có cái gì không thích hợp thì có thể làm khác đi miên là kết quả tạo ra đúng ý của mình giống bản vẽ mẫu ở dưới và cho thật nhanh là được.
Cái này mình xin bên kia rồi nhưng chắc vì lý do gì đó mà thấy mấy bác chưa trả lời, có gì không phải mong Bác Tue_NV và các anh em admin bỏ qua để diễn đàn ngày một phát triển nhé!
Cảm ơn Tue_NV đã giúp đỡ! file cad nè: http://www.cadviet.c...pfiles/hoan.dwg
  • 0
Học học nữa học mãi.
Đúp học lại!