Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

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

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
ndtnv    396
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.

hinhve.png

http://www.cadviet.com/upfiles/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)
)

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

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 ạ?

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
quygtvt    27
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.

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
truongthanh    7
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 đỡ!

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
aliosa    4
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.

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
Tue_NV    3.841
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:

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
truongthanh    7
ý 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!

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
q288    164
ý 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)
)

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

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
TRUNGNGAMY    91

 

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.

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

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
Tue_NV    3.841
Đ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

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
truongthanh    7
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é!

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
truongthanh    7

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é!

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
Tue_NV    3.841
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 ((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)
)

  • 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
lon ton    1

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

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
truongthanh    7
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!

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á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.com/upfiles/hoan.dwg

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
truongthanh    7
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

theo ý mình thì bạn dùng EXCELLINK là tốt nhấ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
lon ton    1
theo ý mình thì bạn dùng EXCELLINK là tốt nhất!

bác có thể chỉ rõ giúp em được không?

em là beginer mà :s_big:

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
q288    164
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é!

 

Chắc text của bạn là mtext tiếng Việt pko? cho nên nó mới xảy ra hiện tượng như vậy, mình sửa lại như sau, bây giờ thì nó move text về pline chứ ko tạo text mới.

(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
 (vl-load-com)
 (setq	chu  (vlax-ename->vla-object (car (entsel "\nChon text :")))	     
       os (getvar "OSMODE")
       obj  (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
       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))
 )
 (setvar "OSMODE" 0) 
 (vla-put-Rotation chu ang)
 (vla-put-InsertionPoint chu (vlax-3d-Point pm))
 (setvar "OSMODE" os)
)

  • 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
truongthanh    7
bác có thể chỉ rõ giúp em được không?

em là beginer mà :s_big:

bạn lên mạng SEARCH phần mềm tên EXCELLINK về rồi dùng!nó có thể xuất đối tượng block attribute trong CAD qua bên excel và ngược lại!bạn có thể chỉnh sửa bên excel xong sau đó import lại qua bên CAD!

  • 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
truongthanh    7
Chắc text của bạn là mtext tiếng Việt pko? cho nên nó mới xảy ra hiện tượng như vậy, mình sửa lại như sau, bây giờ thì nó move text về pline chứ ko tạo text mới.

(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
 (vl-load-com)
 (setq	chu  (vlax-ename->vla-object (car (entsel "\nChon text :")))	     
       os (getvar "OSMODE")
       obj  (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
       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))
 )
 (setvar "OSMODE" 0) 
 (vla-put-Rotation chu ang)
 (vla-put-InsertionPoint chu (vlax-3d-Point pm))
 (setvar "OSMODE" os)
)

cảm ơn bạn nhé!cái này nó gần đúng với ý mình rồi!khoảng được 50%!bạn có thể chỉnh sửa lại thêm được nữa ko?mình muốn sau khi quét xong cái TEXT nó sẽ MOVE vào nằm dưới MIDDLE CENTER đường PLINE và cách PLINE 1 khoảng bằng chiều cao của TEXT (hoặc là khoảng cách này mình tự nhập vào thì càng tốt)! (hiên nay nó chỉ đúng với MTEXT và nằm sát với PLINE, còn DTEXT thì nó chỉ xoay thôi và nằm yên,ko MOVE về PLINE)cảm ơn sự tận tình của bạn rất 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×