vnsharifi Posted January 21, 2011 Posted January 21, 2011 Hello there. I found below lisp in internet. What is does is , It will find the bounding box of selected object and it put those data in minpoint and maxpoint variable and show them in command prompt. with this format ( x1 y1 z1 , x2 y2 z2) I believe , right term is " Buffer ". Now my question is , how can I can read X,Y coordinates of those point in vb net. Or at least write them in a file. I nice example would be helpful because I am not a pro. Thanks for all help. ;;============================= (defun C:minmax() (setq BarEname (cdr (car (entget (car (entsel "\nselect your object ")))))) (ucs-bbox BarEname) ) ;; can be used with vla-transformby to ;; transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 t) (list origin)) ) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1) ) (list '(0 0 0 1)) ) ) ) ;; transform objects from the WCS to the UCS (defun WCS2UCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin)(append (trans vector 0 1 t) (list origin))) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 1 0) ) (list '(0 0 0 1)) ) ) ) ;; Returns the UCS coordinates of the object bounding box about UCS ;; Argument ;; obj : a graphical object (ename or vla-object) ;; Return ;; a list of left lower point and right upper point UCS coordinates (defun ucs-bbox (obj / minpoint maxpoint) (vl-load-com) (and (= (type obj) 'ENAME) (setq obj (vlax-ename->vla-object obj)) ) (vla-TransformBy obj (UCS2WCSMatrix)) (vla-getboundingbox obj 'minpoint 'maxpoint) (vla-TransformBy obj (WCS2UCSMatrix)) (list (vlax-safearray->list minpoint) (vlax-safearray->list maxpoint) ) ) Quote
fixo Posted January 21, 2011 Posted January 21, 2011 (edited) Here you go [color=#008000]'[/color] [color=#008000]' Created by SharpDevelop.[/color] [color=#008000]' User: Олег[/color] [color=#008000]' Date: 21.01.2011[/color] [color=#008000]' Time: 11:46[/color] [color=#008000]' [/color] [color=#008000]' To change this template use Tools | Options | Coding | Edit Standard Headers.[/color] [color=#008000]'[/color] [color=#0000ff]Imports[/color] System [color=#0000ff]Imports[/color] System.[color=#0000ff]Text[/color] [color=#0000ff]Imports[/color] System.Data [color=#0000ff]Imports[/color] System.IO [color=#0000ff]Imports[/color] System.Globalization [color=#0000ff]Imports[/color] System.Collections [color=#0000ff]Imports[/color] System.Runtime.InteropServices [color=#0000ff]Imports[/color] System.Reflection [color=#0000ff]Imports[/color] Autodesk.AutoCAD.Runtime [color=#0000ff]Imports[/color] Autodesk.AutoCAD.Geometry [color=#0000ff]Imports[/color] Autodesk.AutoCAD.EditorInput [color=#0000ff]Imports[/color] Autodesk.AutoCAD.DatabaseServices [color=#0000ff]Imports[/color] Autodesk.AutoCAD.ApplicationServices <Assembly: CommandClass([color=#0000ff]GetType[/color](TextCommands.ImportPoints))> [color=#0000ff]Namespace[/color] TextCommands [color=#0000ff]Public[/color] [color=#0000ff]Class[/color] ImportPoints <CommandMethod("CSV")> _ [color=#0000ff]Public[/color] [color=#0000ff]Shared[/color] [color=#0000ff]Sub[/color] ImbortBounds() [color=#0000ff]Dim[/color] fname [color=#0000ff]As[/color] [color=#6f002f]String[/color]="C:\usedFiles\bbox.csv" [color=#0000ff]Dim[/color] oldcult [color=#0000ff]As[/color] CultureInfo= Threading.Thread.CurrentThread.CurrentCulture Threading.Thread.CurrentThread.CurrentCulture= [color=#8515ea]New[/color] CultureInfo("EN-us") [color=#0000ff]Dim[/color] db [color=#0000ff]As[/color] Database=HostApplicationServices.WorkingDatabase [color=#0000ff]Dim[/color] doc [color=#0000ff]As[/color] Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument [color=#0000ff]Dim[/color] ed [color=#0000ff]As[/color] Editor=doc.Editor [color=#0000ff]Dim[/color] mtx [color=#0000ff]As[/color] Matrix3d= ed.CurrentUserCoordinateSystem [color=#0000ff]Dim[/color] pts [color=#0000ff]As[/color] List([color=#0000ff]Of[/color] [color=#6f002f]String[/color])= [color=#8515ea]New[/color] List([color=#0000ff]Of[/color] [color=#6f002f]String[/color]) [color=#0000ff]Dim[/color] psr [color=#0000ff]As[/color] PromptSelectionResult =ed.GetSelection() [color=#0000ff]If[/color] psr.Status <> PromptStatus.OK [color=#0000ff]Then[/color] ed.WriteMessage("{0}Selection Returned: {0}" ,vbCr,psr.Status) [color=#0000ff]Return[/color] [color=#0000ff]End[/color] [color=#0000ff]If[/color] [color=#0000ff]Dim[/color] sset [color=#0000ff]As[/color] SelectionSet = psr.Value ed.WriteMessage("{0}Selection Returned: {0}" ,vbCr,sset.Count) [color=#0000ff]If[/color] sset.Count=0 [color=#0000ff]Then[/color] ed.WriteMessage("{0}Nothing Selected, exit...",vbcr) [color=#0000ff]return[/color] [color=#0000ff]End[/color] [color=#0000ff]If[/color] pts.Add([color=#6f002f]String[/color].Format("{0}{6}{1}{6}{2}{6}{3}{6}{4}{6}{5}{7}", _ "Min X","Min Y","Min Z","Max X","Max Y","Max Z",vbtab,vbclf)) [color=#0000ff]Using[/color] tr [color=#0000ff]As[/color] Transaction=db.TransactionManager.StartTransaction() [color=#0000ff]Try[/color] [color=#0000ff]For[/color] [color=#0000ff]Each[/color] ent [color=#0000ff]As[/color] SelectedObject [color=#0000ff]In[/color] sset [color=#0000ff]Dim[/color] id [color=#0000ff]As[/color] ObjectId = ent.ObjectId [color=#0000ff]Dim[/color] obj [color=#0000ff]As[/color] Entity = [color=#0000ff]TryCast[/color](tr.GetObject(id, OpenMode.ForRead), Entity) [color=#0000ff]If[/color] ([color=#8515ea]Not[/color] ent [color=#8515ea]Is[/color] [color=#0000ff]Nothing[/color]) [color=#0000ff]Then[/color] [color=#0000ff]Dim[/color] ex3d [color=#0000ff]As[/color] Extents3d=obj.GeometricExtents [color=#0000ff]Dim[/color] pd [color=#0000ff]As[/color] Point3d=ex3d.MinPoint.TransformBy(mtx) [color=#0000ff]Dim[/color] pu [color=#0000ff]As[/color] Point3d=ex3d.MaxPoint.TransformBy(mtx) [color=#0000ff]Dim[/color] strtmp [color=#0000ff]As[/color] [color=#6f002f]String[/color]= _ [color=#6f002f]String[/color].Format("{0:f3}{6}{1:f3}{6}{2:f3}{6}{3:f3}{6}{4:f3}{6}{5:f3}{7}", _ pd.X,pd.Y,pd.Z,pu.X,pu.Y,pu.Z,vbtab,vbclf) pts.Add(strtmp) [color=#0000ff]End[/color] [color=#0000ff]if[/color] [color=#0000ff]Next[/color] [color=#0000ff]If[/color] pts.Count>1 [color=#0000ff]Then[/color] [color=#0000ff]Try[/color] [color=#0000ff]Using[/color] sw [color=#0000ff]As[/color] [color=#8515ea]New[/color] StreamWriter(fname) [color=#0000ff]For[/color] [color=#0000ff]Each[/color] coords [color=#0000ff]As[/color] [color=#6f002f]String[/color] [color=#0000ff]In[/color] pts sw.WriteLine(coords) [color=#0000ff]Next[/color] sw.Close() [color=#0000ff]End[/color] [color=#0000ff]Using[/color] [color=#0000ff]Catch[/color] ex [color=#0000ff]As[/color] IOException ed.WriteMessage("{0}Error while processing the file.",vbCr) [color=#0000ff]Catch[/color] ex [color=#0000ff]As[/color] System.Exception ed.WriteMessage("{0}Error reading in file data.",vbCr) [color=#0000ff]End[/color] [color=#0000ff]Try[/color] [color=#0000ff]End[/color] [color=#0000ff]If[/color] [color=#0000ff]Catch[/color] ex [color=#0000ff]As[/color] System.Exception ed.WriteMessage("{0}{1}",vbCr,ex.ToString) [color=#0000ff]Finally[/color] Threading.Thread.CurrentThread.CurrentCulture=oldcult [color=#0000ff]End[/color] [color=#0000ff]Try[/color] [color=#0000ff]End[/color] [color=#0000ff]using[/color] [color=#0000ff]End[/color] [color=#0000ff]Sub[/color] [color=#0000ff]End[/color] [color=#0000ff]Class[/color] [color=#0000ff]End[/color] [color=#0000ff]Namespace[/color] ~'J'~ Edited January 21, 2011 by fixo tags missed Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.