All Activity
- Past hour
-
Good morning, I found this website searching for tutorials to guide me on this Structural Drafting assignment with Penn Foster. I have read through a few of the current threads, and some were helpful, but with visuals being shared that are not correct vs a lack of what it should look like, I am still lost. I wish I had known about this website during Oelson Village, I did pass that with a B on that one. However, that was easier for two reasons.. it is my daily life working with architectural plans for custom homes, so a site plan was not a stretch for me, and also it gave me a visual/goal to finish towards. I could auto-correct myself from step-by-step directions that left quite a bit out. Now I am onto the Structural Drafting assignment and am struggling more.. I was able to get to the point (of my attached images) due to some visuals and threads previously posted on here. However, when I switch to side (3D) views, it looks way off, and I am failing to see how this is all going to connect. Can anyone help me by showing me a visual of the end product that I am building..(I do not want the file, I want to build this and learn.) but a end visual of the front/side of what I am turning in helps. Or am I too soon into the steps, and should not freak out because it will all come together further along? Am I missing clear aspects like 3D measurements..details that are keeping these girders/beams I have built not architecturally correct. Please let me know if I am missing a key dimension, where I should enter that. I am taking a course to learn AutoCAD, but being asked to jump into 3D structual building after only ever doing a site plan in AutoCAD is rough. I get it..I learned a lot in the Oelson Village assignment, just by being thrown into it, but this Structural Drafting assignment is confusing for me. Thank you in advance to anyone jumping in, and sorry if you are repeating yourself. It is easy to get lost in other threads and go down a rabbit hole.
- Today
-
So, are there no alternatives to BIGAL's suggestion to use PowerToys? The problem with PowerToys is that it doesn't work with Windows 7 or some versions of Windows 10. I think this is a drawback for some users.
-
I've discovered that PowerToys doesn't work with Windows 7 or some versions of Windows 10. This is a problem for me.
-
Looking for a LISP to evenly space polylines from their end points
Saxlle replied to Tamim's topic in AutoLISP, Visual LISP & DCL
Nice @BIGAL . If you don't mind, I added a few lines of code to yours to make it work properly. ; https://www.cadtutor.net/forum/topic/98797-looking-for-a-lisp-to-evenly-space-polylines-from-their-end-points/ ; paralelle lines change ; offset a pline by an amount ; by AlanH Nov 2025 (defun c:wow ( / co-ord len1 len2 lst off off2 pt1 pt2 pts) ; Checking if pline is CW or CCW and set to CCW ; Orignal idea by Kent Cooper, 1 August 2018 Offsetinorout.lsp ; Modified By Alan H July 2020 (defun AH:chkcwccw ( ent / area1 area2 dist obj objnew pointmax pointmin) ;; remove "lst" from local variables (setq obj (vlax-ename->vla-object ent)) (setq lst (vlax-get obj 'coordinates)) (vla-GetBoundingBox obj 'minpoint 'maxpoint) (setq pointmin (vlax-safearray->list minpoint)) (setq pointmax (vlax-safearray->list maxpoint)) (setq dist (/ (distance pointmin pointmax) 20.0)) (vla-offset obj dist) (setq objnew (vlax-ename->vla-object (entlast))) (setq area1 (vlax-get objnew 'Area)) (vla-delete objnew) (vla-offset obj (- dist)) (setq objnew (vlax-ename->vla-object (entlast))) (setq area2 (vlax-get objnew 'Area)) (vla-delete objnew) (if (> area1 area2) (progn (command "pedit" ent "R" "") (setq lst (vlax-get obj 'coordinates)) ) ) lst ;; added this line to get a list of coordinates as "output" (princ) ) (defun replace-nth (lst n newVal) (cond ((null lst) nil) ((= n 0) (cons newVal (cdr lst))) (T (cons (car lst) (replace-nth (cdr lst) (1- n) newVal)))) ) (setq oldsnap (getvar 'osmode)) (setvar 'osmode 0) (setq off (getreal "\nEnter offset value ")) (while (setq pt1 (getpoint "\nPick 1st point outside ")) (setq pt2 (getpoint pt1 "\nPick 2nd point inward ")) (setq off2 (/ off 2.0)) (setq pts (list pt1 pt2)) (setq ss (ssget "F" pts '((0 . "LWPOLYLINE")))) (repeat (setq x (sslength ss)) (setq plent (ssname ss (setq x (1- x)))) (AH:chkcwccw plent) (setq len1 (distance (list (nth 0 lst)(nth 1 lst)) (list (nth 2 lst)(nth 3 lst)))) (setq len2 (distance (list (nth 4 lst)(nth 5 lst))(list (nth 6 lst)(nth 7 lst)))) (if (> len1 len2) (progn (setq lst (replace-nth lst 0 (+ (nth 0 lst) off2))) (setq lst (replace-nth lst 2 (+ (nth 2 lst) off2))) (setq off2 (+ off2 off)) ) (progn (setq lst (replace-nth lst 6 (- (nth 6 lst) off2))) (setq lst (replace-nth lst 4 (- (nth 4 lst) off2))) (setq off2 (+ off2 off)) ) ) (vlax-put (vlax-ename->vla-object plent) 'coordinates lst) ;; added here "(vlax-ename->vla-object plent)" instend of "obj" ) ) (setq lst nil) ;; added this line of code to "release" variable "lst" (setvar 'osmode oldsnap) (princ) ) Best regards. -
As for the code from my first attempt, I suppose the least I should do for any “child of mine” is to make sure it can have a functional life, no matter how cross-eyed it was born: you never abandon a child. So here I leave a new version of “GLAVCVS’ cross-eyed child”, fresh out of the hospital. ;| G L A V C V S C R O S S - E Y E D C H I L D - o - ************************* G L A V C V S ************************* *************************** F E C I T ***************************|; (defun c:creAxis (/ e e1 e2 l i? l1 l2 lr p p0 p1 p2 px pm abis lii pmi pmf pi1 pi2 pf1 pf2 pc1 pc2 li1 o dameInters+Prox ordena decide sustituye damePuntos) (defun dameInters+Prox (p0 a lp / p1 px pt1 pt2 dmin d pf) (setq pt1 (polar p0 a 1e8) pt2 (polar p0 (+ a PI) 1e8)) (foreach p lp (if p1 (if (setq px (inters pt1 pt2 p1 p)) (if dmin (if (< (setq d (distance px p0)) dmin) (setq dmin d pf px)) (setq dmin (distance px p0) pf px)) ) ) (setq p1 p) ) pf ) (defun ordena (po px pm / p0 lr) (foreach p lii (if (and p0 (inters po px p0 p)) (setq lr (append lr (list pm))) ) (setq p0 p lr (append lr (list p))) ) ) (if (and (setq e1 (car (entsel "\nSelect FIRST LWPOLYLINE..."))) (= (cdr (assoc 0 (setq l1 (entget e1)))) "LWPOLYLINE") (not (redraw e1 3))) (if (and (setq e2 (car (entsel "\nSelect SECOND LWPOLYLINE..."))) (= (cdr (assoc 0 (setq l2 (entget e2)))) "LWPOLYLINE") (not (redraw e2 3))) (progn (setq lp1 (reverse (foreach l l1 (if (= (car l) 10) (setq lr (cons (cdr l) lr)) lr))) lr nil lp2 (reverse (foreach l l2 (if (= (car l) 10) (setq lr (cons (cdr l) lr)) lr))) lr nil ) (cond ((= (rem (cdr (assoc 70 l1)) 2) 1) (setq lp1 (append lp1 (list (car lp1) (cadr lp1) (caddr lp1)))) ) ((equal (car lp1) (last lp1)) (setq lp1 (append lp1 (list (cadr lp1) (caddr lp1)))) ) (T (setq pmi (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (car lp1) (setq pc1 (vlax-curve-getClosestPointTo e2 (car lp1)))) pmf (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (last lp1) (setq pc2 (vlax-curve-getClosestPointTo e2 (last lp1)))) ) ) ) (cond ((= (rem (cdr (assoc 70 l2)) 2) 1) (if pmi (progn (foreach p (append lp2 (list (car lp2))) (if (or (equal p pmi 1e-4) (equal p pmf 1e-4)) (setq l (if l (not (setq lr (append l (list p)))) (list (list p)))) (if l (setq l (append l (list p)))) ) ) (setq lp2 lr lr nil l nil) ) (setq lp2 (append lp2 (list (car lp2) (cadr lp2)))) ) ) ((equal (car lp2) (last lp2)) (if pc1 (progn (foreach p lp2 (if (or (equal p pc1 1e-4) (equal p pc2 1e-4)) (setq l (if l (not (setq lr (append l (list p)))) (list (list p)))) (if l (setq l (append l (list p)))) ) ) (setq lp2 lr lr nil l nil) ) (setq lp2 (append lp2 (list (cadr lp2)))) ) ) ) (redraw e1 4) (redraw e2 4) (foreach lp (list lp1 lp2) (foreach l lp (if p1 (if p2 (setq abis (+ (/ (+ (angle p1 p2) (angle p2 l)) 2) (/ PI 2.)) px (dameInters+Prox p2 abis (if o lp1 lp2)) lr nil pm (if px (mapcar '(lambda (a b) (/ (+ a b) 2.0)) p2 px)) lii (if o (if pm (ordena p2 px pm) lii) (if px (append lii (list pm)) lii)) p1 p2 p2 l ) (setq p2 l) ) (setq p1 l) ) ) (if pmi (setq lii (append (list pmi) lii (list pmf)))) (setq p1 nil p2 nil lr nil o T) ) ) ) ) (entmake (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbPolyline") (70 . 0) (60 . 0)) (list (cons 90 (length lii))) (mapcar '(lambda (a) (cons 10 a)) lii))) (princ) )
-
Hopefully I can get back to my LISP today. I did do some experiments with CENTERLINE command in newer AutoCAD (not sure when it was first available), if just Polylines/lines, it gets the center very accurately, good for checking a LISP IMO. This is really a job for Civil 3D/ArcGIS or similar software.
-
Sinchana joined the community
-
yekkite74 joined the community
-
I also think this thread has been stimulating. The final result should be useful for other users in the future. Regarding your approach, I agree; it's the best way to achieve an axis with perfectly centered segments. All that remains is to write the code that can do all of that without Express Tools.
-
Any one out there that Has LT2024+ etc can test the small bit of code that allows Excel to control CAD would like to know if it works.
-
Attributes be added to factor the outcome of Incremental numbers
BIGAL replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
Finally had some time to do something, give this a try. (defun c:numblk ( / atts bname ent grp lst lst2 num numstr obj ss) ; ; groupby provided by Dexus (defun _groupBy (fun lst / itm old rtn) (while lst (setq itm (fun (car lst)) rtn (if (setq old (assoc itm rtn)) (subst (cons itm (cons (car lst) (cdr old))) old rtn) (cons (cons itm (list (car lst))) rtn) ) lst (cdr lst)) ) (mapcar 'cdr rtn) ) (setq bname (cdr (assoc 2 (entget (car (entsel "\nPlease slect a block for block name ")))))) (prompt "\nPlease select blocks") (setq ss (ssget (list (cons 0 "INSERT")(cons 2 bname)))) (setq lst '()) (repeat (setq x (sslength ss)) (setq ent (ssname ss (setq x (1- x)))) (setq obj (vlax-ename->vla-object ent)) (setq atts (vlax-invoke obj 'Getattributes)) (setq attext (vlax-get (nth 2 atts) 'textstring)) (setq lst (cons (list attext ent) lst)) ) (setq lst (vl-sort lst '(lambda (x y) (< (car x)(car y))))) (setq lst2 (reverse (_groupBy (lambda (e) (car e)) lst))) (setq num (getint "\nEnter start number eg 1 ")) (foreach grp lst2 (cond ((< num 10)(setq numstr (strcat "00" (rtos num 2 0)))) ((< num 100)(setq numstr (strcat "0" (rtos num 2 0)))) ((> num 99)(setq numstr (rtos num 2 0))) ) (foreach ent2 grp (setq obj (vlax-ename->vla-object (cadr ent2))) (setq atts (vlax-invoke obj 'Getattributes)) (vlax-put (nth 1 atts) 'textstring numstr) ) (setq num (1+ num)) ) (alert "Type numblk to run again ") (princ) ) (C:numblk) - Yesterday
-
Looking for a LISP to evenly space polylines from their end points
BIGAL replied to Tamim's topic in AutoLISP, Visual LISP & DCL
Another version just drag over the plines left and right. https://www.cadtutor.net/forum/topic/98797-looking-for-a-lisp-to-evenly-space-polylines-from-their-end-points/ ; paralelle lines change ; offset a pline by an amount ; by AlanH Nov 2025 (defun c:wow ( / co-ord len1 len2 lst off off2 pt1 pt2 pts) ; Checking if pline is CW or CCW and set to CCW ; Orignal idea by Kent Cooper, 1 August 2018 Offsetinorout.lsp ; Modified By Alan H July 2020 (defun AH:chkcwccw (ent / area1 area2 dist lst obj objnew pointmax pointmin) (setq obj (vlax-ename->vla-object ent)) (setq lst (vlax-get obj 'coordinates)) (vla-GetBoundingBox obj 'minpoint 'maxpoint) (setq pointmin (vlax-safearray->list minpoint)) (setq pointmax (vlax-safearray->list maxpoint)) (setq dist (/ (distance pointmin pointmax) 20.0)) (vla-offset obj dist) (setq objnew (vlax-ename->vla-object (entlast))) (setq area1 (vlax-get objnew 'Area)) (vla-delete objnew) (vla-offset obj (- dist)) (setq objnew (vlax-ename->vla-object (entlast))) (setq area2 (vlax-get objnew 'Area)) (vla-delete objnew) (if (> area1 area2) (progn (command "pedit" ent "R" "") (setq lst (vlax-get obj 'coordinates)) ) ) (princ) ) (defun replace-nth (lst n newVal) (cond ((null lst) nil) ((= n 0) (cons newVal (cdr lst))) (T (cons (car lst) (replace-nth (cdr lst) (1- n) newVal)))) ) (setq oldsnap (getvar 'osmode)) (setvar 'osmode 0) (setq off (getreal "\nEnter offset value ")) (while (setq pt1 (getpoint "\nPick 1st point outside ")) (setq pt2 (getpoint pt1 "\nPick 2nd point inward ")) (setq off2 (/ off 2.0)) (setq pts (list pt1 pt2)) (setq ss (ssget "F" pts '((0 . "LWPOLYLINE")))) (repeat (setq x (sslength ss)) (setq plent (ssname ss (setq x (1- x)))) (AH:chkcwccw plent) (setq len1 (distance (list (nth 0 lst)(nth 1 lst)) (list (nth 2 lst)(nth 3 lst)))) (setq len2 (distance (list (nth 4 lst)(nth 5 lst))(list (nth 6 lst)(nth 7 lst)))) (if (> len1 len2) (progn (setq lst (replace-nth lst 0 (+ (nth 0 lst) off2))) (setq lst (replace-nth lst 2 (+ (nth 2 lst) off2))) (setq off2 (+ off2 off)) ) (progn (setq lst (replace-nth lst 6 (- (nth 6 lst) off2))) (setq lst (replace-nth lst 4 (- (nth 4 lst) off2))) (setq off2 (+ off2 off)) ) ) (vlax-put obj 'coordinates lst) ) ) (setvar 'osmode oldsnap) (princ) ) (c:wow) -
mavigol joined the community
-
treconnghich88 joined the community
- Last week
-
C T joined the community
-
Curzon joined the community
-
I have enjoyed the discussion of this thread. As I gave the task more thought and anaysis it became more clear that the task was not simple. As it appears that there is still no satisfacory solution I thought I would offer the following. The first goal for me was to create a function that would create a midline between two non parallel lines. The mid-lines extents should be a function of the given line segments. This function could then be used in a program that would step through the line segments of one of the polylines and search the other polyline for relevant segments. The function "midline" accepts four points. The first two points, A1 and A2, are the ends of one line sement while the thrid and fourth points, B1 and B2, are the ends of an opposing ilne segments. The diagram below details the variables in the function. The program uses vectors as I prefer them over angles which present, for me, a variety of problems. uA = unit vector in the diection from A1 to A2 uB = unit vector in the direction from B1 to B2 uBisector = unit vector in the direction of the angle bisector of uA and UB The ends of the two lines are projected onto the bisecting line defining 4 points, A1M, A2M, B1M, B2M. I debated which of the points to output for the line to be drawn. I first used the closest and furthest points from the intersecttion point ABIntr but I found it more helpful to use the two intermediate points (A1M and A2M in the example above). Here's an example of the results after manually steppng alone the polyline. Looking at the area circled in red we find: To fill the gap we need a curve that starts with a radius of 0.1514 and ends with a radius of 0.1693. This can be done with a spline or you may find it acceptable to extend the two lines to the point of intersection. The best way to create the spline is to use the Control Vertex Method and use the two endpoints and the imaginary point of intersecton for the middle CV. This ensures tangency to the two lines. As can be seen below the distance to a random point along the spline (red) agree! Run the program "test" and specify the end points of a line segment on one of the polylines, then the endpoints on a line segment on the opposing polyline. I have found the results very accurate and although it may not be used for creating the complete "hybrid " polyline it is helpful in finding the correct line for a specific segment.
-
mhupp started following Notepad always on top of CAD
-
@JerryFiedler look at fanzy zone that is also part of powertoys. its the whole reason i got it when it first came out.
-
JerryFiedler started following Notepad always on top of CAD
-
@BIGAL This may not be what the OP was looking for but this is an extremely useful tool. Thanks for posting the link. I keep my CAD window "full" size from start to finish. I simply do not change it since doing so messes with the ribbon, toolbars, etc. I often want another "clip" of a spreadsheet or notepad text (lisp program or some other list) visible while actually working in the CAD window. This tool does exactly that. Thanks again Alan for posting the link.
-
My one should find the centre between the shortest lines from polylines point to the other... not perpendicular so should give a reasonably curve.
-
Vdietz joined the community -
VictoriaJ joined the community
-
rcaldas joined the community
-
And, VERY IMPORTANTLY, it should return the same result regardless of which reference polyline is processed first. In my opinion, this is the first requirement for the method to be consistent.
-
CosmoIV joined the community
-
15 years later I am annoyed by this effect too and This is one of the first links that shows up when searching for a solution. The system variable is MTextFixed. Changing it from 2 to 1 disables it.
-
Thank you @Steven P The problem with creating the centerline using perpendiculars is that even in straight sections, the centerline is not equidistant perpendicularly from the reference polylines (unless the reference polylines are parallel). This is the method I used manually, but I didn't achieve this goal.
-
Thanks @Steven P I guess you're right. Anyway, I'll try to keep this thread going a little longer to give others time to make their suggestions.
-
Steven P started following cannot print to pdf
-
We used to have a 3rd party PDF printer - it also worked with all the office applications for example. Worked just the same as adding any other physical printer, might be a solution. However I thought LT had a PDF plotter as a part of the package
-
I think you didn't understand the point of this thread because you're not familiar with the original post.
-
I looked at the Autodesk site and as far as I know only AutoCAD for MAC (LT) 2026 is compatible with Tahoe which was just released September 2025. Can you print to an image file, that may work, or just see if Fedex/Kinkos can print the drawing file.
-
Tamim started following Saxlle
-
Notepad++ is my preference which has lisp with customizable colors, words looks like vlide but without its diagnostics.
-
Oops again. Didn't know '@' is the same - my bad. Still the offset of it amazes me.
-
BTW this is also included without a command initialize, just wish I new what/how to access that as with (getvar 'lastpoint)
-
Is it for Windows 11?
