Jump to content

Leaderboard

  1. mhupp

    mhupp

    Trusted Member


    • Points

      23

    • Posts

      2,256


  2. BIGAL

    BIGAL

    Trusted Member


    • Points

      22

    • Posts

      20,119


  3. pkenewell

    pkenewell

    Community Member


    • Points

      17

    • Posts

      796


  4. SLW210

    SLW210

    Moderator


    • Points

      15

    • Posts

      11,642


Popular Content

Showing content with the highest reputation since 05/24/2026 in all areas

  1. I've now updated this program to support resetting components of the incrementing string back to a given value with a given frequency - the latest version can be downloaded from my site: https://lee-mac.com/numinc.html
    7 points
  2. As usual this was born out of necessity. Had a 46Mb pdf , no tools on work laptop to convert it because also no adobe (reader only). PdF was all images so AutoCad pdf attach / import won't work either. Have a (legal) tool on my own computer but pdf wouldn't fit through the mail because of IT limitations. We used to have something like One-drive / Sharepoint but also blocked now , so I wrote this app. It chops up pdf in to 10MB pieces (or any size you want) , it can also email them at the same time and at the other end of the line you can put the pieces back again with the same app. So if your IT department tries to make your life a living hell , hell , maybe this app can give you some relief. RlxSplit.lsp
    6 points
  3. Just to add something more from me, as I did try to understand this problem as much as I could back then when I was working on my solution. Boundary command probably uses Pixel-Based Areas (Boundary Fill) method, that's why you have to see whole area on your screen. You can google what that is and how it works, but it makes sense to me considering there is a precision problem depending on "zoom" level. As for Hatch, it works the same for "pick points" method (boundary command + add hatch for that polyline), but if you choose "select objects" then it works as completely different method (just math without graphics part) and that's why its more accurate in this example. It all depends what you have as starting variables and what you need in the end. If you can, and its not a problem to select all lines, then CBoundray function from post above will work okay. This works like the Hatch by selecting objects... Of course clicking just one point inside area is simpler and faster, but can give wrong result because of its limitation. And I don't think its an issue with Autocad, its just a method that has its limitation. And it actually works really good otherwise, if you think about it, considering how much zoomed out you have to be and have a short segment to get the error. For example I work with topology, and have area centroids, and I needed to work some analysis with polylines for certain areas. In 99% cases boundary command was good, but with large areas with small boundary segments (like in OP example) I had this problem and needed to avoid it.
    4 points
  4. @PaulyPHI Give this a try.SetPlineZ_Updated.lsp
    4 points
  5. @masao_8 Here is a solution for a simple single selection add and SHIFT-Select to remove. Perhaps this will give you a basis for starting: ;; Function to do a simple Select/Deselect using grread. ;; By PJK - 6/16/2026 (defun pjk-grread-Select (/ done en grl grc grv ss) (if acet-load-expresstools (acet-load-expresstools)) (setq ss (ssadd)) (princ "\nSelect to add objects or SHIFT+Select to remove from selection set: ") (while (not done) (setq grl (grread T 15 2) grc (car grl) grv (cadr grl) ) (cond ((= grc 3) (if (setq en (car (nentselp grv))) (if (acet-sys-shift-down) (progn (if (ssmemb en ss)(ssdel en ss)) (redraw en 4) ) (progn (ssadd en ss) (redraw en 3) ) ) ) ) ((= grc 2) (setq done (if (vl-position grv '(13 32)) T nil)) ) ((= grc 25)(setq done T)) ) ) (if (> (sslength ss) 0) (progn (foreach i (mapcar 'cadr (ssnamex ss))(redraw i 4)) ss ) nil ) )
    3 points
  6. ;;;You can call Master Leemac's code, but do not modify it (defun c:ttt(/ CPB NEW-PT OBJ PT) (c:cb) (setq cpb (entlast)) (setq pt (cdr(assoc 10 (entget cpb)))) (setq obj (vlax-ename->vla-object cpb)) (setq new-pt (vlax-3d-point (getpoint pt "\n Specify the new location"))) (vla-move obj (vlax-3d-point pt) new-pt) (princ) )
    3 points
  7. This has been talked before if I understood the problem correctly: https://www.cadtutor.net/forum/topic/61468-boundary-precision/ To create a boundary you have to have the whole area visible in your model, everything needs to be visible in display area So it has to do something with your "viewing resolution" (zoom), that's how command works. What is the limit I don't know, I never did tests like they did in topic mentioned above. But I also had the same problems with large areas like you posted, when I have one short line, or polyline segment, one of the boundary vertices would be wrong (bad precision). The solution for me was to create lisp working with regions, then convert region to polyline. When creating regions you don't need to see the whole area on your screen, you select the lines and its just pure math from there
    3 points
  8. @darshjalal Thanks for your program contribution. I don't want to take away for your obvious hard work, but I somewhat agree with @BIGAL. I have read the extensive comments that are very detailed and technical, but there is no summary of what it is used for, or how it is useful. For the casual LISP user, they would not understand the value in such a program. I think a simple paragraph would be help instead of blindly evaluating it. Your title does explain the purpose of the program, but it's too vague and some plain language on how the features are helpful would be nice - just a friendly critique
    3 points
  9. I have noticed the drop in posts in forums like Lisp, here, Autodesk and Theswamp, I think it's because people are using AI more to write code. Even I try AI now and again when stuck, it is successful some times. The most obvious here is when the AI code does not work help is asked for here. Maybe Admin could comment about number of posts say compared to 1 or 2 years ago ? Or is it that a lot of new users just don't ask for help ? I know I push for process improvement and have often tried to influence people into saving time but the majority just don't care. Any body else want to comment ?
    2 points
  10. I think the issue is more generational than anything else. In the forums I keep up with, including here, theswamp.org, and MikeHolt.com, I've noticed that most of the core group have been Boomers. As a whole, younger generations have seemed to visit to get help, but not stay to help others. [There are notable exceptions like Lee.] AI is being oversold. I've tried both Claude and ChatGPT for programming help with LISP. Neither has produced code that worked on the first pass for anything more than a trivial case. We're about even on times when I've had to point out syntax errors in AI code and times AI has found syntax errors in my code. AI is a great replacement for most search engines, but it is not all that great at writing code, at least on the free tiers. AI output is only as good as the instructions it is given. Writing good instructions is hard. AI and the dot com bubble have a lot in common. In five years I expect we will have fewer AI companies, mostly paid tiers, and lots of empty data centers.
    2 points
  11. I have mixed feelings about Clippy the AI , at least the one from Google , sure its fast and it can give some relevant answers but you have to double check everything. I am trying to create a dcl editor. Wasn't sure where to start so asked Clippy and it gave me some good ideas on where to begin. But as things got complexer it really started to mess things up. And every time you use it you need to explain every thing all over again because at least the free / unregistered version remembers (saves) nothing . But I learned from my mistakes and started to write a very extensive manual so next time I can upload that so we can better pick up from where we started. My biggest concern is that it creates a black box. You ask something , it gives you something back and you paste and test the code , great , moving on to next part. After a while you end up with a bunch of working code until it doesn't any more and that's where the trouble begins and you notice you have lost your grip on the code because Clippy did it all for you. Like your daddy did all your homework for you and you have to take the exam and ...oops , daddy aint around now is he?
    2 points
  12. There is no doubt that AI is replacing (and will do so even more in the future) the need to interact with something or someone in order to find ideas and the motivation to pursue them. I don’t know which AI tools are the best for programming (I’ve only used Chatgpt so far), but my experience has been positive in terms of how stimulating it is to have someone to discuss ideas with and refine them while solving problems. This was something that, in the past, could only be found in forums like this one. However, the code suggested by Chatgpt is almost always lengthy and often fails. I suppose that will change over time.
    2 points
  13. I also think that its AI, especially for new users. I mean AI is good at coding or spotting errors and asking an AI often gets you an answer way faster than starting a forum post. For example here is a chart of stack overflows posts
    2 points
  14. I would maybe start again, if you look at this https://www.lee-mac.com/polyinfo.html it will find arcs etc in plines So if you want to label Lines, Arcs, Circles and Plines, you may need different code that looks at each entiity and correctly labels. I had a quick google and found a few programs I know that Kent Cooper has something similar to Lee's, but labels each segment. Search also "forums/autodesk".
    2 points
  15. @mhupp I use Bricscad V25 and it did not work ? Old name stayed there did I miss a step. I tried old fashioned method, it may not be the best solution, if block has attributes then could add a extra sub function to copy the existing values to the new inserted block. Also wants a "Does block exist check". ; https://www.cadtutor.net/forum/topic/99155-insert-a-copy-of-the-block-at-the-specified-point-copyrenameblockv1-5lsp-lee-mac/ ; rename a existing block to a new name ; By AlanH June 2026 (defun c:AHRenblk ( / attreqold bname ent entg inspt oldangdir oldangunits rot scx scy) (setq attreqold (getvar 'attreq)) (setq attreq 0) (setq oldangunits (getvar 'aunits)) (setvar 'aunits 3) (setq oldangdir (getvar 'angdir)) (setvar 'angdir 0) (setq ent (car (entsel "\nPick block to rename "))) (setq entg (entget ent)) (setq bname (cdr (assoc 2 entg))) (setq inspt (cdr (assoc 10 entg))) (setq scx (cdr (assoc 41 entg))) (setq scy (cdr (assoc 42 entg))) (setq rot (cdr (assoc 50 entg))) (setq newname (getstring T "\nenter new block name ")) (command "Bedit" bname "Bsaveas" newname "N" "Bclose" "S") (command "erase" ent "") (command "-insert" newname inspt scx scy rot) (setvar 'aunits oldangunits) (setvar 'angdir oldangdir) (princ) ) (c:AHRenblk) Yes will see flash on screen as Bedit is called.
    2 points
  16. A few i had laying around ;;----------------------------------------------------------------------------;; ;; ZOOM TO OBJECT AND OUT 5% (defun C:ZZ (/ SS) (if (setq SS (ssget)) (progn (vl-cmdf "_.Zoom" "OB" SS "") (vl-cmdf "_.Zoom" "0.95x") ) ) ) ;;----------------------------------------------------------------------------;; ;; ZOOM TO OBJECT THEN OUT 25% (defun C:ZX (/ SS) (if (setq SS (ssget)) (progn (vl-cmdf "_.Zoom" "OB" SS "") (vl-cmdf "_.Zoom" "0.75x") ) ) )
    2 points
  17. Yes, I tend to zoom object then zoom out another 10%, catches most things
    2 points
  18. If it can be fixed with zooms then you can record the current zoom, zoom object, make the boundary and zoom back 'current' zoom - I think that method is online somewhere to copy / paste else can find it on Monday if needed.
    2 points
  19. Idk about that this is a super simple lisp that will allow you to select multiple entites. But if they aren't within the fuzz distance of each other they wont connect. ;;----------------------------------------------------------------------------;; ;; Copy Boundary Entities to join as a single polyline fuzz is 0.1 units ;; https://www.cadtutor.net/forum/topic/99146-boundary-command/ mhupp:06/04/26 (defun C:CBoundray (/ ss ss1 obj) (setq ss1 (ssadd)) (while (setq ss (ssget '((-4 . "<OR") (0 . "LINE") (0 . "ARC") (0 . "LWPOLYLINE") (-4 . "OR>")))) (foreach obj (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) (vla-copy obj) ) (command "_.PEDIT" "_M" ss "" "_J" "0.1" "W" "0" "") ) (princ) )
    2 points
  20. It's supposed to use the HPGAPTOL as far as I know. This has been an issue for sometime, now that I looked back into from a few years ago, this problem also occurs with Hatch command. I just tried Boundary and Hatch on a closed polyline object at Zoom Extents and got ... And despite the first instruction, Zooming In resolved the issue. I normally resolve this with Hatch by using Select Object, maybe Hatch, Select Object, delete the Hatch and keep the Boundary could work for the OP. @lastknownuser's post brought it back to my memory. There is a thread around from a while back on this issue and needing to use Select Object option for Hatch.
    2 points
  21. Was reading up on this too. apparently AutoCAD boundary command doesn't have a tolerance setting but BricsCAD does. That is why people opt to use hatching and then you can create the boundary from the hatch. and then delete the hatch. I'm confused since their isn't a gap/vertex at that location.
    2 points
  22. There was a post a couple of years ago now, if it is a closed shape without crossing lines, hatching the area then recreate the boundary and delete the hatch leaves the boundary... as a last resort since it is long winded way to go. I haven't had time this week to look at this properly - you're in safe hands with the other posters though... (The post I am thinking about was using LISP to do something, click in the area to get boundary, might have been to measure area, perimeter or something but that was the idea behind it, LISP is ok if it is a bit long winded, fractions of a second longer process)
    2 points
  23. @Danielm103, I'm on rev. 8.9.3 so does not apply to me. Thanks for the warning nonetheless. ymg
    2 points
  24. if Nothing else it would show up in peoples searches. just posting a file even tho it has great documentation will not show up in searches. if you take all the time to write things up and share here make it so people can find your lisp files. or just copy all the ;; lines. someone in 6 months to a year will post looking for a divide lisp with points and I won't be able to find this post. -Edit like you did here
    2 points
  25. If your offering something a good idea is to provide images or a movie about what the program does, else the "Why bother" will occur. Just attaching a lisp is not really describing why you should download the program. Think of it as if I was selling the program how would I get people interested.
    2 points
  26. @rlx Your Kung-Fu is Strong! Nice work!
    2 points
  27. Haven't checked in a while, but we can't receive any .zip, .rar, etc. in emails here, but can send them, which is useless if sending internally. They had some ridiculously low email attachment file sizes when I first came here, I got them to go to 10MB, that's most likely what it is now. I put large files to share on the network and send a link (which IT has it where it cannot be clicked on), either they figure out how to get it or they don't. Being retirement age has it's perks.
    2 points
  28. Reminds me of when I had to move a file before networking or USB drives. had to use winrar and split up the zip file between 12 floppy disks! Was curious and it only took 17 lines of code in python lol minus the emailing and join parts.
    2 points
  29. @darshjalal Nice work! Your added Automatic mode, and the code to strip numbers out of the text is over and above!
    2 points
  30. @PaulyPHI Here is a quick walk-though: This uses Visual LISP to pull the text string from the selected object and convert it to a real number. See the added comments below. (if (and ;; Logical AND = All conditions must be met. ;; 1) an object must be selected. (setq es (entsel "\nSelect Text Object: ")) ;; 2) The selected object must have a text string property, i.e. TEXT, MTEXT, ATTRIBUTE, MLEADER, etc. (vlax-property-available-p (vlax-ename->vla-object (car es)) 'TextString) ;; 3) Retrieve the textsting value if the above conditions are met. (setq newZ (vla-get-textstring (vlax-ename->vla-object (car es)))) ;; 4) The textstring value must evaluate to greater than 0 when converted to a real number. This only works if the text is numerical. (> (setq newZ (distof newZ)) 0.0) ) ;; if all conditions are met, then continue to the (progn) block that performs the changes.
    2 points
  31. Welcome. To make a cleaner look I would make a master Chart (or multiple BH SW MW or by area with a box around them) with all the relative call outs. this would allow a larger view of the area. eliminate the use/need of leaders that aren't really doing anything but cluttering the drawing. -edit Then updating would be adding borehole location and adding to the chart.
    2 points
  32. Don't know what is going on about Textexp but here is a favour for you. I just made A-Z 0-9 exploded. Convert to correct plines then can extrude into a solid say 1 unit high, will need to check the 36 shapes. The sample dwg really needs more thought say text size =1 and height equal say 0.1. It took about 10 minutes to make these. With a bit of practice much faster and use other fonts. You can use presspull to change height. BUT SET TEXT HEIGHT CORRECT BEFORE EXTRUDE. Oh yeah why do you have units set to Architectural when your talking mm ? new block.dwg
    2 points
  33. Ok I used Txtexp on "MACEY", then went to a 3d view so could see what was going on VPOINT -1,-1,-1. You have to check that all the objects that appear are plines I had to join the little "A" triangle. Ok extruded the base 1.5 Extruded the circles 2.5, then unionid both, to base, subtracted the inner circle from the new solid. Extruded the ""M" 4.5 then did a union again. Extruded the two parts of the "A" unioned together with base then subtracted the inner triangle, You can see the progress. What you want is not a single step but rather multiple steps, lastly can export the STL file. Once you get the hang of extruding, subtrcat and union you can do multiple objects at one time. This is a bit rough as a solid and can be done better, by moving the text to a Z matching base height before you start.
    2 points
  34. PETA-INSERT ELEVATIONS FROM TEXTS INSIDE THE CLOSED OR OPEN POLYINE.LSP Try this one too
    2 points
  35. Incremental Numbering Suite Version 4.0 Released. The main feature of the new version is the introduction of a dedicated 'Content Builder' to facilitate the construction of an incrementing string from an arbitrary number of incrementing and/or static components. With this feature, the user now has the ability to independently control the increment amount and increment frequency for each component of the string, enabling multiple sections of the string to increment by different amounts and at different rates to one another. The new version also introduces the ability to load & save application configurations, streamlining the operation of the program for multiple numbering systems.
    2 points
  36. Having a bit of spare time, I thought I would make a hatch pattern similar to the OS marsh block marsh1.pat
    2 points
  37. My thought was I would be able to edit font and change text when needed but obviously I was wrong...lol
    1 point
  38. That was nice of you, but what if they need a font change. While it is possible to quickly do the 3D texts in AutoCAD, it is much better to learn to add it with the 3D Printer software, easy changes and adjustments. Just look at the YouTube video I linked in my previous post. No doubt learning to do 3D Text in AutoCAD is going to take some work and practice since you have to start a new to make font changes. Though with proper planning, it works OK. how to make 3d text in autocad | 3d text in autocad
    1 point
  39. I think you just need to practice creating 3d objects more, you need to look at how Extrude, Union, Subtract, Presspull work. one thing you need to do in this task is take advantage of extrude in -ve direction. so the base goes down, but all the rest get extruded up with correct height. Anyway you have something now so can scale a character and use presspull to change its height. Make sure your in a 3d view when using presspull to change height as must pick top face edge. Just a comment I did every character one at a time to make sure I did them correct.
    1 point
  40. Like I stated, I still like leaning on AutoCAD for making things for the 3D printer, but also learning Blender and playing with TinkerCAD, etc. The main goal is getting nice 3D Prints, I can tell you from experience, the stuff you get from online, supposedly ready to print, sometimes needs a little tweaking or outright re-modeled. I also have been learning to work in the 3D printer software, in my case, Bambu Studio, it's a lot easier cleaning up, scaling, adding text, etc. right before slicing. Like anyone that uses tools to do a job, learning what tools to use, how to use them, when to use what, etc. is usually the best way to go forward, it's a learning process. By all means start with AutoCAD and improve, we are here to help. Do you know how to export to STL and import that into your slicer?
    1 point
  41. I messed around a little with tinker cad but figured since I already had some knowledge of AutoCAD that it would probably be more useful to stick with AutoCAD. as I mentioned above, I just started learning AutoCAD in November of last year through Penn Foster (don't hold that against me. I'm basically teaching myself at this point with the help of you fellas).
    1 point
  42. Well, I just started learning AutoCAD in November of last year through Penn Foster (don't hold that against me. I'm basically teaching myself at this point with the help of you fellas). I didn't realize you could set the text height BEFORE you press pull. I just started the press/pull then typed the number I want. As far as architectural, I'll be honest, that's all we used when I was in college so that's all I really know
    1 point
  43. Did you try doing these in TinkerCAD? Not sure why your have issues with exploding the text in AutoCAD, I'll look when I get back to work tomorrow. Even as you describe it "When I tried txtexp it shot the text way off to the left and made it huge", you just have to move it and scale it. What you really want to do is learn to do this with the 3D Printer tools. https://www.youtube.com/watch?v=9McpK4nNf2k
    1 point
  44. Thank you very much sir, works perfect. I have compared the modified text file to the original and my brain just melted.... i can see some text that makes sense but the rest is just gobldee goop to me.... I'm just not programmed to understand it... Thank you once again.
    1 point
  45. Sorry it took so long to get back. I never got notifications that there were any replies. OK, so maybe I'm missing something here and ChatGPT and Gemini are of zero help so far. I have this drawing. I'm trying to make a 3d printed ATV number plate. Extrude absolutely won't work for me, not sure why. I was able to use the "presspull" command to punch out the holes (which I don't believe is the correct way) and I can raise the plate up the 3mm I want and the support around the holes the additional 1mm I want but it absolutely won't do anything with the text. I tried MTEXT and single line text. Neither works My printer is a FlashForge AD5X Mark Macey Rear Plate.dwg
    1 point
  46. What 3D printer do you have? I just recalled, there used to be an APP at the Autodesk APP store, but no longer there, works on older AutoCAD, but it is also posted here at CADTutor and the Swamp. I use Bambu Labs and it comes with Bambu Studio which has a 3D Text that is very easy, I can do a custom name plate with text directly on the machine.
    1 point
  47. Can you post a .dwg? You might give the FREE Autodesk TinkerCAD, I barley have looked at it lately, but IIRC it does a great job with 3D Text creation. But, like you I tend to use AutoCAD and Blender to make objects for the 3D Printer.
    1 point
  48. "Why Use TXTEXP? 3D Extrusion: Converts text into line/polyline paths that you can use the EXTRUDE command on." So to use extrude you must have closed shapes it can take a few minutes to properly close the exploded text. When using extrude you should set a height that you want.
    1 point
  49. I used SSX to select all objects on the layer "SURVEY NO BOUNDARY". As long as "Optimize segments within polylines" is checked Overkill will fix the existing polylines. As Eldon said "If you run Overkill first, then Extrim will work. But it will only trim the lines crossing the rectangle." It's a routine for trimming not erasing. I use EraseOutsideBoundary to both trim & erase outside: ;| Function to trim objects inside selected boundaries (allows for multiple boundaries) Boundaries can be "Circle, Ellipse, LWPolyline and Polyline" Entities Written By: Peter Jamtgaard Copyright 2015 All Rights Reserved ^C^C^P(or C:BoundaryTrim (load "BoundaryTrim.lsp"));BoundaryTrim EraseOutsideBoundary added by Tom Beauford ^C^C^P(or C:EraseOutsideBoundary (load "BoundaryTrim.lsp"));EraseOutsideBoundary ==============================================================================|; ;(defun C:BT ()(c:BoundaryTrim)) (defun C:BoundaryTrim (/ acDoc intCount ssBoundaries) (if (setq ssBoundaries (ssget (list (cons 0 "Circle,Ellipse,LWPolyline,Polyline")))) (progn (vla-startundomark (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))) (repeat (setq intCount (sslength ssBoundaries)) (setq intCount (1- intCount)) (BoundaryTrim (ssname ssBoundaries intCount)) (BoundaryWindowErase (ssname ssBoundaries intCount)); <-Erase objects inside boundary optional ) ) ) (if acDoc (vla-endundomark acDoc)) ) ; Command line function to select objects that are windowed by a selected circle. (defun C:BoundarySelect (/ lstPoints objBoundary ssBoundary) (if (and (setq ssBoundary (ssget ":E:S" (list (cons 0 "Circle,Ellipse,LWPolyline,Polyline")))) (setq objBoundary (vlax-ename->vla-object (ssname ssBoundary 0))) (setq lstPoints (SegmentPoints objBoundary 360)) ) (and (setq ssSelections (ssget "_WP" lstPoints)) ) ) ) ; Function to trim linework inside a boundary entity (defun BoundaryTrim (entBoundary1 / lstPoints entBoundary1 entBoundary2 lstCenter lstPoints1 lstPoints2 objBoundary1 objBoundary2 ssBoundary *Error*) (defun *Error* () (setvar "cmdecho" intCMDEcho) ) (setq intCMDEcho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq objBoundary1 (vlax-ename->vla-object entBoundary1)) (setq lstPoints1 (SegmentPoints objBoundary1 360)) (setq lstCenter (mapcar '(lambda (X)(/ (apply '+ X) (length lstPoints1)))(transposematrix lstPoints1))) (vl-cmdf "offset" (/ (distance (car lstPoints1) lstCenter) 36.0) entBoundary1 lstCenter "") (setq entBoundary2 (entlast)) (setq objBoundary2 (vlax-ename->vla-object entBoundary2)) (setq lstPoints2 (SegmentPoints objBoundary2 360)) ) (progn (vl-cmdf "trim" entBoundary1 "" "f") (foreach lstPoint lstPoints2 (vl-cmdf lstPoint)) (vl-cmdf "" "") (entdel entBoundary2) (vl-cmdf "redraw") (setvar "cmdecho" intCMDEcho) ) ) ) ; Function to trim linework outside a boundary entity (defun TrimOutsideBoundary (entBoundary1 / lstPoints entBoundary1 entBoundary2 lstCenter maxpt lstPoints1 lstPoints2 objBoundary1 objBoundary2 ssBoundary *Error*) (defun *Error* () (setvar "cmdecho" intCMDEcho) ) (setq intCMDEcho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq objBoundary1 (vlax-ename->vla-object entBoundary1)) (setq lstPoints1 (SegmentPoints objBoundary1 360)) (setq lstCenter (mapcar '(lambda (X)(/ (apply '+ X) (length lstPoints1)))(transposematrix lstPoints1))) (setq maxpt (list (1+ (car (getvar 'extmax)))(1+ (cadr (getvar 'extmax)))(1+ (caddr (getvar 'extmax))))) (vl-cmdf "offset" (/ (distance (car lstPoints1) lstCenter) 200.0) entBoundary1 maxpt "") (setq entBoundary2 (entlast)) (setq objBoundary2 (vlax-ename->vla-object entBoundary2)) (setq lstPoints2 (SegmentPoints objBoundary2 360)) ) (progn (vl-cmdf "trim" entBoundary1 "" "f") (foreach lstPoint lstPoints2 (vl-cmdf lstPoint)) (vl-cmdf "" "") (entdel entBoundary2) (vl-cmdf "redraw") (setvar "cmdecho" intCMDEcho) ) ) ) ; Function to erase linework inside a boundary entity (defun BoundaryWindowErase (entBoundary / lstPoints objBoundary ssSelections) (if (and (setq objBoundary (vlax-ename->vla-object entBoundary)) (setq lstPoints (SegmentPoints objBoundary 360)) (setq ssSelections (ssget "_WP" lstPoints)) ) (and (setq ssSelections (ssget "_WP" lstPoints)) (vl-cmdf "erase" ssSelections "") ) ) ) ; Function to determine the points along a curve dividing it intSegments number of times (defun SegmentPoints (objCurve intSegments / sngSegment intCount lstPoint lstPoints sngLength sngSegment) (if (and (setq sngLength (vlax-curve-getdistatparam objCurve (vlax-curve-getendparam objCurve))) (setq sngSegment (/ sngLength intSegments)) (setq intCount 0) ) (progn (repeat (1+ intSegments) (setq lstPoint (vlax-curve-getpointatdist objCurve (* intCount sngSegment))) (setq lstPoints (cons lstPoint lstPoints)) (setq intCount (1+ intCount)) ) lstPoints ) ) ) ; Function to Transpose a matrix (defun TransposeMatrix (lstMatrix) (if (car lstMatrix) (cons (mapcar 'car lstMatrix) (TransposeMatrix (mapcar 'cdr lstMatrix)) ) ) ) ; Function to erase linework outside a boundary entity (defun C:EraseOutsideBoundary ( / ss1 n ssBoundary objBoundary lstPoints ssSelections entSelection) (vla-startundomark (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))) (setq ss1 (ssget "_X" '((67 . 0))) n -1) (if (and (setq ssBoundary (ssget ":E:S" (list (cons 0 "Circle,Ellipse,LWPolyline,Polyline")))) (setq entBoundary (ssname ssBoundary 0)) (ssdel entBoundary ss1) (TrimOutsideBoundary entBoundary) (setq objBoundary (vlax-ename->vla-object entBoundary)) (setq lstPoints (SegmentPoints objBoundary 360)) ) (and (setq ssSelections (ssget "_CP" lstPoints)) (repeat (sslength ssSelections) (setq entSelection (ssname ssSelections (setq n (1+ n)))) (if(ssmemb entSelection ssSelections)(ssdel entSelection ss1)) ) (command "erase" ss1 "") ) ) (if acDoc (vla-endundomark acDoc)) )
    1 point
×
×
  • Create New...