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

nataca

Thành viên
  • Số lượng nội dung

    697
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    12

Bài đăng được đăng bởi nataca


  1. 1). Chỉ có Line thì ổn định. Có thêm Pline, Arc, Spline thì lỗi.

    2). Bổ sung undo begin và undo end nữa.

    - Xin lỗi vì không chú thích. Cái này chỉ dùng cho Pline và Line, còn đối tượng khác không áp dụng. Vì đối tượng khác ít dùng, viết tổng quát mất nhiều thời gian, không cần thiết.

    - Begin và Undo ai biết về lisp thì tự thêm vào, còn nếu ko biết thì ko có cũng ko sao.


  2. Có phải ý bạn là thế này? 

    TRT.gif

     

    (defun C:TRT (/ DTCAT ENT P P1 P2 PG ENT1 LENT PD) ;;;Trim Trai chieu
    	(prompt "\nChon doi tuong cat")
    	(setq dtcat (ssget))
    	(prompt "\nChon doi tuong bi cat")
    	(setq	p			(getpoint)
    				Lent	(C_S2L (ssget "C" p (getcorner p)))
    	)
    	(foreach ent Lent
    		(setq pg		(car (INTS_2ENT (ssname dtcat 0) ent)))
    		(if (eq (DXF 0 ent) "LINE")
    			(progn
    				(setq ent1 	(MK_PLINE1 (list (DXF 10 ent) (DXF 11 ent)))
    							p1 		(car (P_VPL ent1))
    							p2		(last (P_VPL ent1))
    							pd		(vlax-curve-getClosestPointTo ent1 p)
    				)
    				(entdel ent1)
    			)
    			(setq p1 		(car (P_VPL ent))
    						p2		(last (P_VPL ent))
    						pd			(vlax-curve-getClosestPointTo ent p)
    			)
    		)
    		(if (equal (AG_3P pg pd p1) 0 0.0001)
    			(setq pd p2)
    			(setq pd p1)
    		)
    		(if (eq (DXF 0 ent) "LINE")
    			(vl-cmdf "trim" dtcat "" pd  "")
    			(entmod (subst (cons 10 pg) (cons 10 pd) (entget ent)))
    		)
    	)
    )
    (defun INTS_2ENT (ent1 ent2 / ob1 ob2 g kq sd)
    	(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 MK_PLINE1 (Vpl)
    	(vl-cmdf "Pline")
    	(foreach v Vpl
    		(vl-cmdf v)
    	)
    	(vl-cmdf "")
    	(entlast)
    )
    (defun DXF (Id Obj)
    	(cdr (assoc Id (entget Obj)))
    )
    (defun C_S2L (ss)
    	(if	ss
    		(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    		nil
    	)
    )
    (defun P_VPL (Pline)
    	(if Pline
    		(mapcar	'cdr
    						(vl-remove-if-not
    							'(lambda (x) (= 10 (car x)))
    							(entget Pline)
    						)
    		)
    		nil
    	)
    )
    (defun AG_3P (Pt0 pt1 pt2 / goc goc1 goc2)
    	(setq	goc1 (angle Pt0 Pt1)
    				goc2 (angle Pt0 Pt2)
    				goc	 (if (> (abs (- goc1 goc2)) pi)
    							 (- (* 2 pi) (abs (- goc1 goc2)))
    							 (abs (- goc1 goc2))
    						 )
    	)
    	goc
    )
    
    • Vote tăng 1

  3. Theo thông tin mới nhất từ Facebook anh nataca thì ngày 30/04/2012 anh sẽ lập gia đình với con cô giáo chủ nhiệm cấp 3.

    Em thấy thật là thiếu sót nếu không lên tiếng chúc mừng. Vì vậy mạn phép đăng ảnh cưới của anh nataca lên đây.

     

    Trời!!!. Em svba1608 post bài từ 25/4/2012 mà đến hum nay là 24/4/2013 Nataca mới được đọc bài này. Gần 1 năm rồi. Đã xa các bạn cadviet quá lâu. Cám ơn tình cảm của các bạn đã dành cho Nataca. Xúc động quá!!!

    Chúc các bạn luôn mạnh khoẻ, hạnh phúc, tràn ngập tình yêu và niềm đam mê Autocad

    • Vote tăng 1

  4. có cách tìm "vùng trọng tâm" để giảm thời gian "mò". Lúc đầu cho sai số lớn, sau đó tìm được kết quả rồi thì lại "mò" trong vùng kết quả với sai số nhỏ hơn, tiếp tục như thế đến sai số đạt yêu cầu. Kiểu này chắc phải dùng đến thuật toán đệ quy với biến sai số thay đổi.


  5. Em là Kiến Trúc Sư , em vẽ Mặt Bằng nhà xong thì muốn vẽ tiếp Mặt Bên + Măt Cắt Ngang của nhà ( các hinh chiếu có hướng chiếu so với Măt Bằng là đi từ bên trái hay bên phải nhìn vào ,các bác đừng nhầm lẫn khái niệm với Mặt Đứng & Mặt Cắt Dọc nhé , 2 cái đấy em ko có vấn đề gì) thì em có 2 cách : Làm hết bên Model Space nha , ko muốn chơi Paper Space đâu

    Mời các bác xuống núi . Em xin cảm ơn tất cả ý kiến & Lisp các bác viết cho

    Theo mình bạn hoàn toàn giải quyết việc này được nhờ vào chế độ view bên paper mà chẳng khác gì đang vẽ trong model, không việc gì phải dùng đến lisp cả.

    Nó đáp ứng được yêu cầu:

    - Xoay được mặt bằng để vẽ mặt bên, mặt cắt

    - Đảm bảo chỉ có 1 mặt bằng duy nhất (không phải copy hay block... gì cả) nên đảm bảo cả việc tham chiếu và sửa đổi.

    Để làm được điều trên:

    - Mời bạn sang tab Layout

    - Bạn tạo cho mình một View zoom về vị trí mặt bằng (gọi là V1)

    - Copy View vừa tạo sang một bên để tý nữa vẽ mặt bên, mặt cắt (gọi là V2)

    - Xoay view mặt bằng với lệnh ALIGNSPACE hay lệnh nào tùy bạn miễn là xoay được mặt bằng theo ý muốn. Zoom center V1 theo tỷ lệ thích hợp (nhớ lưu tỷ lệ zoom này_ gọi là Z1)

    - Sang V2, Zoom center về giá trị Z1 (đảm bảo chuẩn kích thước so với V1), rồi Pan đến vị trí hợp lý để vẽ mặt bên, mặt cắt

    - Bước cuối cùng để việc vẽ bên paper như model là bạn khóa view V1, V2 lại để không thể zoom và Pan (bằng cách quét chọn vào V1, V2 rồi nhấn vào biểu tượng khóa view ở góc dưới bên phải màn hình autocad hoặc Ctrl+1 rồi sửa thuộc tính Display lock của 2 view này thành yes)

    - Giờ bạn lick đúp vào V2 để vẽ trên đó bình thường (không khác việc bạn vẽ bên Model tý nào)

    • Vote tăng 1

  6. bạn có thể nhận được ứng dụng này free nếu bạn có 1 trong các điều kiện sau:

    - Bạn đã có tối thiểu 150 bài viết trên cadviet + tối thiểu 20 thank (hay like hay danh tiếng gì gì đó)

    - Bạn có tối thiêu 50 thank

    - Bạn là thành viên thường xuyên của box autolisp và đã post ít nhất 1 lisp hoặc 1 ứng dụng của bạn viết cho mọi người.

    - Khi nào các bác phamngoctukts Detailing free ứng dụng trên, hoặc có 1 ứng dụng tương tự được post free.

    Và điều kiện cuối cùng là bắt buộc: like cho mình 1fát vào bài này lấy danh tiếng, mất gì đâu :P

    @Thaistreetz: Thế còn đối với nataca thì sao? (Dạo này bận nhiều việc quá, có mấy ý tưởng hay mà chưa thực hiện được).

     

    Thấy các bác rôm rả quá em xin phép spam tý cho vui. Do đặc thù công việc bây giờ không chuyên môn sâu về cad nên em ít tham gia bàn luận về lập trình. Tuy nhiên, thi thoảng em vẫn ghé qua thăm diễn đàn, tìm hiểu đôi chút về ObjectArx, .Net, thấy muốn học quá. Tranh thủ cuối tuần là thử cài VS2008, rồi lại chuyển qua VS2010 cho đỡ nhọc vụ cài SP1 (của VS2008), chọn C#.net để vọc, thấy nhọc nhất là quá trình test code cứ phải đợi thằng ku Cad restart (Cad2012). Thế mới biết con đẻ (lisp) sướng hơn nhiều. .Net là công nghệ của tương lai, khả năng lập trình rộng nên sẽ tiếp cận dần dần, học mót được của các bác càng nhiều càng tốt, còn trước mắt nếu ứng dụng nào nằm trong khả năng lisp thì chắc là em vẫn dùng lisp. Em thấy lisp đáp ứng được 80% ý tưởng của mình.

    Còn nói về công cụ so sánh này thì em lại nghĩ thêm một ý: nếu thêm được tính năng syncview theo đối tượng hoặc chi tiết nữa thì hay (sẽ hữu ích khi kiểm tra đồng thời Bình đồ - trắc dọc - trắc ngang của 1 cọc trong thiết kế đường). Các bác thử xem sao


  7. Tue_NV bổ sung tiếp :

    Đoạn code chép vào acad####doc.lsp sẽ là: kiểm tra và đọc code mà bạn ấy đã lưu trong bản vẽ sẽ open

    acad####doc.lsp không phải là file được tạo ra mà nó có sẵn trong CAD

    nếu chép vào autocad của máy cần thực hiện thì cũng không khác mang file lisp theo là mấy. Ý của Thaistreetz là không cần mang theo bất cứ file nào theo ngoài file .dwg.


  8. Hehe,mình cũng hong biết cách mua như thế nào ^_^! Hơi khó kiếm một chút nhưng dưới đây bản free mình lục lọi được trên mạng ^_^!

    http://www.mediafire...dpl3ci622p6dqwr (thiệt là có lỗi với tác giả :mellow:!)

    Cám ơn Skywings nhiều!

    Hx. Mình định mua vì thấy giá bán có 7$. Thôi mình dùng số tiền đó để làm từ thiện vậy. Nam mô a di đà phật


  9. Hehe, chỉ giáo CVNTeam thì em ko dám nhưng có vài ý như sau:

    Mỗi bản vẽ có 1 bộ layer khác nhau nên việc làm 1 lisp để cover hết thì e là "hơi khó". Nhưng nếu bạn đã có 1 bộ layer đã "chuẩn" rồi thì có thể thử các lệnh này xem sao:

     

    muốn tắt các layer có chữ Wall ở đầu : (command "-layer" "off" "Wall*" "")

    muốn tắt các layer có chữ Wall : (command "-layer" "off" "*Wall*" "")

    Chú ý: trước khi thao tác phài chuyển CLAYER về layer khác với layer muốn thao tác.

     

    Thân!

    Cám ơn bạn. Cái này hay đấy nhưng tình hình là vẫn chưa phải là Filter. Filter là mình phải lọc sẵn các nhóm layer sẵn rồi đặt tên cho nó.

    Em không rành lắm về sử dụng Filter, thấy trên mạng có mấy ví dụ, không biết bác vọc chưa ? :

    http://208.74.205.69...es/td-p/3067750

    http://forums.autode...isp/td-p/887048

    http://www.cadtutor....er-group-filter

    Cám ơn Ketxu đã nhắc nhở, xin lỗi mình không để ý.

    Tình hình có vẻ ra vấn đề rồi. Hờ hờ


  10. Chào cả nhà. Mình hiện giờ đang làm việc với nhiều Xref. Việc tắt lớp, mở lớp thường phải dùng đến Filter layer.

    Mình thường phải làm thủ công bằng cách mở hộp thoại layer rồi xử lý mấy thằng Filters này. Làm như thế hơi mất thời gian nên mình đang muốn viết một đoạn lisp để xử lý thằng này cho tiện; ngồi mày mò mà chưa ra được. Mong các anh em chỉ giáo cho vài đường xem sao. Đa tạ đa tạ


  11. Bàn về mấy ông GT thì dài bất tận, nghe kể có ông còn bảo: tao tốn cả bạc trăm mới được ra đây đứng được, nên giờ phải lấy lại :blink:

    Mình thì có hôm bị túm vào. Hỏi sao thì bảo đưa tiền đây nộp phạt. Mình hỏi các anh có cần xem bằng, giấy tờ xe không thì họ bảo "không cần". Chả hiểu

    • Vote tăng 1

  12. Chào bác VUVUZELA

    Dạo này mình bận rộn quá nên ít thời gian ngó ngàng đến Lisp. Về vấn đề mã hóa lisp, *.fas , *.vlx thực ra mình không để tâm nhiều. Sở dĩ mình chỉ chơi file *.fas là vì mình viết chương trình theo Project. Các hộp thoại mình viết luôn trên nền file lisp chứ không đưa ra file *.dcl riêng.

    Mình đang có một tham vọng là viết một chương trình để quản lý luôn cả Project nguồn của mình (vd: quản lý hàm, quản lý biến,quản lý kết quả...) vì thực ra Project do thằng Vlide cung cấp chỉ đáp ứng được phần nào. Khi viết chương trình lớn, với nhiều tầng nhiều lớp, nhiều người cùng viết thì cần một chương trình quản lý mạnh hơn.

    Mình chỉ viết chương trình để phục vụ công việc, không nghĩ đến bán nên không bận tâm nhiều đến vấn đề bảo mật. Cách bảo mật tốt nhất hiện nay của mình là... chỉ mình biết, chỉ mình dùng.


  13. - Trong quá trình làm việc với file bản vẽ không ít lần chúng ta cần mở thư mục chứa file bản vẽ đang mở. Theo cách thông thường thì chúng ta sẽ vào thư mục một cách thủ công, đôi khi thư mục để ở một nơi "thâm sâu bí hiểm" nên việc tìm đến nó khá mệt mỏi. Có một số cách để làm nhẹ nhàng đi như: tạo shortcut file hay thư mục... Tuy nhiên có một cách mà mình muốn bàn ở đây là mở bằng Autolisp:

    + Cad có một biến lưu đường dẫn thư mục chứa file đó là: "DWGPREFIX"

    + Vấn đề còn lại là Explorer thư mục này. Có một cách đơn giản là dùng hàm (startapp "explorer.exe"(getvar "DWGPREFIX")) . Tuy nhiên cách này không chơi được với những thư mục có dấu , (phẩy)-> hiện tại mới test được lỗi này

    + Cách nữa có thể chơi được với mọi loại tên thư mục:

    (defun C:QE ()
    (Explore (getvar "DWGPREFIX"))
    )
    (defun Explore ( Directory / Shell result )
     (setq Shell  (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application"))
     (setq result (vl-catch-all-apply 'vlax-invoke (list Shell 'Explore Directory)))
     (vlax-release-object Shell)
     (not (vl-catch-all-error-p result))
    )

    -> Cách này rất ổn. Nó dùng "Shell.Application" để liên kết với windows.

    - Tiếp theo là vấn đề thứ 2 của topic: Mở ra được rồi nhưng làm cách nào để đóng một thư mục đang mở hoặc để không mở trùng một thư mục đã mở trước. Mình thử tìm hiểu nhưng chưa nghĩ ra cách. Mọi người thử nghĩ tiếp xem sao. :)

    • Vote tăng 2

  14. Keng thẻng quá trời ơi, muốn đi ngủ nhưng chẳng được, những ý tưởng dang dở, nếu không viết thì quên mất, muốn viết thì cũng chẳng yên với vợ, thôi thì đành ghi nhớ lại trong đầu với niềm đam mê của mình vậy.

    Xin lỗi các bác, mình spam quá!

    Trước em cũng như bác nhưng giờ phải quan tâm đến sức khỏe nhiều hơn (cẩn thận không đi làm không đủ tiền mua thuốc) cộng với công việc ngày càng nhiều hơn nên em thường xuyên phải ghi ra Note của điện thoại. Khi ghi ra thì rất yên tâm là ý tưởng của mình không bị mất. Thế nên ngủ cũng ngon. Khi có khoảng thời gian rỗi là lôi một loạt ý tưởng ra thực thi. Vừa không hại sức khỏe vừa tiết kiệm thời gian (tránh nhàn cư vi bất thiện) khà khà. Hy vọng kinh nghiệm của em có ích cho các anh em đam mê lập trình.


  15. E nghĩ bác đang đề cập tới Xdata - Dictionary (các hàm vlax-ldata-* )

    Ví dụ của bác GiaBach

    Các giá trị lưu trong "từ điển" đi kèm trong file bản vẽ và cũng có thể truy xuất từ các bản vẽ khác

    - Xdata thì có một cái dở là phải gắn vào đối tượng trong bản vẽ -> lỡ tay xóa là toi

    - Dictionary thực ra là từ điển chứa đối tượng. Các dữ liệu vẫn liên quan đến đối tượng. Nếu xóa đối tượng, Purge bản vẽ vẫn có thể bị mất.

×