myself Posted October 9, 2008 Posted October 9, 2008 Hello there, here i am with another doubt that i hope to clarify with your help. How do i put a point at a certain distance along the length of a line, i mean, i have a curved line with curves to both side more less like a spline, and now i wanna put a point on that line on every 5m. i hope you understand what i mean, Thank you very much in advanced Quote
myself Posted October 9, 2008 Author Posted October 9, 2008 That is nice, but from what i got "measure" splits the line into equal segments but does not put the point at the precise distande i want... P.S-Sorry guys, thats just perfect for what i want thanks NBC Quote
NBC Posted October 9, 2008 Posted October 9, 2008 MEASURE puts a point (or a block) at specified distances along other entities. DIVIDE will put a point (or a block) at a specified number of segments along the entity. Quote
nocturne00 Posted October 9, 2008 Posted October 9, 2008 Try this LISP, similar what you want, you may also need to generate a point along your curve at a specific distance. aquired this code from ipseifer if i remember (defun c:xdiv(/ *error* cCurve curPt dPar dPt enPt fPar fPt maxLen obType oldDis oldOsn posDir rClose sFlag stPt sumDis swMod undoLst vClose whatDo) (vl-load-com) (defun asmi_GetActiveSpace(/ actDoc) (if (= 1(vla-get-ActiveSpace (setq actDoc (vla-get-ActiveDocument (vlax-get-acad-object) ); end vla-get ActiveSpace ); end setq ); end vla-get-ActiveDocument ); end = (vla-get-ModelSpace actDoc) (vla-get-PaperSpace actDoc) ); end if ); end of asmi_GetActiveSpace (defun RestorePointStyle() (if (and xdiv:oldPm xdiv:oldPs) (progn (initget "Yes No") (setq swMod (getkword "\nRestore point style? [Yes/No] <No>: ")) (if(null swMod)(setq swMod "No")) (if (= swMod "Yes") (progn (princ "\nPlease wait... \n") (setvar "PDMODE" xdiv:oldPm) (setvar "PDSIZE" xdiv:oldPs) ); end progn ); end if ); end progn ); end if (princ) ); end of RestorePointStyle (defun AddPointOrInsert(Mode Block Scale) (vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point curPt)) ); end of AddPointOrInsert (defun AddPointOrInsert(Mode Block Scale / outObj) (setq undoLst (append (list (list (setq outObj (vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point curPt))); end setq curPt xdiv:curDis ); end list ); end list undoLst); end append ); end setq outObj ); end of AddPointOrInsert (defun *error*(msg) (if cCurve (progn (vla-Highlight cCurve :vlax-false) (setvar "OSMODE" oldOsn) ); end progn ); end if (princ "\n*Cancel*") (princ) ); end of *error* (if (member (setq xdiv:oldPm(getvar "PDMODE")) '(0 1) ); end member (progn (setq xdiv:oldPs(getvar "PDSIZE")) (initget "Yes No") (setq swMod (getkword "\nChange points style to good visible? [Yes/No] <Yes>: ")) (if(null swMod)(setq swMod "Yes")) (if (= swMod "Yes") (progn (princ "\nPlease wait... \n") (setvar "PDMODE" 35) (setvar "PDSIZE" -2) ); end progn ); end if ); end progn ); end if (setq oldOsn (getvar "OSMODE")); end setq (if (not xdiv:curDis) (setq xdiv:curDis 1.0 xdiv:oldDis 1.0); end setq ); end if (if (setq cCurve (entsel "\nSelect curve > ")); end setq (progn (setq cCurve (vlax-ename->vla-object (car cCurve))); end setq (if (member (setq obType (vla-get-ObjectName cCurve)) '("AcDbLine" "AcDbPolyline" "AcDb3dPolyline" "AcDbSpline" "AcDbArc" "AcDbCircle" "AcDbEllipse") ); end member (progn (vla-Highlight cCurve :vlax-true) (setvar "OSMODE" 3071) (setq stPt (vlax-curve-GetStartPoint cCurve) enPt (vlax-curve-GetEndPoint cCurve) fPt (getpoint "\nPick start markup point at curve > ") ); end setq (if fPt (setq fPt(trans fPt 1 0) curPt(vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point fpt)); end vla-AddPoint undoLst (list (list curPt 0.0 0.0)); end list ); end setq ); end if (if (and fPt (setq fPar (vlax-curve-GetParamAtPoint cCurve fPt)) ); end and (progn (if (and (not(equal fPt stPt 0.0001)) (not(equal fPt enPt 0.0001)) ); end or (progn (setq dPt (getpoint fPt "\nPick point at curve to specify markup direction > ")) (if dPt (setq dPt(trans dPt 1 0))); end if (if (and dPt (setq dPar (vlax-curve-GetParamAtPoint cCurve dPt)) ); end and (progn ); end progn (princ "\nEmpty input or point not at curve! ") ); end if ); end progn ); end if ); end progn (princ "\nEmpty input or point not at curve! ") ); end if ); end progn (princ "\nInvalid object type! ") ); end if (setq maxLen (- (vlax-curve-GetDistAtPoint cCurve enPt) (vlax-curve-GetDistAtPoint cCurve stPt) ); end - rClose (vlax-curve-IsClosed cCurve) ); end setq (if(equal fPt stPt 0.0001) (setq vClose T) ); end if (if (or (equal fPt stPt 0.0001) (and dPar (> dPar fPar) ); end and ); end or (setq posDir T sumDis (vlax-curve-GetDistAtPoint cCurve fPt) ); end setq (setq sumDis (- maxLen (- maxLen (vlax-curve-GetDistAtPoint cCurve fPt))) ); end setq ); end if (while(not sFlag) (setq whatDo (getstring (strcat "\nSpecify distance or [undo/Quit] <" (if xdiv:curDis(rtos xdiv:curDis) "not defined") ">: "); end strcat ); end getstring ); end setq (cond ((or (= 'REAL(type(distof whatDo))) (= "" whatDo) ); end or (if(= "" whatDo) (setq xdiv:curDis xdiv:oldDis) (setq xdiv:curDis(distof whatDo)) ); end if (setq xdiv:oldDis xdiv:curDis); end setq (cond (posDir (setq sumDis (+ sumDis xdiv:curDis) curPt (vlax-curve-GetPointAtDist cCurve sumDis) ); end setq (if curPt (AddPointOrInsert nil nil nil) (princ "\n>>> End of line <<< ") ); end if ); end condition # 1 ((not posDir) (setq sumDis (- sumDis xdiv:curDis) curPt (vlax-curve-GetPointAtDist cCurve sumDis) ); end setq (if curPt (AddPointOrInsert nil nil nil) (princ "\n>>> End of line <<< ") ); end if ); end condition # 1 ); end cond ); end condition #1 ((=(strcase whatDo) "Q") (if (= 1(length undoLst)) (vla-Delete(caar undoLst)) ); end if (RestorePointStyle) (if cCurve (progn (vla-Highlight cCurve :vlax-false) (setvar "OSMODE" oldOsn) ); end progn ); end if (setq sFlag T) ) ((=(strcase whatDo) "U") (if (and undoLst (/= 1(length undoLst)) ); end and (progn (vla-Delete(caar undoLst)) (setq undoLst(cdr undoLst) curPt(cadar undoLst) sumDis(- sumDis (last (car undoLst))) ); end setq ); end progn (princ "\n>>> Nothing to undo <<< ") ); end if ) ); end cond ); end while ); end progn (princ "\nEmpty selection! ") ); end if (princ) ); end of xdiv Quote
lpseifert Posted October 9, 2008 Posted October 9, 2008 aquired this code from lpseifert if i remember Sorry to say I didn't write that code, ASMI gets all the credit. But you may want to try this pared down version instead. ;places point at specified station along a polyline, measured from start LPS 2008 (defun c:pop () (vl-load-com) (setq oldosnap (getvar "osmode")) (setvar "osmode" 0) (command "ucs" "w") (if (/= (getvar "pdmode") 3)(setvar "pdmode" 3)) (setq ob (entsel "Select curve: ")) (setq p2 (getreal "\n Specify Distance : ")) (setq obj (vlax-ename->vla-object (car ob))) (setq pt1 (vlax-curve-getPointAtDist Obj p2)) (command "Point" pt1) (command "ucs" "p") (setvar "osmode" oldosnap) (princ) ) Quote
NBC Posted October 9, 2008 Posted October 9, 2008 I may be missing the point here; but what does the codes in the posts do that the Measure command doesn't do ? Quote
lpseifert Posted October 9, 2008 Posted October 9, 2008 Puts one point on the curve at the specified distance. Quote
nocturne00 Posted October 9, 2008 Posted October 9, 2008 Sorry to say I didn't write that code, ASMI gets all the credit.[/code] well you shared it; thats credit enough for me. I use that LISP very often to locate a point along a road or pipe centerline and track its coordinates. Will try this new one,,, thanks again Quote
skipsophrenic Posted October 9, 2008 Posted October 9, 2008 lpseifert, sorry, just took a look at the code, and was just wondering does the line. ;end of pop need to be put in there at the end or am i being daft? (not know much about lisp yet) Quote
NBC Posted October 9, 2008 Posted October 9, 2008 Puts one point on the curve at the specified distance. Whilst that is a great option, and I'm not doubting the ability of the code to do what it should; i think it does not answer the OP's request of: , and now i wanna put a point on that line on every 5m Quote
lpseifert Posted October 9, 2008 Posted October 9, 2008 ;end of pop need to be put in there at the end or am i being daft? No it isn't necessary... in lisp anything after a ; is a comment Funny, I don't see ;end of pop in the above code.... Quote
skipsophrenic Posted October 9, 2008 Posted October 9, 2008 No it isn't necessary... in lisp anything after a ; is a commentFunny, I don't see ;end of pop in the above code.... no that's what i meant, i thought the code hadn't been closed, didn't realise ; ment comment, (Can a moderator please move my posts out of this thread and into their own please - don't want to highjack op's qestion/thread) Quote
nocturne00 Posted October 9, 2008 Posted October 9, 2008 Whilst that is a great option, and I'm not doubting the ability of the code to do what it should; i think it does not answer the OP's request of: Sorry totally my fault, just added that lisp as an alternative for this part of the question. "How do i put a point at a certain distance along the length of a line, i mean, i have a curved line with curves to both side more less like a spline" Quote
Arizona Posted October 10, 2008 Posted October 10, 2008 That is a sweet routine. It says "along a polyline" but it works on lines and arcs too. Thank You!! Quote
mhy3sx Posted Tuesday at 10:21 PM Posted Tuesday at 10:21 PM hi ,I know that the post is too old. I test xdiv code (defun c:xdiv(/ *error* cCurve curPt dPar dPt enPt fPar fPt maxLen obType oldDis oldOsn posDir rClose sFlag stPt sumDis swMod undoLst vClose whatDo) (vl-load-com) (defun asmi_GetActiveSpace(/ actDoc) (if (= 1(vla-get-ActiveSpace (setq actDoc (vla-get-ActiveDocument (vlax-get-acad-object) ); end vla-get ActiveSpace ); end setq ); end vla-get-ActiveDocument ); end = (vla-get-ModelSpace actDoc) (vla-get-PaperSpace actDoc) ); end if ); end of asmi_GetActiveSpace (defun RestorePointStyle() (if (and xdiv:oldPm xdiv:oldPs) (progn (initget "Yes No") (setq swMod (getkword "\nRestore point style? [Yes/No] <No>: ")) (if(null swMod)(setq swMod "No")) (if (= swMod "Yes") (progn (princ "\nPlease wait... \n") (setvar "PDMODE" xdiv:oldPm) (setvar "PDSIZE" xdiv:oldPs) ); end progn ); end if ); end progn ); end if (princ) ); end of RestorePointStyle (defun AddPointOrInsert(Mode Block Scale) (vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point curPt)) ); end of AddPointOrInsert (defun AddPointOrInsert(Mode Block Scale / outObj) (setq undoLst (append (list (list (setq outObj (vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point curPt))); end setq curPt xdiv:curDis ); end list ); end list undoLst); end append ); end setq outObj ); end of AddPointOrInsert (defun *error*(msg) (if cCurve (progn (vla-Highlight cCurve :vlax-false) (setvar "OSMODE" oldOsn) ); end progn ); end if (princ "\n*Cancel*") (princ) ); end of *error* (if (member (setq xdiv:oldPm(getvar "PDMODE")) '(0 1) ); end member (progn (setq xdiv:oldPs(getvar "PDSIZE")) (initget "Yes No") (setq swMod (getkword "\nChange points style to good visible? [Yes/No] <Yes>: ")) (if(null swMod)(setq swMod "Yes")) (if (= swMod "Yes") (progn (princ "\nPlease wait... \n") (setvar "PDMODE" 35) (setvar "PDSIZE" -2) ); end progn ); end if ); end progn ); end if (setq oldOsn (getvar "OSMODE")); end setq (if (not xdiv:curDis) (setq xdiv:curDis 1.0 xdiv:oldDis 1.0); end setq ); end if (if (setq cCurve (entsel "\nSelect curve > ")); end setq (progn (setq cCurve (vlax-ename->vla-object (car cCurve))); end setq (if (member (setq obType (vla-get-ObjectName cCurve)) '("AcDbLine" "AcDbPolyline" "AcDb3dPolyline" "AcDbSpline" "AcDbArc" "AcDbCircle" "AcDbEllipse") ); end member (progn (vla-Highlight cCurve :vlax-true) (setvar "OSMODE" 3071) (setq stPt (vlax-curve-GetStartPoint cCurve) enPt (vlax-curve-GetEndPoint cCurve) fPt (getpoint "\nPick start markup point at curve > ") ); end setq (if fPt (setq fPt(trans fPt 1 0) curPt(vla-AddPoint (asmi_GetActiveSpace) (vlax-3d-point fpt)); end vla-AddPoint undoLst (list (list curPt 0.0 0.0)); end list ); end setq ); end if (if (and fPt (setq fPar (vlax-curve-GetParamAtPoint cCurve fPt)) ); end and (progn (if (and (not(equal fPt stPt 0.0001)) (not(equal fPt enPt 0.0001)) ); end or (progn (setq dPt (getpoint fPt "\nPick point at curve to specify markup direction > ")) (if dPt (setq dPt(trans dPt 1 0))); end if (if (and dPt (setq dPar (vlax-curve-GetParamAtPoint cCurve dPt)) ); end and (progn ); end progn (princ "\nEmpty input or point not at curve! ") ); end if ); end progn ); end if ); end progn (princ "\nEmpty input or point not at curve! ") ); end if ); end progn (princ "\nInvalid object type! ") ); end if (setq maxLen (- (vlax-curve-GetDistAtPoint cCurve enPt) (vlax-curve-GetDistAtPoint cCurve stPt) ); end - rClose (vlax-curve-IsClosed cCurve) ); end setq (if(equal fPt stPt 0.0001) (setq vClose T) ); end if (if (or (equal fPt stPt 0.0001) (and dPar (> dPar fPar) ); end and ); end or (setq posDir T sumDis (vlax-curve-GetDistAtPoint cCurve fPt) ); end setq (setq sumDis (- maxLen (- maxLen (vlax-curve-GetDistAtPoint cCurve fPt))) ); end setq ); end if (while(not sFlag) (setq whatDo (getstring (strcat "\nSpecify distance or [undo/Quit] <" (if xdiv:curDis(rtos xdiv:curDis) "not defined") ">: "); end strcat ); end getstring ); end setq (cond ((or (= 'REAL(type(distof whatDo))) (= "" whatDo) ); end or (if(= "" whatDo) (setq xdiv:curDis xdiv:oldDis) (setq xdiv:curDis(distof whatDo)) ); end if (setq xdiv:oldDis xdiv:curDis); end setq (cond (posDir (setq sumDis (+ sumDis xdiv:curDis) curPt (vlax-curve-GetPointAtDist cCurve sumDis) ); end setq (if curPt (AddPointOrInsert nil nil nil) (princ "\n>>> End of line <<< ") ); end if ); end condition # 1 ((not posDir) (setq sumDis (- sumDis xdiv:curDis) curPt (vlax-curve-GetPointAtDist cCurve sumDis) ); end setq (if curPt (AddPointOrInsert nil nil nil) (princ "\n>>> End of line <<< ") ); end if ); end condition # 1 ); end cond ); end condition #1 ((=(strcase whatDo) "Q") (if (= 1(length undoLst)) (vla-Delete(caar undoLst)) ); end if (RestorePointStyle) (if cCurve (progn (vla-Highlight cCurve :vlax-false) (setvar "OSMODE" oldOsn) ); end progn ); end if (setq sFlag T) ) ((=(strcase whatDo) "U") (if (and undoLst (/= 1(length undoLst)) ); end and (progn (vla-Delete(caar undoLst)) (setq undoLst(cdr undoLst) curPt(cadar undoLst) sumDis(- sumDis (last (car undoLst))) ); end setq ); end progn (princ "\n>>> Nothing to undo <<< ") ); end if ) ); end cond ); end while ); end progn (princ "\nEmpty selection! ") ); end if (princ) ); end of xdiv and I see that UNDO not work well. Undo the last post ,but when insert the new point calculate the distanse from the delete point and not from the previous. This is not correct !!! Can any one fix the code ? Thanks Quote
BIGAL Posted Wednesday at 12:39 AM Posted Wednesday at 12:39 AM Your turn you have 315 posts have a go at fixing. need to save somewhere the second last point co-ords you made. 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.