leo321 发表于 2022-7-6 06:49:11

让我把它带给专业人士
 
什么是正确的命令?
 



(defun c:pline-coor ( / *error* data-lst sorted-lst str-lst top-str polys
                              data cnt obj file-nm tmp item tmp-str fl)

(defun *error* (msg)
   (if(= msg "quit / exit abort")
   (princ "\nNo output file was selected")
   (princ msg)
   )
)

(setq top-str ""
       file-nm (getfiled "Output File" "" "doc" 1)
)
(if(null file-nm)(exit))
(if(setq polys(ssget '((0 . "*POLYLINE"))))
   (repeat(setq cnt(sslength polys))
   (setq obj      (vlax-ename->vla-object
                      (ssname polys
                        (setq cnt(1- cnt))
                      )
                  )
         data-lst (cons
                      (list(vlax-get obj 'Layer)
                      (vlax-get-property obj 'Coordinates)The problem line!!
                     
                      )         
                      data-lst
                  )
   )
   )
)
(while data-lst
   (setq data   (car data-lst)
         data-lst (cdr data-lst)
         tmp      (list data)
   )
   (foreach item data-lst
   (if(=(car item)(car data))
       (setq tmp      (cons item tmp)
             data-lst (vl-remove item data-lst)
       )
   )
   )
   (setq sorted-lst(cons tmp sorted-lst))
)
(setq sorted-lst
   (vl-sort sorted-lst '(lambda(a b)(<(caar a)(caar b))))
)
(foreach item (reverse sorted-lst)
   (setq top-str
   (strcat(caar item)"," top-str)
   )
)
(setq str-lst (cons top-str str-lst)
       cnt   0
)
(repeat(apply 'max(mapcar 'length sorted-lst))
   (setq tmp-str "")
   (foreach item (reverse sorted-lst)
   (setq tmp-str
       (if(setq tmp(nth cnt item))
         (strcat(rtos(cadr tmp)) "," tmp-str)
         (strcat "," tmp-str)
       )
   )
   )
   (setq cnt   (1+ cnt)
         str-lst (cons tmp-str str-lst)
   )
)
(if(setq fl(open file-nm "w"))
   (progn
   (foreach str (reverse str-lst)
       (write-line str fl)
   )
   (close fl)
   (alert(strcat file-nm " was created"))
   )
   (alert "Unable to create file")
)
(princ)
)







 
总之,这一行:
 

(defun vex-plverts(ent / retn listy retDum add1 add2);
(vl-load-com)
(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
   (progn
   (setq retn nil listy (vlax-safearray->list (vlax-variant-value (vla-get-coordinates (vlax-ename->vla-object ent)))))
   (while (and (setq var1 (car listy)) (setq var2 (cadr listy)))
(setq retn (append retn (list (list var1 var2 0))))
(setq listy (cddr listy)))
   )
   )
retn
); Returns a list of 3D coordinates defining the vertices of a polygon

 
现在是:
(vlax-get-property obj 'Coordinates)The problem line!!

Commandobill 发表于 2022-7-6 06:53:50

这已经足够了。
 
(vex-plverts (ssname polys cnt))

Tharwat 发表于 2022-7-6 06:57:29

目标是将顶点X,Y+layername的值并排导出到DOC或txt,如下所示;
原始样品;
 
交换
(vlax get property obj’Coordinates)问题线!!
 
为此;
 
(vlax get obj’区域)
 
对于take value area+layername,效果良好
 
使用文档的提示:
 
必须将“,”更改为“^t”以将零件号粘贴到excel中。a在excel中创建新的特殊粘贴
使用选项Transpor将行到列的信息更改为更好的查看器。
 
目标是X,Y+层名称
 
感谢您的支持
 

leo321 发表于 2022-7-6 07:00:53

我不知道我做得是否正确,但我在命令行中得到了一些与此相关的结果
“(vex plverts(ssname polys cnt))”
 
但没有层名称。。。

leo321 发表于 2022-7-6 07:03:58

听起来不错,直到你对已经编写的代码进行“否定”后,它才会返回层名称。。。

Commandobill 发表于 2022-7-6 07:08:15

谢谢你的帮助,Commandobill,很抱歉我的无知,但我想用代码做‘cons’,但我用它实现了自我。
我认为这会更容易。

leo321 发表于 2022-7-6 07:09:14

因为我反对重写东西,几年前我从李那里偷了这个。您的代码似乎按顺序对点进行排序,但您没有说您需要它。如果你这样做,我也可以把它放在这里。
 
;;多段线顶点导出器~ Lee McDonnell ~ 26.11.2009(defun c:pExp(/ss tmp i j ent tot dis pt)(vl load com)(if(and(and(setq ss(ssget’((0.*Polyline)))(setq tmp(getfield“Output File”(cond(*load)(”“)”txt;csv“9))(progn(setq*load tmp tmp(open tmp“a”)i-1)(write line“X,Y,Layer”tmp)(while(setq ent(ssname ss(setq i(1+i))))))(No.dll setq tot 0.j(1-(vlax曲线getStartParam ent)))(而(

Commandobill 发表于 2022-7-6 07:13:37

哦,那个新的我在我的故事里得到了不同的版本。非常相似,只是需要更改层的“距离”非常好,我会试试。
 
不幸的是,像PtManagerV2-4这样的伟大工具。lsp和Geo_Export_v2_6。VLX没有给出这种可能性。
 
非常感谢您的帮助,新的Commandobill先生!!!
 
;;多段线顶点导出器~ Lee McDonnell ~ 27.11.2009(defun c:pExp(/*error*ObjRel ss col row ent tot j pt)(vl load com)(defun*error*(e)(ObjRel(list xlApp xlCells))(或(wcmatch(strcase)“*BREAK,*CANCEL*,*EXIT*”)(princ(strcat“\n**error:”e“**”))(princ))(defun ObjRel(lst)(mapcar(function)(lambda(x)(if(and(eq(type x)'VLA-OBJECT)(not(vlax-object-released-p x))(vl catch all apply“vlax release object(list x 107;а)а”)lst)(if(setq i-1 ss(ssget’((0.*POLYLINE”)))(progn(setq xlApp(vlax get or create object“Excel.Application”)xlCells(vlax get property(vlax get property)(vlax get property(vlax invoke方法(vlax get property xlApp“Workbooks”)“Add”)“Sheets”)“Item”1“Cells”)第0列第1行(mapcar(函数(lambda(x)(vlax put property xlCells“Item”行(setq col(1+col))x))'(“x”“Y”“Z”点“Distance”“Total”)(while(setq ent(ssname ss(setq i(1+i))))(setq tot 0.row(1+row)j(1-(vlax curve getStartParam ent)))(while(

leo321 发表于 2022-7-6 07:16:59

页: 1 [2]
查看完整版本: 为什么';t此代码r