AutoCAD Visual LISP / AutoLISP :: Convert 2D Pline With OCS Into 3D Pline In WCS
May 29, 2012
I have LWPOLYLINEs that represent a cross section of a train tunnel. Each LWPOLYLINE lists its 2D points in an Object Coordinate System.My task is to create 3D Polylines in WorldCoordinateSystem using those LWPOLYLINEs.I have posted a drawing with sample objects.
I have attached a sample drawing. Drawing was created with Civil 3D 2013, but I exporttoautocadr12dxf'd it and then save to 2004 dwg so most should be able to open it.
Requires numeric distance, two points, or option keyword. ; error: Function cancelled
Enter fuzz distance or [Jointype] <0.000>: j
Enter join type [Extend/Add/Both] <Extend>: *Cancel*
or
Command: ch2pl
Select objects: Specify opposite corner: 5 found
Select objects:
*Invalid selection* Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Multiple]: ; error: Function cancelled Select polyline or [Multiple]: Enter an option [Close/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Reverse/Undo]: *Cancel*
I have been using one routine very successfully to create a pline in modelspace that has the outline of the chosen viewports in the drawing. This one works great.
Now I am trying add other routines that I've done to better fit my needs. If I use each routine individually at the command line they work, but when I use all in a single command I got the following errors:
The routine SetColor - does not change color to Bylayer The routine RectWidth - ; error: bad SSGET list
Why?
See the attached file for more details and be free to improve whatever you want in my routines because they are very basic.
And, if I am not asking to much, is that possible to not be prompt to select objects? I mean, the routine could automatically select all viewports in the drawing...
I have been having a few 3dpline's with the last vertex being in a different layer. I saw a site mention that this is an AutoCAD 14 bug that could be caused if a program does not end the pline with the layer being set properly before doing a seqend command. If I move the entity to another layer and then back to the correct one it will fix it. Audit in R14 will not show any errors. If I export the file to AutoCAD 12 , audit will detect and fix the problem. I would like to find a Lisp, ARX, etc. that would check for this problem and fix, change color or layer, or whatever.
Now I have all block instances rounded into a 5mm-accuracy. How to also round in Line start and end points (and maybe even polyline vertices) into a 1mm (or custom) accuracy. There are hundreds of inaccurate line elements within the drawing .
the resulting arc-fit pline has each pline segment converted into two arcs, the common radii of which are perpendicular to the original segment (unless direction of curverature changes)
the resulting arcs can be calculated given the angle of the tangents for each segment.
the factors for determining the tangents at vertex N are:
deflection angle at N
deflection angle at N+1 (90° or non-extant = not a factor, 0° or 180° = segment is the tangent)
deflection angle at N-1 (90° or non-extant = not a factor, 0° or 180° = segment is the tangent)
ratio of lengths of segments (N , N+1) and (N , N-1)
I can find the tangents when N±1 = 90° and when the segment lengths are equal but i can't figure out how to compute the tangent if these 3 factors are varied.
I don't want to use (command"._PEDIT" pl "_FIT""") because i need to collect the arc data anyway and at a high frame rate. The data will be used to further compute a spline frame that best fits a quadratic spline to the arcs. That part i know how to do!
I have a program that makes 3d polylines from various data. That 3d pline then gets added to a civil 3d surface as a breakline. I want to modify the pline with my program, but preserve the handle, as I think that is what C3D uses to decide if its part of the surface. I tried this as a sample with no luck:
;DELETE 3RD VERTEXT FROM 3D PLINE (DEFUN C:T3 ( / EN ENAME ENT ENTL) ;GET 3D PLINE (SETQ ENT (ENTSEL " Select 3D Pline:")
[Code] .....
I know you can modify a vertex, but what about add and delete with entmake and entmod? I also considered using activex for this task, but you can only add verticies from what I could tell in the object browser of VBA, not delete them.
What I will be doing is deleting all the verticies and adding back the correct ones. Or if there was a way to transfer a handle to a new entity after deleting the old, that would suffice too.
I need to change the color of all lines/plines that intersect a given pline. How would I go about making the selection set of all lines that intersect that given pline.
My work needs to convert thousands of DGN files to DWG. We are using AutoCAD 2012. Is it possible to batch convert dgn files with a LISP and a mapping file?
I have a list that is "acl", I would like to convert it to a string "acl", everything that I have read uses alot of code. Does this really take that much code to do?
I have searched the web and the Autodesk Discussion Group for a LISP Routine that allows me to convert all attributes in a drawing to Layer 0 but i have had no luck. It would be great if the LISP could edit xrefs as well although not sure if this is possible.
**BATTMAN command will take too long for the hundreds of blocks, xrefs and drawings i need to edit.
I wrote code for an application that stores links to lines and blocks in dictionaries using handles. The routines work well and I can manipulate the data marvelously, but if one of the lines or blocks get erased the whole danged opera falls apart. I knew this when I wrote the routines and have always been careful about using the ERASE command, as a matter of fact, I considered disabling it.
I am trying to make the package more robust. I have been experimenting with attaching a reactor (:vlr-erased) to the objects which fires when the object is erased. Unfortunately it fires before I can retrieve the handle of the object so that I can remove the references from the dictionaries. The only thing that I can retrieve once ERASE fires is the ObjectID. I can't seem to find a Visual Lisp routine to convert this value to a handle, does one exist? Is there an ObjectID collection that has any references in it?
I am trying to finalize a routine which extracts attributes (created in all CAPS) from a drawing, does a bit of list handling and then will finally write each item of that list to its own line out to a TXT file.
I've had a request from an end-user to change the case of the words in the TXT file from all UPPERCASE to having each Word Capitalized Within Each Item :